`
jieke_ZJ
  • 浏览: 44801 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Dubbo架构与底层实现

 
阅读更多

摘要: (1)系统角色 Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。1 Monitor: 统计服务的调用次调和调用时间的监控中心。

一、Dubbo的设计角色

(1)系统角色
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。1
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。

(2)调用关系
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

 

二、Dubbo是如何架构的

Dubbo的总体架构如图所示:

 

框架分层架构中,各个层次的设计要点:

服务接口层(Service):该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。
配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。
服务代理层(Proxy):服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。
服务注册层(Registry):封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。
集群层(Cluster):封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。
监控层(Monitor):RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。
远程调用层(Protocol):封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。
信息交换层(Exchange):封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
网络传输层(Transport):抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。
数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。


Dubbo的底层实现

(1)协议支持

Dubbo支持多种协议,如下所示:
Dubbo协议 Hessian协议
HTTP协议 RMI协议
WebService协议
Thrift协议 Memcached协议 Redis协议
在通信过程中,不同的服务等级一般对应着不同的服务质量,那么选择合适的协议便是一件非常重要的事情。你可以根据你应用的创建来选择。例如,使用RMI协议,一般会受到防火墙的限制,所以对于外部与内部进行通信的场景,就不要使用RMI协议,而是基于HTTP协议或者Hessian协议。

(2)默认使用Dubbo协议

连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO异步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要使用dubbo协议传输大文件或超大字符串
使用场景:常规远程服务方法调用
从上面的适用范围总结,dubbo适合小数据量大并发的服务调用,以及消费者机器远大于生产者机器数的情况,不适合传输大数据量的服务比如文件、视频等,除非请求量很低。

(3)Dubbo源码模块图

Dubbo以包结构来组织各个模块,各个模块及其关系,如图所示:

可以通过Dubbo的代码(使用Maven管理)组织,与上面的模块进行比较。简单说明各个包的情况:
dubbo-common 公共逻辑模块,包括Util类和通用模型。
dubbo-remoting 远程通讯模块,相当于Dubbo协议的实现,如果RPC用RMI协议则不需要使用此包。
dubbo-rpc 远程调用模块,抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。
dubbo-cluster 集群模块,将多个服务提供方伪装为一个提供方,包括:负载均衡、容错、路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。
dubbo-registry 注册中心模块,基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。
dubbo-monitor 监控模块,统计服务调用次数,调用时间的,调用链跟踪的服务。
dubbo-config 配置模块,是Dubbo对外的API,用户通过Config使用Dubbo,隐藏Dubbo所有细节。
dubbo-container 容器模块,是一个Standalone的容器,以简单的Main加载Spring启动,因为服务通常不需要Tomcat/JBoss等Web容器的特性,没必要用Web容器去加载服务。

 

四、服务暴露和消费的详细过程

(1)服务提供者暴露一个服务的详细过程

服务提供者暴露服务的主过程:


首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,

到这一步就完成具体服务到Invoker的转化。接下来就是Invoker转换到Exporter的过程。

Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程(如上图中的红色部分),下面我们以Dubbo和RMI这两种典型协议的实现来进行说明:

Dubbo的实现

Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由Dubbo自己实现。

RMI的实现

RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法,
它通过Spring或Dubbo或JDK来实现RMI服务,通讯细节这一块由JDK底层来实现,这就省了不少工作量。


(2)服务消费者消费一个服务的详细过程

服务消费的主过程:


首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例(如上图中的红色部分),这是服务消费的关键。

接下来把Invoker转换为客户端需要的接口(如:HelloWorld)。

分享到:
评论

相关推荐

    Dubbo架构设计详解

    ### Dubbo架构设计详解 #### 一、总体架构概述 Dubbo是阿里巴巴开源的一款高性能、轻量级的微服务框架,其主要特点是采用分层架构设计,使得每一层都有明确的功能定位,从而达到各层之间的低耦合度。这种设计方式...

    Dubbo入门到精通架构高级课程

    1. **Service Model**:定义了服务接口和服务实现类,是整个Dubbo架构的基础。 2. **Cluster**:负责服务集群的管理,包括负载均衡策略的选择和实现。 3. **Registry**:实现服务的注册与发现功能,可以对接不同的...

    dubbo详细架构

    Dubbo的总体架构图揭示了其分层设计的思想,大致可以划分成10个层次,顶层Service层留给开发者实现业务逻辑的接口层。左侧淡蓝色背景代表服务消费方使用的接口,右侧淡绿色背景代表服务提供方使用的接口,中间则是...

    Dubbo入门_实战

    在这个案例中,我们将具体分析Dubbo如何帮助实现这一目标。 - **角色定义**: - **Consumer**(消费者): 即系统A,需要调用其他系统的接口获取数据。 - **Provider**(提供者): 即系统B,提供数据接口。 - **...

    dubbo2.0源码解读

    3. **Dubbo架构简介**:Dubbo采用三层架构模型(Service、Proxy、Invoker),并基于RPC(远程过程调用)实现服务间的通信。它还包括服务注册与发现、负载均衡、容错机制、监控等核心组件。 4. **HelloWorld例子**:...

    Dubbo文档.rar

    Dubbo的初衷是为了解决微服务架构中的服务治理问题,它提供了服务注册、服务发现、负载均衡、容错处理等一系列功能,使得开发者可以专注于业务逻辑,而无需过多关注底层基础设施。Dubbo不仅支持远程调用,还具备监控...

    dubbo源码解析

    7. Dubbo架构和背景:随着互联网的发展,网站应用规模的扩大,传统的垂直应用架构已难以满足需求,因此分布式服务架构和流动计算架构变得势在必行。Dubbo作为一个治理系统,被用来确保架构的稳定演进。 8. Hello...

    SpringBoot+Dubbo+Nacos实现远程服务调用

    5. **远程调用**:在服务消费者的业务逻辑中,可以直接调用服务提供者的接口方法,Dubbo会负责底层的网络通信和序列化,实现透明的远程调用。 6. **配置动态化**:Nacos可以作为配置中心,服务提供者和服务消费者都...

    Dubbo框架RPC实现原理

    Dubbo框架提供的RPC机制解决了分布式系统中的服务调用问题,使得开发者可以更加专注于业务逻辑的开发,而不必担心底层的网络通讯细节。通过其灵活的配置和高级功能,Dubbo支持了多种服务治理策略,帮助构建高效稳定...

    Spring+dubbo实例

    总结,Spring与Dubbo的结合使用,可以构建出高可用、可扩展的分布式服务架构。开发者在掌握这两项技术后,能够更好地应对大型分布式系统的挑战,提升软件系统的灵活性和可靠性。在实际工作中,不断探索和实践,才能...

    dubbo最新全面深度解读 dubbo介绍.pdf

    它被设计用来简化分布式服务架构的实现,提供服务注册与发现、负载均衡、容错机制等功能。从描述中可以看出,本文档将对dubbo进行最新全面深度解读,内容涵盖了dubbo的简介、架构、配置方式、注册中心、协议、NIO...

    dubbo学习笔记.pdf

    - 可以通过Spring Boot或Spring Cloud与Dubbo集成,实现微服务架构。 - 使用注册中心(如ZooKeeper、Eureka、Consul等)来管理服务,实现服务的动态注册和发现。 - 配合监控工具(如Zipkin、Prometheus、Grafana...

    dubbo教程视频源码

    Dubbo 的整体架构设计围绕着服务提供者、消费者以及注册中心展开,通过定义一系列的扩展点接口(SPI),实现了框架的高度可扩展性。 #### 3.2 SPI机制 Dubbo 使用 SPI (Service Provider Interface) 机制来实现扩展...

    zookeeper+dubbo+spring

    在IT行业中,Zookeeper、Dubbo和Spring是三个非常重要的组件,它们在分布式系统和微服务架构中扮演着核心角色。下面将详细解释这三个技术及其相互间的整合。 **Zookeeper** 是一个分布式的,开放源码的分布式应用...

    Dubbo介绍.pptx

    3. **Registry(服务注册中心)**:服务注册中心是Dubbo架构中的重要组成部分,它使得服务消费者能够动态地查找服务提供者的位置信息,从而实现了地址的透明化。这种机制使得服务提供者可以轻松地扩展或缩减,而不会...

    dubbo使用小例子

    Dubbo是由阿里巴巴开源的高性能、轻量级的服务治理框架,它主要应用于微服务架构中,提供服务的发布、订阅、调用等功能。在这个小例子中,我们将通过两个关键组件——`dubboconsumer`和`dubboprovider`来了解Dubbo的...

    dubbo文档

    二、Dubbo架构 Dubbo的架构设计主要包括三个主要组件:Provider(服务提供者)、Consumer(服务消费者)和服务注册中心。Provider暴露服务,Consumer调用服务,两者之间的通信依赖于注册中心。此外,Dubbo还包含...

    dubbo 源码

    Dubbo,作为阿里巴巴开源的一款高性能、轻量级的Java服务框架,其源码的深度研究对于理解分布式服务治理、RPC机制以及微服务架构有极大的帮助。本文将深入探讨Dubbo的核心设计理念和关键组件,以期为你提供全面的...

    dubbo2.5.3.rar

    《Dubbo 2.5.3:打造高性能分布式服务架构》 Dubbo,作为阿里巴巴开源的一款强大、成熟的分布式服务框架,旨在提供高性能、透明化的RPC(Remote Procedure Call)服务调用解决方案,同时它也是实现SOA(Service-...

    dubbo-client 客户端

    综上所述,dubbo-client是微服务架构中的重要组成部分,它使得服务消费端能够便捷地调用服务提供者,而无需关心底层实现细节,极大地提升了开发效率和系统稳定性。通过不断升级和优化,Dubbo致力于为开发者提供更...

Global site tag (gtag.js) - Google Analytics