java 注册中心_java架构师指南:微服务的注册中心实现方式

注册中心API

服务注册接口:服务提供商通过调用注册接口来完成服务注册

服务反注册接口:服务提供者通过调用服务反注册接口来完成服务注销

心跳汇报接口:服务提供商通过调用心跳汇报接口来完成节点清单状态报告

服务订阅接口:服务使用者调用服务订阅接口以完成服务订阅并获取可用服务提供者节点的列表

服务变更查询接口:服务使用者通过调用服务变更查询接口获取最新的可用服务节点列表

服务查询接口:查询注册中心当前所在的服务信息

服务修改接口:在注册表中修改某项服务的信息

集群部署

注册中心一般都是采用集群部署来保证高可用性,并通过分布式一致性协议来确保集群中不同节点之间的数据保持一致。

Zookeeper的工作原理:

每个服务器都将数据副本存储在内存中,并且客户端的读取请求可以请求任何服务器

Zookeeper启动时,将从实例中选择一个leader(Paxos协议)

leader负责处理数据更新和其他操作(ZAB协议)

Zookeeper是更新操作模式,可确保高可用性和数据一致性

c0a3743d00b2292a7b45a64554731bb0.png

目录存储

作为注册表,ZooKeeper通常使用分层目录结构来存储服务信息:

每个目录在ZooKeeper中都称为znode,并且具有唯一的路径标识符

znode可以包含数据和子znode。

znode中的数据可以具有多个版本。例如,如果znode下有多个数据版本,则需要带入版本信息以查询此路径下的数据。

除了支持最基本的服务注册和服务订阅功能外,注册表还必须具有针对服务提供者节点的运行状况检测功能,以确保存储在注册表中的服务节点可用。

基于ZooKeeper客户端和服务器的长连接以及会话超时控制机制,可以实现服务健康状态检测。

在ZooKeeper中,客户端和服务器建立连接后,还将建立会话,并生成全局唯一的会话ID。服务器和客户端保持长连接。在SESSION_TIMEOUT期间,服务器将检测与客户端的链接是否正常。具体方法是通过客户端定期向服务器发送心跳消息(ping消息),然后服务器重置下一个SESSION_TIMEOUT时间。如果会话结束,ZooKeeper会认为会话已结束,ZooKeeper会认为服务节点不再可用,并将从注册表中删除其信息。

服务状态变更通知

一旦注册中心探测到有服务器提供者节点新加入或者被剔除,就必须立刻通知所有订阅该服务的服务消费者,刷新本地缓存的服务节点信息,确保服务调用不会请求不可用的服务提供者节点。

基于Zookeeper的Watcher机制,来实现服务状态变更通知给服务消费者的。服务消费者在调用Zookeeper的getData方式订阅服务时,还可以通过监听器Watcher的process方法获取服务的变更,然后调用getData方法来获取变更后的数据,刷新本地混存的服务节点信息。

白名单机制

注册中心可以提供一个白名单机制,只有添加到注册中心白名单内的RPCServer,才能够调用注册中心的注册接口,这样的话可以避免测试环境中的节点意外跑到线上环境中去。

总结

注册中心可以说是实现服务话的关键,因为服务话之后,服务提供者和服务消费者不在同一个进程中运行,实现了解耦,这就需要一个纽带去连接服务提供者和服务消费者,而注册中心就正好承担了这一角色。此外,服务提供者可以任意伸缩即增加节点或者减少节点,通过服务健康状态检测,注册中心可以保持最新的服务节点信息,并将变化通知给订阅服务的服务消费者。

注册中心一般采用分布式集群部署,来保证高可用性,并且为了实现异地多活,有的注册中心还采用多IDC部署,这就对数据一致性产生了很高的要求,这些都是注册中心在实现时必须要解决的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值