一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的 。
跟语言平台绑定的开源 RPC 框架主要有下面几种 。
- Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 JAVA 语言 。
- Motan:微博内部使用的 RPC 框架,于 2016 年对外开源,仅支持 Java 语言 。
- Tars:腾讯内部使用的 RPC 框架,于 2017 年对外开源,仅支持 C++ 语言 。
- Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言
- gRPC:google 于 2015 年对外开源的跨语言 RPC 框架,支持多种语言 。
- Thrift:最初是由 Facebook 开发的内部系统跨语言的 RPC 框架,2007 年贡献给了 Apache 基金,成为 Apache 开源项目之一,支持多种语言 。
如果涉及多个语言平台之间的相互调用,就应该选择跨语言平台的 RPC 框架 。
RPC 框架,它们具体有何区别?
1. Dubbo先来聊聊 Dubbo,Dubbo 可以说是国内开源最早的 RPC 框架了,目前只支持 Java 语言,它的架构可以用下面这张图展示 。
文章插图
从图中你能看到,Dubbo 的架构主要包含四个角色,其中 Consumer 是服务消费者,Provider 是服务提供者,Registry 是注册中心,Monitor 是监控系统 。
具体的交互流程是 Consumer 一端通过注册中心获取到 Provider 节点后,通过 Dubbo 的客户端 SDK 与 Provider 建立连接,并发起调用 。Provider 一端通过 Dubbo 的服务端 SDK 接收到 Consumer 的请求,处理后再把结果返回给 Consumer 。
2. MotanMotan 是国内另外一个比较有名的开源的 RPC 框架,同样也只支持 Java 语言实现,它的架构可以用下面这张图描述 。
文章插图
Motan 与 Dubbo 的架构类似,都需要在 Client 端(服务消费者)和 Server 端(服务提供者)引入 SDK,其中 Motan 框架主要包含下面几个功能模块 。
register:用来和注册中心交互,包括注册服务、订阅服务、服务变更通知、服务心跳发送等功能 。
protocol:用来进行 RPC 服务的描述和 RPC 服务的配置管理,这一层还可以添加不同功能的 filter 用来完成统计、并发限制等功能 。
serialize:将 RPC 请求中的参数、结果等对象进行序列化与反序列化
transport:用来进行远程通信,默认使用 Netty NIO 的 TCP 长链接方式 。
cluster:请求时会根据不同的高可用与负载均衡策略选择一个可用的 Server 发起远程调用 。
3. TarsTars 是腾讯根据内部多年使用微服务架构的实践,总结而成的开源项目,仅支持 C++ 语言,它的架构图如下 。
文章插图
Tars 的架构交互主要包括以下几个流程:
服务发布流程:在 web 系统上传 server 的发布包到 patch,上传成功后,在 web 上提交发布 server 请求,由 registry 服务传达到 node,然后 node 拉取 server 的发布包到本地,拉起 server 服务 。
管理命令流程:web 系统上的可以提交管理 server 服务命令请求,由 registry 服务传达到 node 服务,然后由 node 向 server 发送管理命令 。
心跳上报流程:server 服务运行后,会定期上报心跳到 node,node 然后把服务心跳信息上报到 registry 服务,由 registry 进行统一管理 。
信息上报流程:server 服务运行后,会定期上报统计信息到 stat,打印远程日志到 log,定期上报属性信息到 prop、上报异常信息到 notify、从 config 拉取服务配置信息 。
client 访问 server 流程:client 可以通过 server 的对象名 Obj 间接访问 server,client 会从 registry 上拉取 server 的路由信息(如 IP、Port 信息),然后根据具体的业务特性(同步或者异步,TCP 或者 UDP 方式)访问 server(当然 client 也可以通过 IP/Port 直接访问 server) 。
4. Spring CloudSpring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案 。
只支持 Java 语言平台,它的架构图可以用下面这张图来描述 。
文章插图
【开源 RPC 框架有哪些?】由此可见,Spring Cloud 微服务架构是由多个组件一起组成的,各个组件的交互流程如下 。
推荐阅读
- 开源 CMS Ghost 3.0 发布,带来新功能
- 提高代码可读性的 10 个技巧
- PHP自动测试框架Top 10
- 国产操作系统银河麒麟使用了开源内核,未来会有被卡脖子的风险吗
- 信阳,精心打造茶产业发展新框架
- Linux下/etc/skel框架目录的简介与使用
- 快速删除word文本框的两种方法 如何删除文本框
- 100 美元一行代码,开源软件到底咋赚钱?
- 开源项目到底归谁管?
- 常见的Java分布式缓存框架总结