RPC框架
分布式系统常见通信方式,RPC就是一台机器上通过参数传递的方式调用另一台机器的一个函数或方法并返回结果。
Call ID映射
在本地调用中,我们可以通过函数指针指定函数体,调用具体函数,然后编译器就会帮我们调用相应的函数指针;但是在远程调用中,因为两个进程的地址空间不一样,所以无法通过调用函数指针调用函数。所以,在RPC中,所有函数必须有一个唯一的ID,在客户端和服务端分别维护一个 {函数 <–> Call ID} 的对应表。当客户端需要进行远程调用时,基于调用的函数查一下这个表,找出相应的Call ID,然后把它传给服务端,服务端也通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。
序列化和反序列化
有时候客户端和服务端使用的都不是同一种语言。
这时候就需要客户端把参数先转成一个字节流,传给服务端后,再把字节流转成自己能读取的格式。这个过程叫序列化和反序列化。同理,从服务端返回的值也需要序列化反序列化的过程。
多传输协议支持
Http、dubbo传输协议优缺点
注册中心支持
解决分布式架构中,一个服务势必会有多个实例,如何获取实例的问题。
可以使用Zookeeper作为注册中心,在调用时,从Zookeeper获取服务的实例列表,再从中选择一个进行调用。