分类: 云计算
2022-12-19 10:53:01
单应用架构 ----> 垂直架构 ----> 分布式架构 ----> 微服务架构 ----> 云原生架构
(1)服务容器负责启动,加载,运行服务提供者。
(2)服务提供者在启动时,向注册中心注册自己提供的服务。
(3)服务消费者在启动时,向注册中心订阅自己所需的服务。
(4)注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
(5)服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
(6)服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。
支持多种注册中心服务,服务实例上下线实时感知。
内置多种负载均衡策略,智能感知下游节点健康状况,显著减少调用延迟,提高系统吞吐量。
遵循微内核 + 插件的设计原则,所有核心能力如 Protocol、Transport、Serialization 被设计为扩展点,平等对待内置实现和第三方实现
内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现灰度发布,同机房优先等功能。
提供丰富服务治理、运维工具:随时查询服务元数据、服务健康状态及调用统计,实时下发路由策略、调整配置参数。
分布式框架的核心是 RPC 框架,RPC 框架的核心是 RPC 协议。RPC 是指服务之间远程调用协议,也就是指明了服务之间接口调用,进行序列化和网络传输的约定。
Dubbo 提供了 Triple (Dubbo3)、Dubbo2 协议, 第三方协议进行了集成,包括 gRPC、Thrift、JsonRPC、Hessian2、REST 等。其中 RPC 协议包含:服务提供者的 IP 地址、协议指定开放端口、运行服务、协议报文编码、序列化方式
Dubbo 提供的是客户端负载均衡,即由 Consumer 通过负载均衡算法得出需要将请求提交到哪个 Provider 实例。在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 random 随机调用。
算法 | 特性 | 备注 |
---|---|---|
RandomLoadBalance | 加权随机 | 默认算法,默认权重相同 |
RoundRobinLoadBalance | 加权轮询 | 借鉴于 Nginx 的平滑加权轮询算法,默认权重相同 |
LeastActiveLoadBalance | {BANNED}最佳少活跃优先 + 加权随机 | 背后是能者多劳的思想 |
ShortestResponseLoadBalance | {BANNED}最佳短响应优先 + 加权随机 | 更加关注响应速度 |
ConsistentHashLoadBalance | 一致性 Hash | 确定的入参,确定的提供者,适用于有状态请求 |
在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试
容错机制 | 特性 |
---|---|
Failover | 失败自动切换 |
Failfast | 快速失败 |
Failsafe | 失败安全 |
Failback | 失败自动恢复 |
Forking | 并行调用多个服务器 |
Broadcast | 广播调用所有提供者 |
至此,Dubbo 总体架构与核心模块介绍完成,文中如有不当或者错误观点,欢迎大家评论区指出。感兴趣的同学,可以关注后续 “Dubbo 架构设计与源码解析” 系列的文章。