Dubbo系列之框架概括(一)

从今天开始陆续介绍RPC框架中比较流行的一个,这个就是dubbo,它基本是很多主流公司都在使用的,该框架是阿里巴巴开源出来的,当然RPC框架有很多,比如motan,grpc,dubbox等,但是笔者发现很多公司虽然都在自研RPC框架,但是功能和思想都会借鉴dubbo的设计理念....,如果要想深入掌握RPC或者自己要自研,那么熟悉dubbo源码之后,相信会有更深刻的理解...,那么从今天开始就进入dubbo的神奇世界!

本章主要从总体上对dubbo进行一个总结和原理的概括,后面会陆续介绍各个核心知识点以及对应的源码分析,其实在RPC架构之前,还有其他的架构演变,大概是这样的一个过程:

单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和

成本。 此时,用于简化增删改查工作量的数据访问框架(ORM)是关键

垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相
干的几个应用,以提升效率。 此时,用于加速前端页面开发的Web框架(MVC)是关

键。

分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的
服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。 此

时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一
个调度中心基于访问压力实时管理集群容量,提高集群利用率。 此时,用于提高机

器利用率的资源调度和治理中心(SOA)是关键。


Dubbo的核心节点和角色:

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

Container: 服务运行容器。



Dubbo的节点调用关系说明:

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

据到监控中心。

Dubbo的总体架构设计图图:


层次含义:

  • config 配置层:对外配置接口,以 ServiceConfigReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类
  • proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以ServiceProxy 为中心,扩展接口为 ProxyFactory
  • registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为RegistryFactoryRegistryRegistryService
  • cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 ClusterDirectoryRouterLoadBalance
  • monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为MonitorFactoryMonitorMonitorService
  • protocol 远程调用层:封将 RPC 调用,以 InvocationResult 为中心,扩展接口为 Protocol,InvokerExporter
  • exchange 信息交换层:封装请求响应模式,同步转异步,以 RequestResponse 为中心,扩展接口为 ExchangerExchangeChannelExchangeClientExchangeServer
  • transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel,TransporterClientServerCodec
  • serialize 数据序列化层:可复用的一些工具,扩展接口为 SerializationObjectInput,ObjectOutputThreadPool

Dubbo的调用链图:


Dubbo的模块代码功能说明:

  • dubbo-common公共逻辑模块,提供了各种Util类,通用模块。
  • dubbo-remoting远程通讯模块,主要实现DubboProtocol底层通讯细节(用RMI协议,此包没用),包含的接口有:Transaction(传输层),Exchange数据交换层等;
  • dubbo-rpc远程调用模块,实现Protocol,Invoker, Exporter等上层协议接口定义,实现DubboProtocol协议的上层实现,以及DubboCodec类(dubbo编码)实现;封装了Hession协议、RMI协议、Http协议、WebService协议、Rest协议、Thrift等协议的实现;抽象了动态代理,只包含一对一的调用,不关心集群的管理。
  • dubbo-cluster集群模块,将多个提供方伪装成一个服务方,定义了Cluster集群接口、容错接口、Loadbalance负载均衡接口、Route接口,Directry目录接口,并提供了以上接口的各种实现。集群的地址列表可以是静态配置的,也可以是由注册中心下发。
  • dubbo-register注册中心模块,基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。
  • dubbo-config配置模块,实现服务提供者和消费者的配置定义加载。
  • dubbo-container容器模块,实现了启动时的服务提供者和消费者启动、加载、初始化。一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。
  • dubbo-monitor 监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务。
ok,上面的很多知识点都是基于dubbo官方信息

猜你喜欢

转载自blog.csdn.net/qq_18603599/article/details/80828496
今日推荐