知识卡片

StatsD为何选择UDP作为传输协议

专业/工作 · 1218.b

内容

StatsD 客户端把埋点数据通过 UDP 发送给 StatsD 服务端(可以部署在每台机器本地,也可以是集中式服务),选择 UDP 而非 TCP 的关键原因是 UDP 是非阻塞协议,不需要走 TCP 的握手确认流程来等待”发送完成”的信号,因此在应用代码里调用埋点几乎不会对应用本身的性能造成可感知的影响——虽然 StatsD 也支持 TCP,但几乎没有理由为了这点可靠性保证去承担阻塞的代价。发散:这是”可观测性数据的传输本身不该拖慢被观测系统”这条原则的具体技术实现,类似的取舍逻辑也出现在日志采集、指标上报等其他遥测场景——宁可偶尔丢一个数据点,也不能让监控本身反过来变成性能瓶颈。

参考来源

《监控运维实践 原则与策略-2021》第7章《应用程序监控》