本文为阅读周志明老师的凤凰架构,架构师视角的访问远程服务章节所写的总结。
摸索时代
1980年左右,RPC 的概念最早是由施乐公司所提出: 远程服务调用是指位于互不重合的内存地址空间中的两个程序,在语言层面上,以同步的 方式使用带宽有限的信道来传输程序控制信息。
早起分布式时代希望rpc可以做到远程 调用与本地的进程间通信在编码上完全一致。但 1987 年,在“透明的 RPC 调用”一度 成为主流范式的时候,Andrew Tanenbaum 教授发表了论文提出反对意见,中心观点: 本地调用与远程调用当做一样处理,这是犯了方向性的错误,把系统 间的调用做成透明,反而会增加程序员工作的复杂度。 后来1997年,一众大佬总结了通过网络进行分布式运算的八宗罪
- The network is reliable —— 网络是可靠的。
- Latency is zero —— 延迟是不存在的。
- Bandwidth is infinite —— 带宽是无限的。
- The network is secure —— 网络是安全的。
- Topology doesn't change —— 拓扑结构是一成不变的。
- There is one administrator —— 总会有一个管理员。
- Transport cost is zero —— 不必考虑传输成本。
- The network is homogeneous —— 网络是同质化的。
-
三个问题
- 如何表示数据:序列化与反序列化
- 如何传递数据:2个endpoint之间如何交换数据
- 如何确定方法 每门语言签名不同,解决方案:每个方法加一个唯一不重复的编号。UUID的产生
假统一时代
-
CORBA
-
在 1991 年,对象管理组 织 (Object Management Group,OMG)发布了跨进程的、面向异构语言的、支持面向 对象的服务调用协议:CORBA 1.0(Common Object Request Broker Architecture)
-
缺点:
- 过于啰嗦
- 规范晦涩难懂,各个语言厂家有自己的解读,做出来不兼容
-
-
-
Web Service -1999 年末,SOAP 1.0(Simple Object Access Protocol)规范的发布,它代表着一 种被称为“Web Service”的全新的 RPC 协议的诞生。Web Service 是由微软和 DevelopMent or 公司共同起草的远程服务协议
-
缺点:
- 性能差,每次数据交互都包含大量的冗余信息
- 贪婪,它希望一套协议上解决分布式所有问题,学习负担沉重
-
-
对于一个rpc协议,简单、普适、高性能这三点,似乎真的难以同时满足。
分裂时代
-
朝着面向对象发展,不满足于 RPC 将面向过程的编码方式带到分布式,希望在分布式 系统中也能够进行跨进程的面向对象编程,代表:rmi
-
朝着性能发展,代表为 gRPC 和 Thrift。
- 信息密度
- 序列化效率
-
朝着简化发展,JSON-RPC
插件化发展时代
不再追求独立地解决 RPC 的全部三个问题(表示数据、 传递数据、表示方法), 而是将一部分功能设计成扩展点,让用户自己去选择。 框架聚焦于提供核心的、更高层次的能力,譬如提供负载均衡、服务注册、可观察性等方面的支持。比如dubbo