一.基础知识
1.分布式系统是什么
分布式系统是若干独立计算机的集合
这些计算机对用户来说就是单个相关系统
比如:京东、淘宝
分布式系统用于处理大数据流量
dubbo用来维系和治理各个计算机中的关系
2.分布式发展演变
ORM(单一应用架构):
流量很小
所有功能放在一个应用里打包部署到服务器中
缺点:①扩展性低 ②协同开发困难
MVC(垂直应用架构):
将每一个功能放在独立的应用和独立的服务器上
每个功能都是完整独立的互不相干
优点:①适合分工合作 ②性能扩展容易
缺点:①界面+业务逻辑的实现分离 ②应用之间需要交互
RPC(分布式服务架构):
将不同的界面和其需要的业务逻辑拆分
进行功能之间的交互分工合作
缺点:服务器分布出现功能性差异
SOA(流动计算架构):
基于访问压力实时管理集群容量,提高集群利用率
在RPC的基础上加入调度中心
3.RPC
RPC(Remote Procedure Call)是指远程过程调用,是一种进程间通信方式,它是一种技术的思想,而不是规范。它允许程序调用另一个地址空间。
二.dubbo的概念
Apache Dubbo是一款高性能的Java RPC框架
1.特性:
①面向接口代理的高性能RPC调用
当我们需要远程调用时 我们只需要调用功能的方法接口
②智能负载均衡
也是就是平均服务器负载
③服务自动注册与发现
支持多种注册中心服务 注册中心相当于 web和实现功能的中间件
④高度可扩展能力
遵循微内核+插件的设计原则 所有核心能力都可以被当做扩展点
⑤运行期流量调度
通过配置不同的路由规则,轻松实现灰度发布
灰度发布:当我们有新的用户服务时 我们可以逐步调度服务器
先尝试部分服务器运行 运行过后没问题再逐步部署到全部服务器中
⑥可视化服务治理和运维
提供一个可视化的web界面查询服务元数据、服务健康
2.设计架构
贯穿整个应用
①注册中心 ②服务提供者 ③服务消费者 ④框架容器 ⑤监控中心
![](http://47.106.11.228/wp-content/uploads/2023/08/图片-37-1024x796.png)
运行流程:
框架启动后由④容器 启动后初始化(init)后 会将②服务提供者 提供给 ①注册中心 注册中心知道我们服务上线 由③服务消费者再向①注册中心订阅 每次订阅信息会定时发送给⑤监控中心
支持注册中心:
①Nacos ②Zookeeper ③Multicast ④Redis ⑤Simple
三.高可用
1.负载均衡机制
①Random LoadBanlance
基于权重的随机负载均衡机制
②RoundRobin LoadBanlance
基于权重的轮询负载均衡机制
③LeastActive LoadBanlance
最少活跃数-负载均衡机制
④ConsistenHash LoadBanlance
一致性hash-负载均衡机制
2.服务降级
当服务器压力剧增的情况下,根据实际业务情况及流量,
对一些服务和页面有策略的不处理或换种简单的方式处理,
从而释放服务器资源以保证核心交易正常运作或高效运作。
可以通过服务降级功能临时屏蔽某个出错的非关键服务,并定义降级后的返回策略
3.集群容错
在集群调用失败时,Dubbo提供了多种容错方案
①Failover Cluster
失败自动切换,当出现失败,重试其他服务器 可以设置重试次数
②Failfast Cluster
快速失败 :只发起一次调用 失败了就立即报错
③Failsafe Cluster
失败安全,出现异常时,直接忽略
④Failback Cluster
失败自动恢复,后台记录失败请求,定时重发
四.dubbo框架设计
框架设计
Dubbo的框架大致可以分为三层:
①业务层
②RPC层
③Remoting层
①业务层:
Service : 业务层,业务代码的实现,应用开发者工作在这一层
②RPC层:
Config:配置层,用来初始化配置信息,用来管理Dubbo的配置
Proxy:代理层,Dubbo中生产者和消费者都会生成Proxy,它用来调用远程接口,就像调用本地接口一样
Registry:注册层,负责框架的服务注册和发现
Cluster:集群容错层,负责远程调用的容错策略,负载均衡策略以及路由策略
Monuitor:监控层,负责监控调用次数和时间。
Protocol:远程调用层,封装调用的具体过程。
③Remoting层:
Exchange:信息交换层,建立Request-Response模型,分装请求响应模式
Transport:网络传输层,将网络传输封装成统一接口,可以在这之上扩展更多的网络传输方式
Serialize:序列化层,负责网络的序列化和反序列化
下图为这些架构的工作流程
![](http://47.106.11.228/wp-content/uploads/2023/08/图片-38.png)