学习写RPC(1)--rpc组件

最近在做dubbo项目,dubbo通信的核心就是rpc,所以决定编写rpc框架。

RPC存在的最重要的意义,就在于,他能简化分布式系统内,不同服务间的数据交换,使得这种交换看起来像本地函数调用一样。所以,我们用他最直接的目的:简化跨机器跨进程的服务调用。

学习写RPC(1)--rpc组件

RPC中可以认为有四个角色,消费者(Consumer),提供者(Provider) 注册中心(Registry),监控中心(Monitor)。

 

Registry注册中心

1)可以有多个,都是无状态的,互相之间不交互。

2)所有服务注册在注册中心,等待client来连接。

3)职责(与其说职责,还不如说代码要实现的功能):

   ①接收服务提供者的服务注册信息,接收到信息之后,发送ACK信息给服务提供者,否则服务提供者重新发送注册信息

   ②接收消费者的订阅信息,并把它订阅的结果返回给消费者

   ③如果注册信息变更,会主动通知订阅变更信息的消费者,注册信息的变更包括服务提供者下线,服务被人工降级,或者服务提供者的地址变更

   ④持久化一些服务信息,例如某些服务管理员审核过了,则该服务重新注册后则不需要再审核,再例如,某个服务负载均衡的策略被管理员设置为轮询,那么下次它在注册的时候,则就是轮询,而不是默认的负载策略

 

Provider提供者

1)一是它是客户端,需要去连接Registry,发送注册信息,它也需要去连接monitor端,去发送一些调用的统计信息

2)二是它也是服务端,需要作为server端等待Consumer去连接,连接成功后调用服务

 

Consumer消费者

去连接registry去获取到订阅信息,二是它需要主动去连接provider端去调用服务

 

Monitor监控者

与整个系统是没有任何直接关系,实现方式也是多样的,仅仅起监控作用。可以与上面一样建立长连接,接收每个角色统计的信息,然后展示给用户,可以使用MQ,使用消息队列,zookeeper,每个角色把自己统计的信息放到队列中,Monitor去消费这些信息,这样做的好处就是解耦,如果monitor宕了,不影响服务