RPC与 Dubbo 资料梳理

RPC

概览

RPC - Remote Procedure Call 远程服务调用

  • 在分布式计算,远程过程调用是一个计算机通信协议
  • 分布式服务
  • 服务治理的另一条路
  • 跨进程数据交互
    • 其他跨进程数据交互方式
    • http/https
    • WebService
    • MQ
    • RESTful
  • RPC是一种服务器-客户端(Client/Server)模式
  • 面向对象编程中,亦可称作远端呼叫或远端方法呼叫
  • 常见的实现框架
    • Apache Dubbo(Alibaba 开源)
    • Java RMI
    • google gRpc
    • Apache Thrift(Facebook 开源)
    • Twitter Finagle

一次 RPC 调用过程(同步)

在这里插入图片描述

角色

  • 服务提供方(producer/server)
  • 服务消费方 (comsumer/client)
  1. comsumer 以本地调用方式调用服务
  2. comsumer stub (客户端代理)接到调用请求,将请求信息进行封装(服务名、方法名、请求参数、等等)成消息体(通过特定协议进行编码,序列化协议,Hessian、protobuf、kryo、fastjson、gson、fst等等)
  3. comsumer stub 找到 producer的服务地址(ip、port)(本地记录、广播、注册中心
  4. comsumer stub消息体发送到服务端(特定网络通讯协议,如 Netty、http等)
  5. server stub (服务端代理)收到消息,进行解码(与上面的协议要一致)
  6. server stub 根据解码信息,调用本地服务(本地方法)
  7. 本地服务将执行结果返回给 server stub
  8. server stub 对结果进行封装(进行编码), 然后发送给消费方(通讯协议)
  9. comsumer stub 解码消息
  10. comsumer 像调用本地方法一样调用远程服务,获取到了返回结果

其中 2~9 步骤为 RPC 框架的职责,业务方只需要完成 1 和 10

Dubbo

快速启动

https://github.com/alibaba/spring-cloud-alibaba

架构

在这里插入图片描述

  1. config 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类
  2. proxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory
  3. registry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService
  4. cluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance
  5. monitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService
  6. protocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter
  7. exchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer
  8. transport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec
  9. serialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool

– http://dubbo.apache.org/zh-cn/docs/dev/design.html

模块

  • 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 容器模块:是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。

  • dubbo-filter 过滤器

  • dubbo-serialization 序列化

  • dubbo-metadata 元数据

  • dubbo-plugin 插件

  • dubbo-distribution 分布式

  • dubbo-configcenter 配置中心

  • dubbo-compatible 兼容(2.5.x 升级到 2.6.x 、2.7.x)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章