小红书消息中间件的运维实践与治理之路

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 近年来,消息领域的全面云原生化逐渐走向深入,比如 RocketMQ 5.0 版本的存算分离设计和 raft 模式,再比如 Kafka3.0 引入了分层设计的方式(tiered storage)和 raft 模式,以及近年来新崛起的 Pulsar 也开始采用云原生架构,在未来都可以针对具体业务需求引入进行功能迭代,发挥组件的最大价值。

作者 | 张亿皓

消息队列业务场景与挑战


整体规模


下图展示了 RocketMQ 和 Kafka 的总体规模。其中峰值 TPS 的 8000w/s 一般出现在晚上下班以后的时间段,写入量达到 50GB/s,每天新增 2-3PB 数据,节点数 1200+ 个。

1.png


业务架构


虽然 RocketMQ 和 Kafka 的性能相似,但在使用场景上还是有所区别的。RocketMQ 丰富的业务特性更适用于在线业务场景,而 Kafka 的高吞吐性使其更偏向离线、近线业务。当然,在实际应用中也会有交叉使用的现象,有时在线业务也会使用 Kafka 解耦,有的流处理数据也会使用 RocketMQ 存储。


业务总体架构如下图所示,业务日志和 APP 用户行为打点类的内容会发给 Kafka,数据库增量日志、在线业务、线上数据交换等会发给 RocketMQ。Kafka 和 RocketMQ 中的数据会有一部分流入 flink 中构建实时数仓、离线数仓以及一些数据产品(如报表、监控,等),RocketMQ 中另一部分数据会用于在线业务 APP 异步解耦。


2.png

image.gif消息队列业务架构


稳定性挑战

  • 背景:

小红书整体收敛消息组件较晚,公司技术架构最大的目标是提升系统稳定性;

  • 挑战:

现存消息组件使用量极大,但没有稳定性保障;同时面临人手紧缺、时间紧,对MQ原理了解不深入的困境;

  • 策略:

先做监控,增强集群的可观测能力是了解其健康状况的最高效手段。


稳定性治理


除了监控告警,我们在稳定性治理方面还做了以下改造工作:


  • 引擎
    资源隔离,新增监控打点等;
  • 平台
    工单审核,权限管控,业务追溯;
  • 治理
    针对集群可视化能力和集群可运维能力的建设;

image.gif‍‍

3.png

消息队列治理实践


集群可视化:监控metrics


下图是基于 Prometheus Grafana 构建的消息中间件体系架构。

4.png

消息中间件监控体系架构图


图中包含三个监控维度:硬件维度服务维度业务维度,累计收集监控指标 150+ 项。


那么如何定义这三个维度的监控指标呢?


  • 硬件维度
    主要包括网络带宽、CPU 使用率、磁盘容量/IO、TCP 丢包/延迟等资源指标;


  • 服务维度
    主要指运行状况的指标,如:
    宕机监控、JVM 指标、读写时延、请求队列等;

  • 业务维度
    即面向用户的指标,这是客户比较关心的指标,如:
    消费延迟/积压、QPS、Topic 吞吐量、Offset 等;


由于公司内部规定一个节点只能使用一个端口给 Prometheus,而各项监控指标大多是分开收集,于是设计了指标聚合服务 MAS 将所有指标汇集在一起,同时又增加了一些元信息帮助进一步排查问题。这里 MAS 相当于metric 的一个代理层,可以根据业务的实际情况来添加。


告警处理


下图列举了一些发生在监控体系刚建立时候的告警信息,当时每天的告警信息约有 600-700 条之多,告警的问题也是各式各样,根本无法处理,造成监控系统形同虚设。

5.png5.5.png


鉴于以上情况,我们提出监控的核心原则要宁缺毋滥,不要淹没在告警海中,告警太多和没有告警没什么区别。根据这一原则制定了一系列应对策略:


  • 初期:关闭低优告警,以确保每一条高优告警能得到及时发现和处理;
  • 中期:随着高优告警的减少,逐步打开之前屏蔽的告警,进一步处理,实现告警数量逐步减少;
  • 后期:打开全部告警,确保日常告警每一条都能及时发现和处理。


根据我们的经验,到后期基本不会有“服务不可用”这类的告警,大部分告警属于预警,如果预警能及时介入处理,就可以确保在问题进一步扩大之前解决。

6.png

image.gif告警处理阶段性策略


集群可视化:metric 设计与优化


RocketMQ 的服务、业务指标监控,基于开源 RocketMQ-exporter 进行改造,解决 metrics 泄漏、部分指标采集偏差等问题。


这里着重介绍两个比较重要的改造:


  • lag监控优化


