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)
- comsumer 以本地调用方式调用服务
comsumer stub
(客户端代理)接到调用请求,将请求信息进行封装(服务名、方法名、请求参数、等等)成消息体
(通过特定协议
进行编码,序列化协议
,Hessian、protobuf、kryo、fastjson、gson、fst等等)comsumer stub
找到producer
的服务地址(ip、port)(本地记录、广播、注册中心
)comsumer stub
将消息体
发送到服务端(特定网络通讯协议
,如 Netty、http等)server stub
(服务端代理)收到消息,进行解码(与上面的协议要一致)server stub
根据解码信息,调用本地服务(本地方法)- 本地服务将执行结果返回给
server stub
server stub
对结果进行封装(进行编码), 然后发送给消费方(通讯协议)comsumer stub
解码消息- comsumer 像调用本地方法一样
调用远程服务
,获取到了返回结果
其中 2~9 步骤为 RPC 框架的职责,业务方只需要完成 1 和 10
Dubbo
- http://dubbo.apache.org/zh-cn/index.html
- apache dubbo 相关仓库
- https://github.com/alibaba/spring-cloud-alibaba
快速启动
https://github.com/alibaba/spring-cloud-alibaba
架构
config 配置层
:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类proxy 服务代理层
:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactoryregistry 注册中心层
:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryServicecluster 路由层
:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalancemonitor 监控层
:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorServiceprotocol 远程调用层
:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporterexchange 信息交换层
:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServertransport 网络传输层
:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codecserialize 数据序列化层
:可复用的一些工具,扩展接口为 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)
转载:https://blog.csdn.net/u013837825/article/details/104614056