注册中心在RPC整个体系中担任的角色是比较重要的,但也是比较微妙的,它维护了所有服务提供者的所暴露服务的信息,最最核心的信息就是IP+端口号,服务消费者会在调用服务的时候去注册中心上去询问它远程调用服务的端口和IP地址,注册中心返回它所需要的信息,服务消费者拿着服务的IP+端口号,如果获取到多个IP的时候,再根据负载策略去远程调用服务,其实最最简单的注册中心的职责就是如此,注册中心的最核心的职责也是如此
但是,其实在RPC的体系中,注册中心其实是可以缺失的,因为假如服务消费者知道服务提供者的地址,就可以直接调用,不需要向注册中心去查询服务提供的地址,这是远程调用最最原生的调用方法,这种直接调用的策略有好有坏,好处就是直接,整个流程简单易懂,且容易维护,坏处也是很明显,就是不灵活,假如服务的地址改变了,我们需要手动修改服务提供的地址,不能动态的实时的去获取服务的实时地址,当然也就达不到服务治理的效果了
注册中心的职责是很明确的,简而言之:
1)服务提供者向其发送它提供的服务的一些基本信息
2)服务消费者来订阅服务
3)服务提供者实例下线的时候,实时通知服务消费者某个服务下线
当然还有一些服务治理的功能,比如:
1)服务审核,这是服务治理最最简单的操作了,因为某个服务提供者上线之后,都是需要审核的,如果不审核,可能会造成很多不必要的麻烦,有可能有些开发小新,不小心把开发环境的服务向线上服务注册,如果不审核,直接通过的话,就会造成线上接口调用线下服务的尴尬局面
2)负载策略的记录,比如默认是随机加权策略,如果管理者希望改成加权轮询的策略,需要通知服务消费者,访问策略的改变
3)手动改变某个服务的访问权重,比如某个服务默认负重是50,(最大100)的时候,但是此时这个服务实例所在的机器压力不大的时候,而其他该服务实例压力很大的时候,可以适当的增加该服务的访问权重,但是又不想让该服务下线,修改它的权重,所以我们可以在注册中心修改它的负重,然后通知服务消费者,这样就可以动态的修改负重了
4)一些持久化的操作,因为注册中心是无状态的,假如某个注册中心实例重启之后,以前的一些审核信息,修改的访问策略信息就会消失,这样就会需要用户重新一一审核,这是很麻烦的,所以需要将这些信息落地,持久化到硬盘,然后每次重启注册中心实例的时候,去读取这些信息
注册中心的基本功能就是如上陈述的,接下来的几个章节,我们一一实现上述的功能~