问题一:consumer metric 泄露,exporter 运行几天指标量就可达到 300w+,curl 一次接口花费时间 25s,log文本有600MB;    

原因:如下图所示,每接入新的客户端,端口值就会增加,由于 exporter 实现中没能将离线客户端指标值及时清理造成客户端端口持续增加导致系统告警。

7.png

改造:在 exporter 中加入 metric expire 模块;

结果:curl 一次接口花费的时间降到 2s;


问题二:lag 指标不准,造成线上误告警

原因:export 只提供 group 维度的 rocketmq_group_diff,没有 broker 维度的,要额外计算;

改造:在 broker 中加入计算逻辑,先将 lag 计算好;

结果:可以从下图中看到,消息积压值从 6K 的抖动恢复成平稳值;

8.png

  • 分位线/滑动窗优化


问题一:线上时常会遇到 broker busy 的问题,需要对发生的时间点进行监控。虽然 exporter 自带 send pool 等指标,但为瞬时值,几乎没有参考意义;

改造:在 broker 中加入计算 5 分钟内最大值的指标;

结果:

9.png

问题二:消息写入耗时是历史最大值,参考作用有限;

改造:优化为 5 分钟内耗时,以及 P99/P999 等分位值;

结果:得到准确的消息写入耗时。

10.png


集群可视化:巡检系统


巡检系统与监控系统的区别是:监控系统是反应瞬时的问题,变化很快,需要及时发现和处理,呈现形式相对固定;巡检系统则是长期工作的监督,针对静态环境和配置,变化较少,呈现形式更加自由。


随着治理工作的持续开展,如何确认一个集群达到健康状态?


  • 严格按照部署标准部署集群,包括硬件配置、运行参数、可用区等,对所有集群进行定期巡检,产出报表反映集群状况;
  • 共制定核心标准 20+项,巡检结果以表格形式呈现,如下图表格。

11.png

11.5.png

image.gif

  • 由于指标过多无法从判断问题,因此设定了集群健康分体系,是基于集群的可用性只能通过唯一指标反映的思想,将每个指标设置一个权重,通过最终的分值来判断集群是否存在问题,如下图所示:

12.png


集群可视化:消息对账监控


在设计告警时,总会有些没有考虑到的告警项,这里的解决方案是消息对账系统,它可以有效监控消息延迟、丢失和集群健康度。


消息对账系统的优势在于它提供端对端的监控,包罗多项监控的效果,并且它的自驱力可以替没有考虑到的告警项兜底,故障的发现和定位也被独立开。

13.png

消息对账监控系统

image.gifimage.gifimage.gif14.png15.png16.png

在 Kafka 社区提供了相应的 Kafka Monitor 组件,我们将这个组件进行服务化改造,提供自动化添加新集群监控的能力,减轻运维的压力。


集群可运维:自动化平台


可运维能力的建设是通过自动化来实现的,其根本目的是释放人力。下图展示的是 topic 迁移工具,从 RocketMQ 和 Kafka 两部分改造:


a.   RocketMQ

  • 修改 nameserver delete 逻辑,支持在 broker 间自动迁移 topic;
  • 同时处理 consumer-group,retry/dlq topic;
  • 依赖自研管理平台。


b.   Kafka

  • 基于 reassign 改造,自定义 reassign 算法,减少 partition 搬迁的影响;
  • stage 工作流化,每一步自动执行,人工确认下一步操作;
  • 集成自研管理平台。

17.png

Topic迁移工具


未来的探索与规划


近年来,消息领域的全面云原生化逐渐走向深入,比如 RocketMQ 5.0 版本的存算分离设计和 raft 模式,再比如 Kafka3.0 引入了分层设计的方式(tiered storage)和 raft 模式,以及近年来新崛起的 Pulsar 也开始采用云原生架构,在未来都可以针对具体业务需求引入进行功能迭代,发挥组件的最大价值。


作者介绍

张亿皓:小红书消息中间件负责人


目前,阿里云 Prometheus 监控以及 Grafana 服务均已发布,全托管服务免去运维烦恼,更优性能,更灵活配置。了解更多详情,点击下方链接:

https://www.aliyun.com/product/aliware/grafana

