教你搞懂注册中心
一、Nginx
首先,来看看Nginx的作用与缺陷。
Nginx服务发现
Nginx是一个反向代理组件,那么Nginx需要知道应用服务器的地址是什么,这样才能够将流量透传到应用服务器上,这就是服务发现的过程。
缺陷:
- 服务器的变动,就需要修改客户端配置后,重启所有的客户端进程,操作时间比较长;
- 服务器的故障,也需要修改客户端配置后,重启所有的客户端进程
- 服务摘除时,RPC调用到摘除的服务端,会造成慢请求甚至请求失败。
二、注册中心
比如ZooKeeper、阿里的Nacos、Spring Cloud的Eureka等。
注册中心的作用:
- 服务注册:存储服务地址
- 服务发现:当存储内容发生变化时,可以将变更的内容推送/拉取给客户端。
服务节点状态管理
服务状态管理主要有两种方案:
一、主动勘测。
比如Nacos。
服务端要打开一个端口,然后由注册中心每隔一段时间(比如30秒)探测这些端口是否可用,如果可用就认为服务仍然是正常的,否则就可以认为服务不可用,那么注册中心就可以把服务从列表里面删除了。
二、心跳模式
比如Eureka、ZooKeeper、Nacos
-
服务节点在启动注册到注册中心后,就按照一定的时间间隔(比如30秒),向注册中心发送心跳包。
-
注册中心在接收到心跳包之后,会更新这个节点的最近续约时间。
-
注册中心会启动一个定时器定期检测当前时间和节点最近续约时间的差值,如果达到一个阈值(比如说90秒),那么认为这个服务节点不可用。
服务节点过度摘除保护策略
Eureka注册中心增加了保护的策略:如果摘除的节点占到了服务集群节点数的40%(自定义),就停止摘除服务节点,并且给服务的开发同学和运维同学报警处理