Nacos

月伴飞鱼 2024-09-21 21:16:25
框架相关
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!

https://github.com/alibaba/nacos

主要提供两种服务:

  • 配置中心:支持配置注册、变更下发、层级管理等,不停机就可以动态刷新服务内部的配置项。

  • 命名服务:提供服务的注册和发现功能,通常用于在 RPC 框架的 ClientServer 中间充当媒介。

    • 还附带有健康监测、负载均衡等功能。

长短轮询

短轮询:

短轮询是拉模式。

  • 是指不管服务端数据有无更新,客户端每隔定长时间请求拉取一次数据,可能有更新数据返回,也可能什么都没有。

会存在以下问题:

  • 由于配置数据并不会频繁变更,若是一直发请求,势必会对服务端造成很大压力。

  • 造成推送数据的延迟,比如:每 10s 请求一次配置,如果在第11s时配置更新了,那么推送将会延迟9s,等待下一次请求。

长轮询:

为了解决短轮询存在的问题,客户端发起长轮询,如果服务端的数据没有发生变更。

  • Hold 住请求,直到服务端的数据发生变化。

  • 或者等待一定时间超时才会返回,返回后,客户端再发起下一次长轮询请求监听。

这样设计的好处:

  • 相对于低延时,客户端发起长轮询,服务端感知到数据发生变更后,能立刻返回响应给客户端。

  • 服务端的压力减小,客户端发起长轮询,如果数据没有发生变更,服务端会 Hold 住此次客户端的请求。

    • Hold 住请求的时间一般会设置到 30s 或者 60s ,并且服务端 Hold 住请求不会消耗太多服务端的资源。

长轮询基本原理

首先客户端发送一个 HTTP 请求到服务端。

服务端会开启一个异步线程:

  • 如果一直没有数据变更会挂起当前请求,长轮询也不应该阻塞 Tomcat 的业务线程。

所以需要配置中心在实现长轮询时采用异步响应的方式来实现。

  • 实现异步 HTTP 的常见手段是 Servlet3.0 提供的 AsyncContext 机制。

在服务端设置的超时时间内仍然没有数据变更,那就返回客户端一个没有变更的标识,客户端继续发起请求。

在服务端设置的超时时间内有数据变更了,就返回客户端变更的内容。

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!