分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的。一个Web服务提供服务API(Application Programming Interface),通过网络在客户端和服务器之间进行通信。
服务接口调用大体上就分为两类:RPC(Remote Procedure Call)式和REST式 (Representational State Transfer) 。
REST
REST是一种基于体系结构的设计标准,用于在因特网上的计算机系统之间提供通信,这使得通信过程在分布式系统中是高效,可扩展和可靠的。REST由计算机科学家Roy Fielding提出的。因此,REST是API的设计模式。REST基于HTTP规范。通信在客户端和服务器之间完成。客户端和服务器以独立方式存在,在不了解彼此具体实现的情况下完成通信。因此,任何一方所做的改变都不会影响另一方的运作。
每当调用RESTful API时,服务器将使用客户端表示所请求资源的状态来传输客户端。资源是API可以从服务器提供数据的任何对象。
REST遵循无状态范例,这意味着服务器不存储客户端的状态。
使用REST的好处:
- 无状态
- 统一接口:HTTP GET,POST,PUT和DELETE
- 统一状态表示:定义一个虚拟机,其状态由互连资源通过URL表示。
- 无限制的可扩展性,除网络限制
RPC
RPC(Remote Procedure Call)是一种方法,它允许在分布式网络上的一台计算机上运行的程序通过共享网络向另一个设备进行过程调用。
IT扩展了传统程序调用的概念。过程调用也称为函数调用或子例程调用。它还使用客户端服务器模型。在面向对象的编程范例中,RPC过程调用表示为远程方法调用(RMI)。这是一个同步操作,它要求暂停请求程序,直到返回当前远程过程的输出。轻量级线程的实现允许多个RPC并行执行。
RPC的概念已经存在了半个多世纪。
XML-RPC
它是一种RPC协议,其中过程调用使用XML作为数据格式编码,HTTP作为传输机制。它可以用任何编程语言实现,也允许跨语言通信。XML-RPC消息只是一个HTTP-POST请求。他们有请求和回应。
JSON-RPC
JSON是一种轻量级数据交换格式。JSON RPC是一种轻量级无状态RPC协议,它使用JSON作为数据格式。JSON-RPC中的所有数据传输类型都是单一对象类型,使用JSON进行序列化。它与XML-RPC非常相似。JSON RPC功能允许通知(不需要响应的消息)和可以发送到服务器的多个调用。
JSON-WSP ( JavaScript Object Notation Web-Service Protocol)
它是一个使用JSON的Web服务协议。因为在JSON-RPC中缺少文档的服务描述规范而受到启发。两者之间的主要区别在于JSON-WSP可以描述自己的服务方法。此外,JSON-WSP支持规范中的附件。
gRPC
gRPC是一个开源的RPC框架,由Google开发支持。它使用HTTP/2进行数据传输,从而更容易遍历代理和防火墙。gRPC使用协议缓冲区作为接口定义语言(IDL)。与XML和JSON相比,协议缓冲区更快,更简单,更小,可提供更好的性能。与JSON和XML不同,协议缓冲区不仅仅是消息交换格式,还用于消息交换的描述。
gRPC由两部分组成,GRPC协议和数据序列化方法。它使用Protobuf进行数据序列化,但是,任何其他序列化方法都可以使用gRPC实现。Protobuf是一种二进制传输协议,它以紧凑的格式打包数据,以实现更快,更有效的数据传输。
因为,gPRC基于http2,所以它继承了http2的许多功能,例如压缩标头,取消权限,持久性单TCP连接,客户端和服务器之间的超时契约。
gRPC的一些功能和优点如下:
- 覆盖范围广且简单:适用于每个开发平台。
- 支持从KB到100 MB的消息。
- 免费开放。
- 目的地的互操作性和可达性。
- 通用:它可用于各种用例。
- 几乎支持所有流行的编程语言。
- 支持传统的请求/响应模型。
- 可转换为REST(使用Protobuf和via Proxy)
- 支持双向流。
- 几乎没有服务器:gRPC实现就像服务器一样。
- 分层架构。
- 阻塞和非阻塞:支持对交换的消息序列进行异步和同步处理。
- 能够构建全双工流。
- 高性能。
- 支持移动客户。
- 可插拔:提供可以插入各种功能的扩展点,如安全性,负载平衡等。
- 元数据:让客户端提供与服务器调用相关的信息,反之亦然。
结论
很长一段时间,REST API一直是Web编程的支柱。但现在,RPC似乎正在取代REST。当前在充满微服务的世界中,REST的统治可能会被RPC所取代,它具有诱人的功能,性能优势和易于开发。但是,由于REST仍然在公开暴露的API中表现出色,并且出于向后兼容的原因,它仍然会存在很长一段时间。