Dubbo的架构设计
Dubbo整体架构如下图所示:
图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。
Dubbo框架设计一共划分了10个层:
1. 服务接口层(Service)
该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
2. 配置层(Config)
对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。
3.服务代理层(Proxy)
服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
4.服务注册层(Registry)
封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。
5.集群层(Cluster)
封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
6.监控层(Monitor)
RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。
7.远程调用层(Protocol)
封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
8. 信息交换层(Exchange)
封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
9.网络传输层(Transport)
抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。
10.数据序列化层(Serialize)
可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。
Dubbo核心组件
Dubbo角色,主要包含如下几个核心组件:
1)注册中心(registry)
生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。
2)消费者(consumer)
客户端,从注册中心获取到方法,可以调用生产者中的方法。
3)生产者(provider)
服务端,生产内容,生产前需要依赖容器(先启动容器)。
4)容器(container)
生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),
5)监控(Monitor)
统计服务的调用次数与时间等。
Dubbo调用流程
对照上面的整体架构图,大致分为以下8大步骤:
1、服务提供者启动,开启Netty服务,创建Zookeeper客户端,向注册中心注册服务;
2、服务消费者启动,通过Zookeeper向注册中心获取服务提供者列表,与服务提供者通过Netty建立长连接;
3、服务消费者通过接口开始远程调用服务,ProxyFactory通过初始化Proxy对象,Proxy通过创建动态代理对象;
4、动态代理对象通过invoke方法,层层包装生成一个Invoker对象,该对象包含了代理对象;
5、Invoker通过路由,负载均衡选择了一个最合适的服务提供者,在通过加入各种过滤器,协议层包装生成一个新的DubboInvoker对象;
6、再通过交换成将DubboInvoker对象包装成一个Reuqest对象,该对象通过序列化通过NettyClient传输到服务提供者的NettyServer端;
7、到了服务提供者这边,再通过反序列化、协议解密等操作生成一个DubboExporter对象,再层层传递处理,会生成一个服务提供端的Invoker对象;
8、这个Invoker对象会调用本地服务,获得结果再通过层层回调返回到服务消费者,服务消费者拿到结果后,再解析获得最终结果。
Dubbo 高可用性的应用场景
1、微服务架构中的 Dubbo 高可用性应用
在微服务架构中,Dubbo可以作为服务治理的核心框架,通过服务注册中心来实现服务的注册与发现,通过负载均衡策略来实现服务调用的负载均衡。同时,Dubbo还提供了多种容错机制,如重试机制、熔断机制、限流机制等,以保证服务的高可用性。
为了提高Dubbo在微服务架构中的高可用性,可以采取以下措施:
-
使用高可靠的服务注册中心,如Zookeeper或Consul,并采用集群方式部署,以保证服务注册与发现的可用性和稳定性。
-
配置合理的负载均衡策略,如随机、轮询、加权轮询等,以保证服务调用的负载均衡和性能优化。
-
配置合理的容错机制,如重试、熔断、限流等,以避免因服务调用失败而导致的服务不可用。
-
对服务进行监控和管理,及时发现服务故障并进行处理。
2、分布式系统中的 Dubbo 高可用性应用
在分布式系统中,Dubbo可以作为服务调用的核心框架,通过RPC协议来实现分布式服务之间的调用。为了保证分布式系统的高可用性和稳定性,需要对Dubbo进行性能优化和容错处理。
为了提高Dubbo在分布式系统中的高可用性,可以采取以下措施:
-
对Dubbo进行性能优化,包括网络优化、序列化优化、线程池优化等,以提高Dubbo的性能和并发处理能力。
-
配置合理的容错机制,如重试、熔断、限流等,以避免因服务调用失败而导致的服务不可用。
-
配置合理的超时时间和连接池大小,以保证Dubbo的带宽消耗和资源占用在可控范围内。
-
对服务进行监控和管理,及时发现服务故障并进行处理。
增强 Dubbo 高可用性的安全性和可靠性
以下是增强Dubbo高可用性的安全性和可靠性的几个方面:
服务治理
Dubbo的服务治理功能可以实现服务的注册、发现、路由和负载均衡等功能,可以通过对服务进行统一管理和监控,以保证服务的可靠性和安全性。同时,服务治理可以实现故障自愈、限流和熔断等机制,从而保证服务的高可用性和稳定性。
服务鉴权
在分布式系统中,需要对服务进行鉴权,确保只有授权的客户端才能访问服务,防止服务被未授权的访问和攻击。Dubbo提供了服务鉴权功能,可以通过配置访问控制列表(ACL)和认证授权机制来实现服务鉴权。
安全传输
Dubbo支持安全传输功能,可以使用SSL/TLS协议来保证数据的加密传输,防止数据被窃取和篡改。可以通过配置SSL/TLS证书来实现安全传输,同时可以通过限制客户端IP地址、使用访问令牌等方式来增强服务的安全性。
监控和日志
Dubbo的监控和日志功能可以实现对服务调用过程的监控和记录,可以通过监控数据和日志来发现和解决系统故障和安全问题。可以通过配置监控和日志中心来实现服务监控和记录。