https://github.com/alibaba/nacos
主要提供两种服务:
配置中心:支持配置注册、变更下发、层级管理等,不停机就可以动态刷新服务内部的配置项。
命名服务:提供服务的注册和发现功能,通常用于在
RPC
框架的Client
和Server
中间充当媒介。
- 还附带有健康监测、负载均衡等功能。
长短轮询
短轮询:
短轮询是拉模式。
- 是指不管服务端数据有无更新,客户端每隔定长时间请求拉取一次数据,可能有更新数据返回,也可能什么都没有。
会存在以下问题:
由于配置数据并不会频繁变更,若是一直发请求,势必会对服务端造成很大压力。
造成推送数据的延迟,比如:每
10s
请求一次配置,如果在第11s时配置更新了,那么推送将会延迟9s,等待下一次请求。
长轮询:
为了解决短轮询存在的问题,客户端发起长轮询,如果服务端的数据没有发生变更。
会
Hold
住请求,直到服务端的数据发生变化。或者等待一定时间超时才会返回,返回后,客户端再发起下一次长轮询请求监听。
这样设计的好处:
相对于低延时,客户端发起长轮询,服务端感知到数据发生变更后,能立刻返回响应给客户端。
服务端的压力减小,客户端发起长轮询,如果数据没有发生变更,服务端会
Hold
住此次客户端的请求。
Hold
住请求的时间一般会设置到30s
或者60s
,并且服务端Hold
住请求不会消耗太多服务端的资源。
长轮询基本原理
首先客户端发送一个
HTTP
请求到服务端。服务端会开启一个异步线程:
- 如果一直没有数据变更会挂起当前请求,长轮询也不应该阻塞
Tomcat
的业务线程。所以需要配置中心在实现长轮询时采用异步响应的方式来实现。
- 实现异步
HTTP
的常见手段是Servlet3.0
提供的AsyncContext
机制。在服务端设置的超时时间内仍然没有数据变更,那就返回客户端一个没有变更的标识,客户端继续发起请求。
在服务端设置的超时时间内有数据变更了,就返回客户端变更的内容。