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

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

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

一、消息队列业务场景与挑战

1、整体规模

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

2、业务架构

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

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

消息队列业务架构

3、稳定性挑战

a.   背景:

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

b.   挑战:

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

c.   策略:

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

4、稳定性治理

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

a.   引擎:资源隔离,新增监控打点等;

b.   平台:工单审核,权限管控,业务追溯;

c.   治理:针对集群可视化能力和集群可运维能力的建设;

二、消息队列治理实践

1、集群可视化:监控metrics

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

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

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

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

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

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

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

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

2、告警处理

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

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

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

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

告警处理阶段性策略

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

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

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

a.   lag监控优化

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

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

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

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

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

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

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

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

b.   分位线/滑动窗优化

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

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

结果:

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

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

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

4、集群可视化:巡检系统

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

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

a.  严格按照部署标准部署集群,包括硬件配置、运行参数、可用区等,对所有集群进行定期巡检,产出报表反映集群状况;

b.  共制定核心标准20+项,巡检结果以表格形式呈现,如下图表格。

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

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

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

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

消息对账监控系统

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

6、集群可运维:自动化平台

可运维能力的建设是通过自动化来实现的,其根本目的是释放人力。

下图展示的是topic迁移工具,从RocketMQ和Kafka两部分改造:

a.   RocketMQ

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

b.   Kafka

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

Topic迁移工具

三、未来的探索与规划

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

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511551.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爆测一周,22年必看最细致代码托管工具测评

