
本文共 1932 字,大约阅读时间需要 6 分钟。
分层架构概述
Apache Dubbo是一个高级的服务治理框架,典型的分层架构优势在于模块化设计和灵活扩展。其主要分为以下几层:
1. Service和Config层
这层主要面向服务接口的定义与管理,作为API接口层,提升了对 Dubbo服务的方便使用。服务提供方通过实现接口后,可以用 ServiceConfig 发布服务,而服务消费方则利用 ReferenceConfig 进行引用。我事件订这个层与后续层的集成非常简单,可以通过配置管理自动化配置,减少手动操作的复杂性。
2. SPI扩展层
其他各层均基于SPI(Service Provider Interface)扩展机制。SPI的使用,使得 Dubbo 具备紧凑且灵活的特点。Dubbo 增强了 JDK 中的标准 SPI 功能,提供了对 IoC 和 AOP 的支持。这个特性极大地优化了解决资源初始化效率问题,避免了一些不必要的性能消耗。
3. Proxy服务代理层
主要负责服务消费端的接口代理,将本地接口转化为能够进行远程调用的代理类。这一层负责对服务调用进行透明处理,将本地方法转化为远程调用的形式。此外,提供了两种代理实现:JavassistProxyFactory 和 JdkProxyFactory,为用户提供灵活的选择。
4. Registry 服务注册中心层
负责服务的动态注册与发现,服务提供方启动时会将服务信息注册至中心,消费方启动时可通过中心获取服务提供者地址。 Registry 层扩展性强,支持多种实现方式,包括 ZookeeperRegistry、RedisRegistry 等,能够根据具体需求灵活配置。
5. Cluster 路由层
控制服务的路由规则、负载均衡和集群容错策略,深度集成到服务注册中心中。Cluster 层提供多种负载均衡算法,如 RandomLoadBalance、RoundRobinLoadBalance 等,以及容错机制,如 FailoverCluster、FailbackCluster 等,满足不同场景的需求。
6. Monitor 监控层
用于统计 RPC 调用的次数和耗时。通过 MonitorFactory 扩展接口,可实现自定义监控策略,为性能分析提供重要数据支持。
7. Protocol 远程调用层
封装 RPC 调用逻辑,处理服务之间的远程通信。Protocol 层的不同实现类如 RegistryProtocol、DubboProtocol 和 InjvmProtocol 等,能够适应不同的通信需求。
8. Exchange 信息交换层
处理请求响应模式的转换,支持同步和异步通信。通过 Exchanger 扩展接口,实现不同通信模式的切换和统一。
9. Transport 网络传输层
基于 Mina 和 Netty 提供对接,实现网络通信的统一接口。支持多种传输协议,如 GrizzlyTransporter、MinaTransporter 和 NettyTransporter,通过 Codec 层进行数据格式转换。
10. Serialize 数据序列化层
为服务之间的数据传输提供标准化工具,支持多种序列化方式,如 DubboSerialization、FastJsonSerialization 等。同时,通过 ThreadPool 扩展接口,优化资源管理,支持多种线程模型。
远程调用概述
服务提供者暴露服务
Dubbo 的核心模块之一是服务的暴露与消费。服务提供者主要通过以下步骤完成服务的发布:
Ref 到 Invoker
ServiceConfig 类对外提供的服务实现类(如 GreetingServiceImpl)通过 ProxyFactory#getInvoker 方法生成 AbstractProxyInvoker 实例完成Invoker 的构建。Invoker 到 Export
Dubbo 协议的 Invoker 转换为 Exporter 过程发生在 Protocol#export 方法中。这个转换涉及启动 Netty Server 并监听服务连接,同时将服务注册至服务注册中心。服务消费者消费服务
服务消费者需要通过以下步骤获取服务:
ReferenceConfig 初始化
ReferenceConfig#init 方法调用 Protocol#refer 方法生成 Invoker 实例,启动位置信息服务的发现机制。Invoker 到客户端接口
ProxyFactory 接口的扩展实现类通过 getProxy 方法将 Invoker 转换为客户端需要的具体接口,便于直接调用。发表评论
最新留言
关于作者
