原有的服务拉取方式:定时
的从 Registry
拉取全量
信息
上述表述有2个关键词:定时、全量
BASE
的场景,只能保证最终一致性,在上一次和下一次拉取的间隔,如果服务端的信息发生变化,客户端是无法即时更新的。所有
数据的拉取,随着客户端数量的增大,容易对服务器造成流量风暴
。后续的优化主要也是针对这2点进行处理的。
引入了几个机制:
客户端第一次请求的时候,本地没有版本号,所以此时版本号为空,服务端收到版本号后同自身保存的版本进行对比,如果结果是不同的,那么会将核心数据和版本号一起返回
假如这个过程中,服务端的数据未发牛变换。
客户端发起请求时带上从服务端获取的版本号,服务端接收到客户端的版本号,一对比发现者相同,此时服务端开始阻塞,直到超过最大的阻塞时间。
因为在这段时间以内服务端数据没有变更,所以此时服务端返回的数据仅仅是版本号,不包含核心数据。
客户端发起请求时带上从服务端获取的版本号,服务端接收到客户端的版本号,一对比发现者相同此时服务端开始阻塞,但是服务端在阻塞的过程中,发现了数据发生了变更,此时会马上将最新的版号和数据返回
简而言之:一旦在阻塞时间段服务端数据发生了变更,那么立马返回核心数据和版本号。