PRC
远程过程调用,像调用本地的函数一样去调远程函数。两个服务部署在两台服务器上, 两个服务之间想要互相访问,但是由于不在一个内存空间,无法直接调用,需要通过网络来表达调用的语意和传递调用的数据。
几个要点:
- 网络传输:客户机和服务器之间建立TCP/HTTP连接
- 寻址: 基于web服务的RPC,需要提供一个endpoint URI,或者是从服务中心服务上查找。从服务提供者的角度看:当服务提供者启动的时候,需要将自己提供的服务注册到指定的注册中心,以便服务消费者能够通过服务注册中心进行查找;当服务提供者由于各种原因致使提供的服务停止时,需要向注册中心注销停止的服务;服务的提供者需要定期向服务注册中心发送心跳检测,服务注册中心如果一段时间未收到来自服务提供者的心跳后,认为该服务提供者已经停止服务,则将该服务从注册中心上去掉。从调用者的角度看:服务的调用者启动的时候根据自己订阅的服务向服务注册中心查找服务提供者的地址等信息;当服务调用者消费的服务上线或者下线的时候,注册中心会告知该服务的调用者;服务调用者下线的时候,则取消订阅。
- 序列化和反序列化:在本地调用中,我们只需要把参数压到栈里,然后让函数自己去栈里读就行。但是在远程过程调用时,客户端跟服务端是不同的进程,不能通过内存来传递参数。这时候就需要客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。同理,从服务端返回的值也需要序列化反序列化的过程。
- 映射