go-sentinel流量控制(一):Nacos部署与源码分析
内容提要
本文介绍了Nacos在go-sentinel流量控制中的部署和源码分析,Nacos是一个用于管理数据库连接信息、限流规则和流量调度的工具。Nacos通过长轮询和UDP推送+HTTP定期对账来实现推送功能,同时支持gRPC长连接模型。在数据处理方面,Nacos采用了Raft一致性协议和Distro协议以确保数据的一致性和同步。
延伸解读
Nacos 1.x 与 2.x 的推送机制差异
Nacos 1.x 中,配置中心通过长轮询实现推送,服务注册中心则依赖 UDP 推送加 HTTP 定期对账。这种设计需要客户端周期性建连,增加了服务端内存开销。2.x 引入 gRPC 长连接,服务变更和配置变更通过双向流主动推送,客户端仅需发送轻量心跳,显著降低了服务端处理开支和网络阻塞风险。
集群部署的数据存储与同步策略
Nacos 集群中,所有节点共享 MySQL 数据,副本机制由 MySQL 主从保障。每个节点本地磁盘保存全量数据,客户端请求时优先读本地文件以提升性能。配置变更时,先写数据库再写本地文件,然后通过 HTTP 通知其他节点从 MySQL dump 数据。此外,节点每 6 小时会全量 dump 一次数据到本地。
长轮询机制中的超时与推送逻辑
客户端发起长轮询请求,服务端比较数据 MD5,若一致则延迟 29.5 秒再检查。期间若有数据变更,通过事件订阅触发 DataChangeTask,遍历等待队列并立即响应。为避免推送后调度任务再次写入响应,推送前会取消原调度任务。客户端超时设置为 30 秒,略大于服务端延迟,确保及时接收变更。
Raft 与 Distro 协议的分工
Nacos 根据场景选择一致性协议:服务发现中的非持久化服务采用 Distro 协议(AP),通过心跳补偿数据,保证可用性;持久化服务和配置管理则采用 Raft 协议(CP),确保强一致性。Raft 基于 JRaft 实现,支持多 RaftGroup;Distro 是阿里自研的最终一致性协议,引入权威 Server 概念,减少消息冗余。
Q&A
Nacos的主要功能是什么?
Nacos主要用于管理数据库连接信息、限流规则和流量调度。
Nacos如何实现数据的一致性和同步?
Nacos采用Raft一致性协议和Distro协议来确保数据的一致性和同步。
Nacos 2.x版本相比1.x版本有哪些改进?
Nacos 2.x版本新增了对gRPC长连接模型的支持,减少了服务端处理数据的开支。
如何在生产环境中部署Nacos以实现高可用?
生产环境中需要多节点反向代理、多节点Nacos和高可用MySQL来实现高可用部署。
Nacos客户端是如何同步数据变化的?
Nacos客户端通过长轮询机制实现数据变化的同步,确保数据与服务器端一致。
Nacos的推送功能是如何实现的?
Nacos的推送功能通过长轮询和UDP推送+HTTP定期对账来实现。