RPC、SOAP、HTTP REST

分布式系统离不开多进程之间的通信问题,包括本机进程之间的IPC通信和基于网络的进程间远程通信。各种通用的远程通信技术不断发展变化,比如从最古老的RPC(Remote Process Call)远程通信技术到曾经风靡一时的SOAP(Web Service)协议,再到后面红极一时的HTTP REST。

从IPC说起

古老而又有生命力的RPC

不同于复杂的Socket通信方式,RPC的初心是设计一套远程通信的通用框架,这个框架能够自动处理通信协议、对象序列化、网络传输等复杂细节,并且希望开发者使用这个框架以后,调用一个远程机器上的接口代码与以本地方法调用的代码“看起来没有什么区别”,从而降低分布式系统开发难度。

为了将一个传统的程序改写成RPC程序,要在程序里加入另外一些代码,这个过程叫作stub过程。RPC的具体执行流程如下:

《RPC、SOAP、HTTP REST》 RPC调用流程

  • ① 服务消费方(client)以本地调用方式调用服务;
  • ② client stub接收到调用后,将方法、参数组装成能够进行网络传输的消息体,client stub连接到远程服务,并将消息发送至服务端;
  • ③ server stub接收到消息之后进行解码;
  • ④ server stub根据解码的结果调用本地服务;
  • ⑤ 本地服务执行并将结果返回给server stub;
  • ⑥ server stub将结果打包成消息并发送至调用方;
  • ⑦ client stub接收到消息并解码;
  • ⑧ client stub发送调用结果给client;

编写一个完成的RPC框架,涉及的技术:

  • 高性能网络编程技术;
  • 对象序列化与反序列化;
  • 自动代码生成或者动态代理编程技术;

历史上第一次创造一个多语言的RPC就是COBRA,但是功败垂成。之后XML的兴起,加速了COBRA的没落。

SOAP于1999年底发布,由微软和DevelopMentor发布,随后提交给W3C作为标准。SOAP使用XML作为RPC新的对象序列化机制,IBM则又继续发扬光大这条路,推出了Web Service等整套方案。

SOAP严格意义上是属于XML-RPC技术的一个变种,一个XML-RPC请求消息就是一个HTTP-POST请求消息,其请求消息主体基于XML格式。同理,其响应消息也是基于XML的,SOAP是第一次真正成功地实现了支持多语言多平台的开放性RPC标准。下面分别为SOAP的请求报文和响应报文,

《RPC、SOAP、HTTP REST》 SOAP的请求报文
《RPC、SOAP、HTTP REST》 SOAP响应报文

从上图可以看到SOAP的报文复杂而且臃肿,由于它是面向机器识别的表达格式,程序员很难直接理解它的报文,这个缺陷最终导致SOAP的末路与HTTP REST通信方式的兴起。

HTTP REST采用更容易理解的JSON格式来传递请求与应答参数。同时,HTTP REST已经脱离了RPC的范涛,因为它无需客户端stub和服务单stub,调用也不再类似本地方法调用的方式了。

HTTP REST慢慢侵占了RPC大部分应用领域,并且导致了一度盛行的XML-RPC的灭绝。但同时促进了正统RPC技术走向了一个新的发展阶段,追求更高性能及增加对多语言多平台支持,成为越来越多的开源RPC框架的目标,如Thrift、Apache Avro等新生的开源框架,这些框架在大数据系统、大型分布式系统及移动互联网方面被越来越多的公司使用。

话说CORBA墙倒众人推时,最初参与CORBA的一帮技术专家们则从CORBA身上,“去其糟粕,取其精华”,另起炉灶打造了延续至今的RPC之王– ZeroC Ice。作为RPC领域的绝对王者,ICE发展至今已经成为一个很强大的微服务架构平台。

从RPC到服务治理框架

与一般的HTTP REST框架不同,一个可用的RPC框架不仅解决了远程调用问题,也提了用于服务注册和服务发现的基础设施。如 RMI(Java的RPC)里的RMI Registry。

《RPC、SOAP、HTTP REST》 RMI

从RPC和CORBA发展而来的服务注册和服务发现模型在后来的Web Service时代被提到了一个很高的境界,Web Service的一般架构如下:

《RPC、SOAP、HTTP REST》 Web Service架构

在Web Service的发展之下,逐渐出现了SOA这个新概念,虽然业界对SOA这个概念有各种“诠释”,但“面向服务的架构”即以服务为中心的分布式架构深入人心。服务注册和服务发现模型及RPC技术依然是SOA的核心技术。

    原文作者:georgeguo
    原文地址: https://www.jianshu.com/p/f049e099d207
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