相关文章
|
12天前
|
运维 监控 Devops
DevOps文化下的自动化运维实践
本文将探讨在DevOps文化背景下,自动化运维的重要性及其实现方式。通过分析自动化运维的优势和挑战,文章提供了具体的实施策略和案例,旨在帮助读者理解如何在DevOps实践中融入自动化运维,以提高软件开发和部署的效率与质量。
|
27天前
|
运维 监控 安全
现代化运维管理系统的关键技术与实践
传统的运维管理方式已经无法满足当今复杂多变的IT环境需求,现代化运维管理系统应运而生。本文将介绍现代化运维管理系统的关键技术和实践,包括自动化运维、容器化技术、监控与告警系统等方面,旨在帮助企业更好地理解和应用现代化运维管理系统。
20 0
|
6天前
|
机器学习/深度学习 数据采集 人工智能
智能化运维的探索与实践:AI在IT运维中的应用
【6月更文挑战第19天】随着人工智能技术的不断成熟,其在IT运维领域的应用也愈发深入。本文将探讨AI技术如何赋能传统IT运维,提升效率和响应速度,实现故障预测、自动化处理及优化决策。通过分析AI在运维中的实际应用案例,我们能更好地了解其潜力与挑战,并预见未来智能化运维的发展路径。
220 6
|
3天前
|
机器学习/深度学习 人工智能 运维
智能化运维的探索与实践
【6月更文挑战第21天】本文旨在探讨智能化运维在现代IT管理中的应用和挑战,通过分析智能化技术如何赋能传统运维流程,揭示其在提升效率、降低成本方面的潜力。文章将结合具体案例,阐述智能化运维的实施路径和面临的主要问题,为读者提供一套可行的智能化运维解决方案框架。
|
26天前
|
运维 监控 Devops
构建高效自动化运维系统:DevOps在企业级应用的实践
【5月更文挑战第30天】 随着信息技术的飞速发展,企业对软件交付速度和稳定性的要求越来越高。传统的运维模式已无法满足快速迭代和高效稳定的需求,因此,本文将探讨如何通过实施DevOps文化、流程和工具,构建一个高效的自动化运维系统。文章将详细描述DevOps的核心理念、关键技术组件以及如何在组织中落地实施策略,旨在帮助企业提升运维效率,加速产品的上市时间,同时保证系统的高可用性和稳定性。
|
26天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第30天】随着云计算和微服务架构的兴起,传统的运维模式已难以满足快速迭代和高可用性的需求。本文探讨了如何利用容器技术构建一个高效、可靠的自动化运维体系,重点分析了Docker和Kubernetes在这一过程中的关键作用,并提出了一套基于这些技术的持续集成(CI)与持续部署(CD)解决方案。通过实际案例和操作步骤的详细阐述,文章为读者提供了一种实现自动化运维的有效途径,同时对未来运维技术的发展趋势进行了展望。
|
26天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的实践
【5月更文挑战第30天】 在当今的快速迭代和持续部署的软件发布环境中,自动化运维的重要性愈发凸显。本文旨在探讨如何利用容器化技术与微服务架构,特别是Docker和Kubernetes,来构建一个高效、可伸缩且自愈的自动化运维体系。通过详细分析容器化的优势及Kubernetes的集群管理机制,文章将提供一个清晰的指南,帮助读者理解并实现现代软件部署的最佳实践。
|
28天前
|
存储 人工智能 运维
构建高效自动化运维体系的策略与实践
【5月更文挑战第28天】在数字化转型的浪潮中,企业IT基础设施的管理和维护变得越来越复杂。为了应对这一挑战,自动化运维(AIOps)应运而生,它通过集成工具、流程和策略来提高运维效率,降低成本,确保系统稳定性和服务可靠性。本文将探讨构建高效自动化运维体系的关键技术要素,包括日志管理、性能监控、事件自动化处理以及持续集成和持续部署(CI/CD),并分享实际案例分析,以指导企业如何规划和实施自动化运维解决方案。
|
28天前
|
运维 Kubernetes jenkins
构建高效自动化运维系统:基于容器技术的持续集成与持续部署实践
【5月更文挑战第28天】 在现代软件工程实践中,持续集成(CI)和持续部署(CD)已成为提升开发效率、确保产品质量的关键环节。本文旨在探讨如何利用容器技术构建一套高效、可靠的自动化运维系统,以支持敏捷开发流程和微服务架构。通过对Docker容器及Kubernetes集群管理工具的深入分析,我们提出了一种结合Jenkins实现自动化测试、构建与部署的完整解决方案,并讨论了其在现实业务中的应用效果和面临的挑战。
|
28天前
|
运维 监控 安全
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【5月更文挑战第28天】在现代IT基础设施管理中,自动化运维已成为提升效率、确保稳定性的关键手段。本文将探讨如何利用容器技术实现软件的持续集成(CI)与持续部署(CD),从而构建一套高效的自动化运维体系。通过分析容器化的优势和挑战,结合DevOps文化,我们提出一个实用的框架,以帮助企业快速响应市场变化,缩短产品上市时间,同时保障服务的高可用性。