远程调用知识点总结

152 阅读2分钟

WebService

XML,SOAP和WSDL就是构成WebService平台的三大技术 。

  • WebService采用Http协议来在客户端和服务端之间传输数据。WebService使用XML来封装数据,XML主要的优点在于它是跨平台的。
  • WebService服务器端首先要通过一个WSDL文件来说明自己有什么服务可以对外调用。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

REST

REST(Representational State Transfer):表现层状态转移,一种软件架构风格,不是标准。既然不是标准,我可以遵守,也可以不遵守。

RESTful:基于REST构建的API就是Restful风格。RESTful可以通过一套统一的接口为Web,iOS和Android提供服务。在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词。所用的名词往往与数据库的表名对应,一般来说,数据库中的表都是同种记录的”集合”(collection),所以API中的名词也应该使用复数。

@RequestMapping("/page/{moduleName}")
public String module(@PathVariable String moduleName) {
    ...
}

RPC

RPC:远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。客户端将参数和调用的ID序列化成字节流通过网络传输层传递给服务端,服务端把计算好的结果序列化成字节流再传给客户端。

  1. 首先客户端需要告诉服务器,需要调用的函数,这里函数和进程ID存在一个映射,客户端远程调用时,需要查一下函数,找到对应的ID,然后执行函数的代码。
  2. 客户端需要把本地参数传给远程函数,本地调用的过程中,直接压栈即可,但是在远程调用过程中不再同一个内存里,无法直接传递函数的参数,因此需要客户端把参数转换成字节流,传给服务端,然后服务端将字节流转换成自身能读取的格式,是一个序列化和反序列化的过程。
  3. 数据准备好了之后,如何进行传输?网络传输层需要把调用的ID和序列化后的参数传给服务端,然后把计算好的结果序列化传给客户端,因此TCP层即可完成上述过程,gRPC中采用的是HTTP2协议。 常见的RPC框架有:Dubbo,Feign

在RPC框架中可以选择使用HTTP作为其传输层协议,而在微服务体系中,无论使用Feign还是使用RestTemplate,传输层都是基于HTTP协议进行传输的。