作者:Gold1.架构演进单应用架构---->垂直架构---->分布式架构---->微服务架构----->云原生架构二、Dubbo整体架构1、角色功能Container:服务容器(tomcat、jetty、weblogic)Provider:服务提供者Consumer:服务消费者Registry:注册中心(Zookeeper、Nacos、Apollo)?Minitor:监控中心2.调用流程(1)服务容器负责服务提供者的启动、加载和运行。(2)服务提供者启动时,向注册中心注册自己提供的服务。(3)服务消费者启动时,向注册中心订阅自己需要的服务。(4)注册中心将服务提供者地址列表返回给消费者。如果有变化,注册中心会基于长连接将变化数据推送给消费者。(5)服务消费者根据软负载均衡算法从提供者地址列表中选择一个提供者进行调用,如果调用失败,再选择另一个提供者进行调用。(6)服务消费者和提供者在内存中累计调用次数和调用时间,每分钟定时向监控中心发送统计数据。3.Dubbo分层架构?Config配置层:对外配置接口,以ServiceConfig和ReferenceConfig为核心,可以直接初始化配置类,也可以通过spring解析配置生成配置类?Proxy服务代理层:服务接口透明代理,生成服务客户端Stub和服务端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory?Registry注册中心层:封装服务地址的注册和发现,以服务URL为中心,扩展接口为RegistryFactory、Registry、RegistryService?集群路由层:封装多个provider的路由和负载均衡,桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router、LoadBalance?Monitor监控层:RPC调用次数和调用时间监控,使用Statistics居中,扩展接口为MonitorFactory、Monitor、MonitorService?Protocol远程调用层:封装RPC调用,以Invocation、Result为中心,扩展接口为Protocol、Invoker、Exporter?Exchange信息交换层:封装请求响应方式,同步转异步,居中在Request和Response上,扩展接口有Exchanger、ExchangeChannel、ExchangeClient、ExchangeServer?Transport网络传输层:抽象mina和netty为统一接口,以Message为中心,扩展接口有Channel、Transporter、Client、Server、Codec?Serialize数据序列化层:一些可复用的工具,Serialization、ObjectInput、ObjectOutput、ThreadPool四大、Dubbo六大核心能力的扩展接口1.接口代理的高性能RPC调用提供基于代理的高性能远程调用能力,服务以接口为接口粒度,为开发者屏蔽远程调用的底层细节。2、服务自动注册和发现,支持多种注册中心服务,实时感知服务实例上线下线。3、负载均衡和智能容错内置多种负载均衡策略,智能感知下游节点健康状态,显着降低调用延迟,提高系统吞吐量。4.高扩展能力遵循微内核+插件的设计原则。Protocol、Transport、Serialization等所有核心能力都设计为扩展点,对内置实现和第三方实现一视同仁。5.运行时流量调度内置条件、脚本等路由策略,通过配置不同的路由规则,轻松实现同机房灰度发布、优先级等功能。6、可视化服务治理运维提供丰富的服务治理运维工具:随时查询服务元数据、服务健康状态和调用统计,实时下发路由策略,调整配置参数。五、RPC通信协议分布式框架的核心是RPC框架,而RPC框架的核心是RPC协议。RPC是指服务间的远程调用协议,即规定了服务间接口调用、序列化、网络传输的协议。Dubbo提供了Triple(Dubbo3)、Dubbo2协议,并集成了第三方协议,包括gRPC、Thrift、JsonRPC、Hessian2、REST等。RPC协议包括:服务提供者的IP地址、协议规定的开放端口、运行的服务、协议消息的编码、序列化方式6一、负载均衡与集群容错1、负载均衡Dubbo提供客户端负载均衡,即由TheConsumer通过负载均衡算法获取将请求提交给哪个Provider实例。集群负载均衡时,Dubbo提供了多种均衡策略,默认是随机随机调用。算法特点备注RandomLoadBalanceweightedrandomdefaultalgorithmwithsamedefaultweightRoundRobinLoadBalanceweightedround-robin借鉴了Nginx的smoothweightedround-robinalgorithmwithsamedefaultweightRandom更注重响应速度determinedprovider,适用于statefulrequestsFaultTolerantMechanismFeaturesFailoverFailureAutomaticSwitchingFailfastFastFailureFailsafeFailureSafetyFailbackFailureAutomaticRecoveryEntrance,负责Invoker的生命周期管理?Invoker实体域:Dubbo的核心模型,其他models接近它,或者转换成它,它代表一个可执行体,可以向它发起invoke调用,它可能是一个本地实现,或者远程实现,或者集群实现?Invocationsessiondomain:保存变量在2.基本设计原则?微内核+Plugin模式:微内核只负责组装Plugin,Dubbo自身的功能也是通过扩展点实现的,即Dubbo的所有功能点可以替换为自定义扩展URL:使用URL作为配置信息的统一格式,所有的扩展点都通过传递URL来携带配置信息8.总结至此,Dubbo的整体架构和核心模块介绍完毕.文中如有不当或错误观点,欢迎在评论区指出。感兴趣的同学可以关注后续的《Dubbo架构设计与源码分析》系列文章。
