rpc的发展史

297 阅读3分钟

本文为阅读周志明老师的凤凰架构,架构师视角的访问远程服务章节所写的总结。

摸索时代

1980年左右,RPC 的概念最早是由施乐公司所提出: 远程服务调用是指位于互不重合的内存地址空间中的两个程序,在语言层面上,以同步的 方式使用带宽有限的信道来传输程序控制信息。

早起分布式时代希望rpc可以做到远程 调用与本地的进程间通信在编码上完全一致。但 1987 年,在“透明的 RPC 调用”一度 成为主流范式的时候,Andrew Tanenbaum 教授发表了论文提出反对意见,中心观点: 本地调用与远程调用当做一样处理,这是犯了方向性的错误,把系统 间的调用做成透明,反而会增加程序员工作的复杂度。 后来1997年,一众大佬总结了通过网络进行分布式运算的八宗罪

  1. The network is reliable —— 网络是可靠的。
  2. Latency is zero —— 延迟是不存在的。
  3. Bandwidth is infinite —— 带宽是无限的。
  4. The network is secure —— 网络是安全的。
  5. Topology doesn't change —— 拓扑结构是一成不变的。
  6. There is one administrator —— 总会有一个管理员。
  7. Transport cost is zero —— 不必考虑传输成本。
  8. 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