深入了解Dubbo框架的运行流程和核心组件
扫描二维码随身看资讯
使用手机 二维码应用 扫描右侧二维码,您可以
1. 在手机上细细品读~
2. 分享给您的微信好友或朋友圈~
Dubbo是一款高性能、轻量级的开源RPC(远程过程调用)框架,主要用于构建分布式服务和微服务架构。那Dubbo又是如何运行的呢?让我们一起来看。
核心组件
要说Dubbo运行流程就不得不先来了解一下Dubbo的核心组件了,因为Dubbo的交互流程是和核心组件息息相关的。
Dubbo核心组件有以下几个:
- 服务提供者(Provider) :暴露服务的应用,通过Dubbo框架将自身的服务接口及实现注册到注册中心。
- 服务消费者(Consumer) :调用远程服务的应用,从注册中心订阅所需的服务,然后通过远程调用消费服务。
- 注册中心(Registry) :集中管理服务的地址信息,服务提供者和服务消费者均在此注册或订阅服务信息。常见的注册中心有ZooKeeper、Nacos等。
运行流程
Dubbo运行流程如下图所示:
它的执行流程如下:
- 服务提供者会将实例(URL地址)注册到注册中心,注册中心负责对数据进行聚合(健康检测)。
- 消费者从注册中心读取地址列表并订阅变更,每当地址列表发生变化,注册中心将最新的列表通知到所有订阅的消费者实例。
- 消费者得到服务实例之后,通过Dubbo内置的负载均衡策略,选择其中的一个节点,之后使用RPC的方式与服务提供者建立连接,并进行通讯和服务调用。
更详细的调用流程如下:
支持的通讯协议
Dubbo框架提供了自定义的高性能RPC通信协议:基于HTTP/2的Triple协议和基于TCP的Dubbo2协议。除此之外,Dubbo框架支持任意第三方通信协议,如官方支持的gRPC、Thrift、REST、JsonRPC、Hessian2等,更多协议可以通过自定义扩展实现。这对于微服务实践中经常要处理的多协议通信场景非常有用。
Dubbo框架不绑定任何通信协议,在实现上Dubbo对多协议的支持也非常灵活,它可以让你在一个应用内发布多个使用不同协议的服务,并且支持用同一个port端口对外发布所有协议。
通过Dubbo框架的多协议支持,你可以做到:
- 将任意通信协议无缝地接入Dubbo服务治理体系。Dubbo体系下的所有通信协议,都可以享受到Dubbo的编程模型、服务发现、流量管控等优势。比如gRPC over Dubbo的模式,服务治理、编程API都能够零成本接入Dubbo体系。
- 兼容不同技术栈,业务系统混合使用不同的服务框架、RPC框架。比如有些服务使用gRPC或者Spring Cloud开发,有些服务使用Dubbo框架开发,通过Dubbo的多协议支持可以很好的实现互通。
- 让协议迁移变的更简单。通过多协议、注册中心的协调,可以快速满足公司内协议迁移的需求。比如如从自研协议升级到Dubbo协议,Dubbo协议自身升级,从Dubbo协议迁移到gRPC,从HTTP迁移到Dubbo协议等。
Dubbo负载均衡策略
目前Dubbo(3.X)内置了如下负载均衡策略:
- Weighted Random LoadBalance(加权随机) :默认负载均衡算法,默认权重相同。按权重设置随机概率。缺点:存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
- RoundRobin LoadBalance(加权轮询) :借鉴于Nginx的平滑加权轮询算法,默认权重相同,按公约后的权重设置轮询比率,循环调用节点。缺点:同样存在慢的提供者累积请求的问题。
- LeastActive LoadBalance(最少活跃优先+加权随机) :背后是能者多劳的思想,活跃数越低,越优先调用,相同活跃数的进行加权随机。活跃数指调用前后计数差(针对特定提供者:请求发送数 - 响应返回数),表示特定提供者的任务堆积量,活跃数越低,代表该提供者处理能力越强。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大;相对的,处理能力越强的节点,处理更多的请求。
- Shortest-Response LoadBalance(最短响应优先+加权随机) :更加关注响应速度,在最近一个滑动窗口中,响应时间越短,越优先调用。相同响应时间的进行加权随机。使得响应时间越快的提供者,处理更多的请求。缺点:可能会造成流量过于集中于高性能节点的问题。
- ConsistentHash LoadBalance(一致性哈希) :确定的入参,确定的提供者,适用于有状态请求。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
- P2C LoadBalance(随机选择两个节点+连接数较小) :随机选择两个节点后,继续选择“连接数”较小的那个节点。对于每次调用,从可用的provider列表中做两次随机选择,选出两个节点providerA和providerB,比较providerA和providerB两个节点,选择其“当前正在处理的连接数”较小的那个节点。
- Adaptive LoadBalance(自适应负载均衡) :在P2C算法基础上,选择二者中load最小的那个节点,是一种能根据后端实例负载自动调整流量分布的算法实现,它总是尝试将请求转发到负载最小的节点。
课后思考
具体说说RPC调用的执行流程?
本文已收录到我的面试小站 www.javacn.site ,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。
文鸟芭菲宠物
海王捕鱼多账号登录版本下载 v1.2.57650 安卓版
ASMR刺绣 安卓版
三国之刃无限元宝破解版内置菜单 v18.19.0 官方版
愤怒的小鸟 官方正版下载2024
夏哈塔遭难的一天 0.88.1版
梦想农场无限99999钻999999金币游戏下载 v1.2.0 安卓版
长春公交
永安行最新版
帕金森模拟器手机版 v64 中文版
梦幻花园抖音版下载 v7.1.0 安卓版
危险人渣 手机版
我是丐帮帮主v
令人满意的时刻
- 海量数据处理利器 Roaring BitMap 原理介绍
- 云计算资源弹性伸缩技术详解
- 使用.NET中的System.IO.Compression进行文件和文件夹压缩的方法
- Flutter 借助SearchDelegate实现搜索页面,实现搜索建议、搜索结果,解决IOS拼音问题
- Flash驱动控制--芯片擦除(SPI协议)
- Canvas在前端开发中的重要性和应用
- Java IO流中的数据流分类
- 自定义实现H5页面下拉刷新功能
- 高级前端开发需要知道的 25 个 JavaScript 单行代码
- MyBatis 的缓存机制
- 解决Docker镜像下载问题的Java工具
- Lakehouse 还是 Warehouse?(2/2).md
- 1
加查之花 正版
- 2
爪女孩 最新版
- 3
企鹅岛 官方正版中文版
- 4
捕鱼大世界 无限金币版
- 5
情商天花板 2024最新版
- 6
内蒙打大a真人版
- 7
烦人的村民 手机版
- 8
跳跃之王手游
- 9
球球英雄 手游
- 10
蛋仔派对 国服版本