主页

索引

模块索引

搜索页面

历史

  • 1980 年代初期,传奇的施乐 Palo Alto 研究中心,发布了基于 Cedar 语言的 RPC 框架 Lupine,并实现了世界上第一个基于 RPC 的商业应用 Courier。这里施乐 PARC 定义的 “远程服务调用” 的概念。所以,尽管此前已经有用其他名词指代 RPC 的操作,我们也一般认为 RPC 的概念,最早是由施乐公司所提出的:

    Remote procedure call is the synchronous language-level transfer of control
      between programs in address spaces whose primary communication is a narrow channel.
    —— Bruce Jay Nelson,Remote Procedure Call,Xerox PARC,1981
    
    定义:
    RPC 是一种语言级别的通讯协议,
    它允许运行于一台计算机上的程序以某种管道作为通讯媒介(即某种传输协议的网络),
    去调用另外一个地址空间(通常为网络上的另外一台计算机)。
    
  • 1987 年,当 “透明的 RPC 调用” 一度成为主流范式的时候,安德鲁・塔能鲍姆(Andrew Tanenbaum)教授曾发表了一篇论文 “A Critique of the Remote Procedure Call Paradigm” ,对这种透明的 RPC 范式提出了一系列质问:

    两个进程通讯,谁作为服务端,谁作为客户端?
    怎样进行异常处理?
    异常该如何让调用者获知?
    服务端出现多线程竞争之后怎么办?
    如何提高网络利用的效率,比如连接是否可被多个请求复用以减少开销?
    是否支持多播?
    参数、返回值如何表示?
    应该有怎样的字节序?
    如何保证网络的可靠性,比如调用期间某个链接忽然断开了怎么办?
    服务端发送请求后,收不到回复该怎么办?
    
    论文的中心观点是:
    把本地调用与远程调用当作一样的来处理,是犯了方向性的错误,把系统间的调用做成透明的,反而会增加程序员工作的复杂度。
    
  • 80 年代中后期,惠普和 Apollo 提出了网络运算架构(Network Computing Architecture,NCA)的设想,并随后在 DCE 项目中,发展成了在 Unix 系统下的远程服务调用框架 DCE/RPC

    这是历史上第一次对分布式有组织的探索尝试。
    因为 DCE 本身是基于 Unix 操作系统的,所以 DCE/RPC 也仅面向于 Unix 系统程序之间的通用
    
    注:
    微软 COM/DCOM 的前身 MS RPC,就是 DCE 的一种变体版本,而它就可以在 Windows 系统中使用。
    https://en.wikipedia.org/wiki/Microsoft_RPC
    
  • 在 1988 年,Sun Microsystems 起草并向互联网工程任务组(Internet Engineering Task Force,IETF)提交了 RFC 1050 规范,此规范中设计了一套面向广域网或混合网络环境的、基于 TCP/IP 网络的、支持 C 语言的 RPC 协议,后来也被称为是 ONC RPC(Open Network Computing RPC/Sun RPC)

    DCE/RPC和ONC RPC是如今各种 RPC 协议的鼻祖
    
  • 1991 年,对象管理组织(Object Management Group,OMG)便发布了跨进程、面向异构语言的、支持面向对象的服务调用协议:CORBA 1.0(Common Object Request Broker Architecture)

  • 1994 年至 1997 年间,由 ACM 和 Sun 的院士 Peter Deutsch、套接字接口发明者 Bill Joy、Java 之父 James Gosling 等众多在 Sun Microsystems 工作的大佬们,共同总结了`通过网络进行分布式运算的八宗罪(8 Fallacies of Distributed Computing) <https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing>`_

  • 1998 年,XML 1.0 发布,并成为了万维网联盟(World Wide Web Consortium,W3C)的推荐标准

  • 1999 年末,以 XML 为基础的 SOAP 1.0(Simple Object Access Protocol)规范的发布,代表着一种被称为 “Web Service” 的全新 RPC 协议的诞生。Web Service 是由微软和 DevelopMentor 公司共同起草的远程服务协议,随后被提交给 W3C,并通过投票成为了国际标准。所以,Web Service 也被称为是 W3C Web Service。Web Service求全,定义几乎数不清个数的家族协议,对开发者来说学习负担极其沉重。结果就是,得罪惨了开发者,谁爱用谁用去。

  • 最近几年,RPC 框架有明显朝着更高层次(不仅仅负责调用远程服务,还管理远程服务)与插件化方向发展的趋势:

    不再选择自己去解决表示数据、传递数据和表示方法这三个问题,
    而是将全部或者一部分问题设计为扩展点,实现核心能力的可配置,
    再辅以外围功能,如负载均衡、服务注册、可观察性等方面的支持。
    这一类框架的代表,有 Facebook 的 Thrift 和阿里的 Dubbo
    

主页

索引

模块索引

搜索页面