LinkedIn 开源 "iris-message-processor" 服务
LinkedIn 开发并开源了一个名为 "iris-message-processor" 的新服务,旨在提升其现有 Iris 升级管理系统的性能和可靠性。该服务在处理速度上有显著提升,平均负载下比前代快约 4.6 倍,高负载下快约 86.6 倍。
主要改进
- 全分布式架构:iris-message-processor 是前代 iris-sender 子进程的全分布式替代品,支持更多并发处理,并直接将消息发送给相应的供应商。
- 横向扩展能力增强:通过不使用数据库作为消息队列,减少了对现有数据库的需求,提升了系统的横向扩展能力。
- 处理大规模升级请求:能够处理大规模升级请求,测试中在不到 10 秒内处理了 6000 个升级请求,而前代系统需要 30 分钟。
- 节点故障下的高效处理:即使在同时丢失 50% 节点的情况下,集群也能在不到 30 秒内重新平衡,并在三秒内处理活跃的升级请求。
技术实现
- 分桶处理:将 Iris 升级请求分成多个桶,动态分配到 iris-message-processor 集群中的不同节点,实现并发处理和直接消息发送。
- 使用 Go 语言:新服务采用 Go 语言编写,避免了使用数据库作为消息队列,减少了对现有数据库系统的压力。
- 最终一致性数据库:使用最终一致性数据库存储结果消息以进行跟踪,增强了系统的可扩展性。
性能与稳定性
- 无故障运行一年:LinkedIn 使用 iris-message-processor 约一年,期间无任何故障,始终超过 1000 毫秒/消息的 SLO。
- 高压力测试:在 DNS 问题导致部分服务不可达的高压力情况下,集群能够快速重新平衡并在 60 秒内处理所有升级请求。
开源与社区贡献
- 开源项目:LinkedIn 已将 iris-message-processor 开源,与现有的 Iris 和 Oncall 仓库一起共享。
- 扩展性与灵活性:设计上考虑了扩展性和灵活性,支持不同供应商和数据存储的插件式集成。
- 贡献管理:采用测试驱动开发和验证,确保新贡献的质量和一致性。
资源使用与成本
- 资源利用率变化:引入 iris-message-processor 后,资源利用率变化微乎其微。
- 硬件配置:每个数据中心仅使用 3 个实例,每个实例 8 核 32 GiB 内存,即可满足需求。
- MySQL 配置:每个数据中心有 3 个 MySQL 主机,但整体配置是过度供应的。
选择 Go 语言的原因
- 并发处理能力:Go 语言适合快速开发高并发、无错误的应用程序,其轻量级 goroutine 和 channel 机制简化了并发任务管理。
- 标准库支持:Go 的标准库包含并发、网络、分布式系统和测试包,减少了第三方依赖,加快了开发速度。
投资回报
- 未与商业系统比较:LinkedIn 未进行与商业系统的比较分析,但估计为内部用户提供商业解决方案将是一笔巨大的投资。
- 维护成本:大部分时间用于协助开发者上系统和回答问题,没有专人负责 Iris,而是由监控基础设施团队共同维护。
未来期望
- 社区贡献:希望社区能够帮助改进和扩展 iris-message-processor,使其成为更易用的平台。
- 贡献管理:通过测试驱动开发和验证,确保新贡献的质量和一致性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。