简介:网上代码托管选型的文章不少,不过大多内容有点久远,很多最新的平台没有包括进来,个人花了大概一个星期的时间,把目前市面上比较火的代码托管平台(开源托管平台:Github、Gitee;企…

read 文件一个字节实际会发生多大的磁盘IO?

作者 | 张彦飞allen来源 | 开发内功修炼在日常开发中一些看似司空见惯的问题上,我觉得可能大多数人其实并没有真正理解,或者理解的不够透彻。不信我们来看以下一段简单的读取文件的代码:上图中的代码仅仅只是对某个文件读取了一个字节&#x…

【指标需求思考】如何做好指标类需求建设

简介:大家一直所说的【需求】究竟有哪些?用户需求、业务需求、系统需求...... 但是今天我要给大家介绍一种我自认为一种别出心裁的需求!【指标类需求】在庞大的需求体系里,一个完整的系统设计流程是非常必要的,好则效率…

oracle 12c 低版本,oracle高版本迁移数据到低版本(12c至11g)方法

1.12c版本信息:2.11g版本信息:3.查看12c的字符集编码:select userenv(language) from dual;要迁移的两个数据库字符集编码要保持一致。如果不一致请手工修改,修改方法另行百度。4.查看11g数据库字符集编码:5.查看12c数…

构建信创产业生态,移动云立足全栈自主创新连放大招

信创,即信息技术应用创新,它是数据安全、网络安全的基础,也是“新基建”的重要内容。在国际信息安全形势严峻、国家安全需要和数智时代新要求三重因素作用下,信创生态应运而生。进入2022年,云计算将成为信创主要落地方…

游戏行业搜索实践

简介:本文通过游戏行业客户案例带大家了解游戏内容,游戏论坛等场景搜索特性,以及如何通过开放搜索游戏增强版解决方案轻松快速接入,实现高质量搜索效果,提升业务指标和用户体验。 客户背景 国内知名的文化社区和视频平台,其游戏…

序列特征在推荐算法中的应用

简介:行为序列特征在推荐,广告等领域中有着广泛应用,最近几年涌现了很多有关行为序列的研究论文,讲解如何将行为序列应用到实际场景中。但是论文中的实际思想距离落地还有一段距离,因此本文先介绍一些论文中的序列特征…

BlackBerry 软件全球现已部署超过2.15亿辆汽车

BlackBerry近日宣布,据知名独立调研公司Strategy Analytics统计,目前全球已有超过2.15亿辆汽车搭载BlackBerry QNX软件,较2021年增加了2,000万辆。 作为获得安全认证的嵌入式汽车软件市场领导者,BlackBerry深受众多业内汽车制造商…

从托管到原生,MPP架构数据仓库的云原生实践

简介:本文介绍了云原生数据仓库产品AnalyticDB PostgreSQL从Cloud-Hosted到Cloud-Native的演进探索,探讨为了实现真正的资源池化和灵活售卖的底层设计和思考,涵盖内容包括产品的架构设计,关键技术,性能结果&#xff0c…

做到这4点,才是真正的持续交付| 研发效能提升36计

简介:全线专栏《研发效能提升36计_持续交付篇》上线啦!本专栏将通过10-20篇文章,系统分享云原生时代,企业如何落地持续交付。本文是该专栏的第2篇。 什么是真正的持续交付? 编者按:全线专栏《研发效能提升…

oracle打patch,Oracle初学者入门指南-How to get Oracle Patch?

Oracle初学者入门指南-How to get Oracle Patch?怎样获得/找到Oracle的Patch,这是一个朋友在Itpub上问到的问题。他还举了一个生动的例子:比如我要使用oracle的全文检索功能,但是这个全文检索在9201里不支持中文,中文的无法检索,…

e签宝:借助钉钉宜搭变革传统项目管理模式,交付效率显著提升

简介:通过钉钉宜搭,e签宝在半个月内搭建了项目交付管理平台,提升了项目管理的效率和质量,推进了团队核心业务的信息化建设。e签宝在有效梳理了各环节的工作进度、质量、成本、职权后,通过宜搭平台保障了内外通畅&#…

24 张图一次性说清楚 TCP

来源 | 杰哥的IT之旅做IT相关的工作,肯定都离不开网络,网络中最重要的协议是TCP。无论是实际工作还是笔试面试,你看哪里能少得了TCP?我看过RFC中与TCP相关的文档,也看过linux中TCP相关的源码,也看过不少框架中的TCP相…

php 实例化模型出错,实例化model出错了

我是按照老师所说的做的。在function user 中写入了这些<?php namespace Home\Controller;use Think\Controller;class IndexController extends Controller {public function index(){//省略了}public function user(){//其实新版的url应该这么写&#xff1a;http://www.t…

作业帮基于 DeltaLake 的数据湖建设实践

简介&#xff1a;作业帮是一家以科技为载体的在线教育公司&#xff0c;其大数据中台作为基础系统中台&#xff0c;主要负责建设公司级数仓&#xff0c;向各个产品线提供面向业务主题的数据信息。本文主要分享了作业帮基于 DeltaLake 的数据湖建设最佳实践。 作者&#xff1a; 刘…

iLogtail 与Filebeat 性能对比

简介&#xff1a;前段时间, iLogtail 阿里千万实例可观测采集器开源&#xff0c;其中介绍了iLogtail采集性能可以达到单核100MB/s&#xff0c;相比开源采集Agent有5-10倍性能优势。很多小伙伴好奇iLogtail具体的性能数据和资源消耗如何&#xff0c;本文将针对目前业界使用度较高…

如何快速开发 Serverless Devs Package ?

简介&#xff1a;目前&#xff0c;开发者开发 Serverless Package 的流程相对来说是比较简单的。因为在 Serverless Devs 开发者工具中&#xff0c;已经提供了相对完整的脚手架能力&#xff0c;一文了解详情~ 作者 | 江昱&#xff08;阿里云 Serverless 产品经理&#xff09; …

首发苹果 M2!MacBook Pro 正式开售,更像是一个增强版的 A15?

作者 | Ryan Smith 译者 | 弯月出品 | CSDN虽然一年一度的WWDC主要是一个软件发布会&#xff0c;但也总是时不时地给出一些硬件惊喜&#xff0c;今年也不例外。在WWDC22上&#xff0c;苹果公布了用于Mac&#xff08;和iPad&#xff09;平台的第二代苹果系统芯片——M2。这个…

专题实战 | 如何快速构建高质量电商行业搜索?

简介&#xff1a;本文详细介绍如何快速接入智能开放搜索&#xff08;OpenSearch&#xff09;电商行业增强版&#xff0c;助力企业实现高质量搜索效果&#xff0c;提升业务转化率及用户产品体验&#xff01; 电商搜索特点 1. 关键词堆砌 例如&#xff1a;明星同款夏季连衣裙包…

Linux 网络性能的 15 个优化建议!

作者 | 张彦飞allen来源 | 开发内功修炼那么具备了对网络的深刻的理解之后&#xff0c;我们在性能方面有哪些优化手段可用呢&#xff1f;我这里给出一些开发或者运维中的性能优化建议。这些建议都是从书中摘录的。不过要注意的是&#xff0c;每一种性能优化方法都有它适用或者不…