资料
  • 资料
  • 专题
Java主流分布式解决方案多场景设计与实战(附源码)
推荐星级:
类别: 软件/EDA/IP
时间:2023-10-27
大小:3.56KB
阅读数:394
上传用户:huangyasir1990
查看他发布的资源
下载次数
7
所需E币
0
ebi
新用户注册即送 300 E币
更多E币赚取方法,请查看
close
资料介绍
一、什么是分布式系统?
要理解分布式系统,主要需要明白一下2个方面:
1、分布式系统一定是由多个节点组成的系统。
其中,节点指的是计算机服务器,而且这些节点一般不是孤立的,而是互通的。
2、这些连通的节点上部署了我们的节点,并且相互的操作会有协同。
分布式系统对于用户而言,他们面对的就是一个服务器,提供用户需要的服务而已。而实际上这些服务是通过背后的众多服务器组成的一个分布式系统。因此分布式系统看起来像是一个超级计算机一样。
Java筑基(基础):Tomcat+Mysql+设计模式+并发编程+JVM+Netty开源框架(SSM框架):Spring+SpringMVC+Mybatis微服务架构:Dubbo、SpringBoot、SprinGCloud、Docker分布式:分布式限流+分布式缓存+分布式通讯(限流:Nignx+Zookeeper/缓存:Redis+MongoDB+Memcached/通讯:RabbitMQ+RocketMQ+Kafka)性能优化:Mysql优化+Java性能调优+JVM调优+Tomcat调

二、分布式对象技术有三大流派
目前国际上,分布式对象技术有三大流派——COBRA、COM/DCOM和Java。CORBA技术是最早出现的,1991年OMG颁布了COBRA 1.0标准,在当时来说做得非常漂亮;再有就是Microsoft的COM系列,从最初的COM发展成现在的DCOM,形成了Microsoft一套分布式对象的计算平台;而Sun公司的Java平台,在其最早推出的时候,只提供了远程的方法调用,在当时并不能被称为分布式对象计算,只是属于网络计算里的一种,接着推出的JavaBean,也还不足以和上述两大流派抗衡,而其目前的版本叫J2EE,推出了EJB,除了语言外还有组件的标准以及组件之间协同工作通讯的框架。于是,也就形成了目前的三大流派。
Motan是新浪微博开源的一个Java 框架。它诞生的比较晚,起于2013年,2016年5月开源。Motan 在微博平台中已经广泛应用,每天为数百个服务完成近千亿次的调用。

rpcx是Go语言生态圈的Dubbo, 比Dubbo更轻量,实现了Dubbo的许多特性,借助于Go语言优秀的并发特性和简洁语法,可以使用较少的代码实现分布式的RPC服务。

gRPC是Google开发的高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。本身它不是分布式的,所以要实现上面的框架的功能需要进一步的开发。

thrift是Apache的一个跨语言的高性能的服务框架,也得到了广泛的应用。
首先明确一点:分布式并不是某个技术的概称,而是一个互联网服务系统架构思想。我们一般称之为分布式架构。

那么分布式到底是什么一个概念:
分布式诞生的初衷是为了在多业务场景下,保证五个特点:高性能,高并发,高可用,可伸缩,可维护。
它的具体实现——分布式系统,则是由一组服务节点,共同协调工作组成。它们之间通过网络进行通信。
可以说它的诞生为单体架构解决了很大一部分问题,满足了互联网对大数据存储,高并发,快响应的要求,采用了”分而治之“的思想。

三、Java工程师必须学习分布式架构技术吗?
不论是从公司发展的需要、还是从个人能力提升考虑,分布式架构技术对于每位Java工程师来说,可以说是一项必备技能了!每一位想要在职业发展之路上更进一步的Java从业者,都需要牢牢掌握分布式架构思想。

在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦。本文主要是分享了5个常用的Java分布式缓存框架,这些缓存框架支持多台服务器的缓存读写功能,可以让你的缓存系统更容易扩展。

四、分布式架构的技术要点:
RPC的设计架构与思想,RPC架构完整调用流程,自定义RPC相应因素详情等;

Netty三大组件,ByteBuffer 之工作原理、应用模式、分配与释放机制、源码剖析等;

RPC工程设计与整体结构,完成RPC服务注册与发现功能;

ZK核心组件剖析,ZK工作流程剖析,网络通信组件、会话接收器、并发处理器等;

Dubbo源码结构、整体设计及层次结构与作用,SPI机制,Dubbo服务注册发现剖析,Dubbo服务高可用,Dubbo服务治理之调用过程、服务降级与限流剖析,网络通信协议详解。

五、分布式锁的解决方式
1. 首先明确一点,有人可能会问是否可以考虑采用ReentrantLock来实现,但是实际上去实现的时候是有问题的,ReentrantLock的lock和unlock要求必须是在同一线程进行,而分布式应用中,lock和unlock是两次不相关的请求,因此肯定不是同一线程,因此导致无法使用ReentrantLock。
2. 基于数据库表做乐观锁,用于分布式锁。
3. 使用memcached的add()方法,用于分布式锁。
4. 使用memcached的cas()方法,用于分布式锁。(不常用) 
5. 使用redis的setnx()、expire()方法,用于分布式锁。
6. 使用redis的setnx()、get()、getset()方法,用于分布式锁。
7. 使用redis的watch、multi、exec命令,用于分布式锁。(不常用) 
8. 使用zookeeper,用于分布式锁。(不常用) 

六、大型项目分布式系统核心问题你能解决多少?
分布式锁
1.你知道Etcd如何实现分布式锁的吗?
2.你知道Redis实现的分布式锁存在什么问题吗?
3.不同分布式锁实现方案的优缺点你清楚了吗?
4.如果让你手撸实现Redis分布式锁,你可以做到吗?

分布式事务
1.你知道为什么CAP不能同时满足吗?
2.你了解不同分布式事务解决方案对应什么样的应用场景么 ?
3.你知道为什么大多数业务场景都选择了最终一致性实现方案么?
4.你了解Seata框架为什么当下如此受欢迎么?

分布式ID
1.这么多种分布式ID生成方式,应该选择哪种呢?
2.雪花算法底层实现原理是什么?

分库分表
1.当数据量大了之后,我们应该如何选择分库分表的解决方案?
2.做分库分表,是应该垂直切分还是水平切分?

分布式会话
版权说明:本资料由用户提供并上传,仅用于学习交流;若内容存在侵权,请进行举报,或 联系我们 删除。
PARTNER CONTENT
相关评论 (下载后评价送E币 我要评论)
没有更多评论了
  • 可能感兴趣
  • 关注本资料的网友还下载了
  • 技术白皮书