RPC框架

引言

技术框架选型是优秀架构师必备的技能之一,所选择的技术一方面满足当前业务场景,另一方面能够很好的预判支撑未来产品架构发展,错误的架构选择可能会让一群程序猿面临大型车祸现场。即使在小公司,系统架构搭建少则半年,多则两年三年,这几年从业下来更加感觉到做好一套大型系统为之不易。而系统架构的升级改造和变动往往是一场持久战,持续的人力投入不说,保障已有的系统和业务平稳过渡是有很大挑战的。最近几年微服务架构逐渐完善成熟,WEB服务的实现方式也发生了巨大的变革。目前主流的WEB服务实现为RPC,在这里对RPC做一些调研和分析。

RPC

了解RPC之前先介绍一下IPC,即Inter-Process Communication进程间通信,指进程或者是线程之间传送数据和信号的一些技术和方法。本质是为了解决资源隔离的不同进程间互访资源问题。这些进程可以是在同一台计算机上,也可能是在网络联通的不同计算机上。根据进程所处位置不同,进程间通信的方法包括两类:

  • 本地过程调用(LPC,Local Procedure Call):LPC用在多任务操作系统中,使得同时运行的任务能互相会话。这些任务共享内存空间使任务同步和互相发送信息。
  • 远程过程调用(RPC,Remote Procedure Call):RPC是一种进程间通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的,本质上编写的调用代码基本相同。RPC开始是出现在Sun微系统公司和HP公司的运行UNIX操作系统的计算机中。


    RPC框架_第1张图片
    RPC远程过程调用

RPC中间最重要的几个概念点,分别是传输协议,编码协议(序列化协议)以及IO模型。这三个也是影响RPC框架选型的重要因素。

附加说明:网上有很多文章把RPC和REST放在一起来对比和说明,但其实这两者并没有太多的可比性。REST 不是 RPC,但也有类似的请求-响应模式。REST是一种设计风格,符合这种风格的应用叫做RESTFUL应用,应用之间的接口叫做REST接口。而制定透明度请求、封送数据、解析响应这些不属于 REST范畴。
REST只能基于HTTP协议,而RPC的传输协议实现可以是HTTP协议,或者是其他自定义协议。

另外RPC的这种存在方式让我不经意间想起此前流行的SOAP框架,两者存在一些共通点,但也有所侧重不同。具体见参考文档:SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系

RPC框架

RPC框架组成

一个典型RPC框架如下,包括几个组件:
服务提供者:远程服务的被调用方,提供服务实现。
服务消费者:远程服务的调用方。
注册中心:提供服务的注册和发现。
调用监控:监控远程服务调用情况。


RPC框架_第2张图片
典型RPC框架

RPC框架对比

目前业界主流的RPC框架包括阿里巴巴的Dubbo、谷歌开源的gRPC、Apache(前身Facebook)的Thrift、新浪微博的Montan等。下面列举了主流的RPC框架,并挑选部分做表格对比
国内

  • Dubbo。来自阿里巴巴 http://dubbo.I/O/
  • Motan。新浪微博自用 https://github.com/weibocom/motan
  • Dubbox。当当基于dubbo的https://github.com/dangdangdotcom/dubbox
  • rpcx。基于 Golang 的 https://github.com/smallnest/rpcx
  • Navi & Navi-pbrpc。作者开源的 https://github.com/neoremind/navi https://github.com/neoremind/navi-pbrpc

国外

  • Thrift from facebook https://thrift.apache.org
  • Avro from hadoop https://avro.apache.org
  • Finagle by twitter https://twitter.github.I/O/finagle
  • gRPC by Google http://www.grpc.I/O (Google inside use Stuppy)
  • Hessian from cuacho http://hessian.caucho.com
  • Coral Service inside amazon (not open sourced)
Hessian Montan rpcx gRPC Thrift Dubbo Dubbox Spring Cloud
开发语言 跨语言 Java Go 跨语言 跨语言 Java Java Java
分布式(服务治理) × × ×
多序列化框架支持 hessian √(支持Hessian2、Json,可扩展) × 只支持protobuf) ×(thrift格式)
多种注册中心 × × ×
管理中心 × × ×
跨编程语言 ×(支持php client和C server) × × × ×
支持REST × × × × × ×
关注度
上手难度
运维成本
开源机构 Caucho Sina Weibo Apache Google Apache Alibaba Dangdang Apache

1、上面的RPC框架可以分为两类,一类是服务治理类框架,这类框架能够提供包括服务注册、管理中心在内的整套的微服务技术架构支持。典型代表包括Spring Cloud、Dubbo、Dubbox、Montan。
2、另外一类RPC框架无法提供微服务治理功能,更多的关注于跨语言服务调用,典型代表有Hessian、gRPC、Thrift。
之前公司项目所使用的框架是Apache开源Spring Cloud,该框架支持微服务治理,基于HTTP传输协议和JSON序列化协议(也可以支持其他),本质上也是RPC框架的一种。后面再对Spring Cloud做展开介绍和分析。

关于Dubbo和Spring Cloud(转):使用 Dubbo 构建的微服务架构就像组装电脑,各环节我们的选择自由度很高,但是最终结果很有可能因为一条内存质量不行就点不亮了,总是让人不怎么放心,但是如果你是一名高手,那这些都不是问题;而 Spring Cloud 就像品牌机,在 Spring Source 的整合下,做了大量的兼容性测试,保证了机器拥有更高的稳定性,但是如果要在使用非原装组件外的东西,就需要对其基础有足够的了解。

选型考虑(未完待续)

传输协议

  • TCP
  • HTTP

IO模型

  • 传统的阻塞 I/O(Blocking I/O)
  • 非阻塞 I/O(Non-blocking I/O)
  • I/O 多路复用(I/O multiplexing)
  • 异步 I/O(Asynchronous I/O)

序列化

  • Encoding format。是 human readable 还是 binary。
  • Schema declaration。也叫作契约声明,基于 IDL,比如 Protocol Buffers/Thrift,还是自描述的,比如 JSON、XML。另外还需要看是否是强类型的。
  • 语言平台的中立性。比如 Java 的 Native Serialization 就只能自己玩,而 Protocol Buffers 可以跨各种语言和平台。
  • 新老契约的兼容性。比如 IDL 加了一个字段,老数据是否还可以反序列化成功。
  • 和压缩算法的契合度。跑benchmark和实际应用都会结合各种压缩算法,例如 gzip、snappy。
  • 性能。这是最重要的,序列化、反序列化的时间,序列化后数据的字节大小是考察重点。

参考文档

Spring Cloud 使用 HTTP2 https://www.jianshu.com/p/ed3f8f983764
RPC框架的技术架构和未来 http://www.hyhblog.cn/2018/01/29/rpc_arch_future/
Spring Cloud微服务框架主要子项目和RPC框架的对比 http://springcloud.cn/view/8
SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系 https://www.cnblogs.com/aspirant/p/9172336.html
*理解REST和RPC https://www.cnblogs.com/houkai/p/9772111.html
*RPC简介及框架选择 https://www.jianshu.com/p/b0343bfd216e
*远程过程调用(RPC)详解 https://waylau.com/remote-procedure-calls
怎么看待谷歌的开源 RPC 框架 gRPC? https://www.zhihu.com/question/30027669
Java 微服务框架选型(Dubbo 和 Spring Cloud?) https://www.cnblogs.com/xishuai/p/dubbo-and-spring-cloud.html
What's the difference between XML-RPC and SOAP?
Ask https://stackoverflow.com/questions/80112/whats-the-difference-between-xml-rpc-and-soap
阿里技术专家详解 Dubbo 实践,演进及未来规划 https://www.infoq.cn/article/IwZCAp3jo_H5fJFbWOZu
聊聊Dubbo(一):为何选择 https://www.jianshu.com/p/0b6e2c920014
服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型 https://cloud.tencent.com/developer/article/1165589

你可能感兴趣的:(RPC框架)