学习理财博客空间

理财鱼

您现在的位置是:理财鱼 > 原创专题 >

原创专题

RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

发布时间:2021-06-21 21:06原创专题 评论

理财鱼小提示:RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

简介: 随着公司业务的不断发展,流量也在不断增长。我们发现生产中的一些重大事故,往往是被突发的流量冲跨的,对流量的治理和防护,保障系统高可用就尤为重要。

 RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

作者|梁勇 背景

哈啰已进化为包括两轮出行(哈啰单车、哈啰助力车、哈啰电动车、小哈换电)、四轮出行(哈啰顺风车、全网叫车、哈啰打车)等的综合化移动出行平台,并向酒店、到店团购等众多本地生活化生态探索。

随着公司业务的不断发展,流量也在不断增长。我们发现生产中的一些重大事故,往往是被突发的流量冲跨的,对流量的治理和防护,保障系统高可用就尤为重要。

本文就哈啰在消息流量和微服务调用的治理中踩过的坑、积累的经验进行分享。

作者介绍

梁勇 ( 老梁 ) ,《 RocketMQ 实战与进阶》专栏联合作者、参与了《 RocketMQ 技术内幕》审稿工作。ArchSummit 全球架构师大会讲师、QCon 案例研习社讲师。

当前主要在后端中间件方向,在公众号【瓜农老梁】已陆续发表百余篇源码实战类文章,涵盖 RocketMQ 系列、Kafka 系列、GRPC 系列、Nacosl 系列、Sentinel 系列、Java NIO 系列。目前就职于哈啰出行,任职高级技术专家。

聊聊治理这件事

开始之前先聊聊治理这件事情,下面是老梁个人理解:

治理在干一件什么事?

让我们的环境变得美好一些

需要知道哪些地方还不够好?

以往经验

用户反馈

业内对比

还需要知道是不是一直都是好的?

监控跟踪

告警通知

不好的时候如何再让其变好?

治理措施

应急方案

目录

打造分布式消息治理平台

RocketMQ 实战踩坑和解决

打造微服务高可用治理平台

背景

裸奔的 RabbitMQ

公司之前使用 RabbitMQ ,下面在使用 RabbitMQ 时的痛点,其中很多事故由于 RabbitMQ 集群限流引起的。

积压过多是清理还是不清理?这是个问题,我再想想。

积压过多触发集群流控?那是真的影响业务了。

想消费前两天的数据?请您重发一遍吧。

要统计哪些服务接入了?您要多等等了,我得去捞IP看看。

有没有使用风险比如大消息?这个我猜猜。

裸奔的服务

曾经有这么一个故障,多个业务共用一个数据库。在一次晚高峰流量陡增,把数据库打挂了。

数据库单机升级到最高配依然无法解决

重启后缓一缓,不一会就又被打挂了

如此循环着、煎熬着、默默等待着高峰过去

思考:无论消息还是服务都需要完善的治理措施

打造分布式消息治理平台

设计指南

哪些是我们的关键指标,哪些是我们的次要指标,这是消息治理的首要问题。

设计目标

旨在屏蔽底层各个中间件( RocketMQ / Kafka )的复杂性,通过唯一标识动态路由消息。同时打造集资源管控、检索、监控、告警、巡检、容灾、可视化运维等一体化的消息治理平台,保障消息中间件平稳健康运行。

消息治理平台设计需要考虑的点

提供简单易用 API

有哪些关键点能衡量客户端的使用没有安全隐患

有哪些关键指标能衡量集群健康不健康

有哪些常用的用户/运维操作将其可视化

有哪些措施应对这些不健康

尽可能简单易用

设计指南

把复杂的问题搞简单,那是能耐。

极简统一 API

提供统一的 SDK 封装了( Kafka / RocketMQ )两种消息中间件。

 RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

一次申请

主题消费组自动创建不适合生产环境,自动创建会导致失控,不利于整个生命周期管理和集群稳定。需要对申请流程进行控制,但是应尽可能简单。例如:一次申请各个环境均生效、生成关联告警规则等。

 RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

客户端治理

设计指南

监控客户端使用是否规范,找到合适的措施治理

场景回放

场景一 瞬时流量与集群的流控

假设现在集群 Tps 有 1 万,瞬时翻到 2 万甚至更多,这种过度陡增的流量极有可能引发集群流控。针对这类场景需监控客户端的发送速度,在满足速度和陡增幅度阈值后将发送变的平缓一些。

场景二 大消息与集群抖动

当客户端发送大消息时,例如:发送几百KB甚至几兆的消息,可能造成 IO 时间过长与集群抖动。针对这类场景治理需监控发送消息的大小,我们采取通过事后巡检的方式识别出大消息的服务,推动使用同学压缩或重构,消息控制在 10KB 以内。

场景三 过低客户端版本

随着功能的迭代 SDK 的版本也会升级,变更除了功能外还有可能引入风险。当使用过低的版本时一个是功能不能得到支持,另外一个是也可能存在安全隐患。为了解 SDK 使用情况,可以采取将 SDK 版本上报,通过巡检的方式推动使用同学升级。

场景四 消费流量摘除和恢复

消费流量摘除和恢复通常有以下使用场景,第一个是发布应用时需要先摘流量,另外一个是问题定位时希望先把流量摘除掉再去排查。为了支持这种场景,需要在客户端监听摘除/恢复事件,将消费暂停和恢复。

场景五 发送/消费耗时检测

发送/消费一条消息用了多久,通过监控耗时情况,巡检摸排出性能过低的应用,针对性推动改造达到提升性能的目的。

场景六 提升排查定位效率

在排查问题时,往往需要检索发了什么消息、存在哪里、什么时候消费的等消息生命周期相关的内容。这部分可以通过 msgId 在消息内部将生命周期串联起来。另外是通过在消息头部埋入 rpcId / traceId 类似链路标识,在一次请求中将消息串起来。

治理措施提炼

需要的监控信息

发送/消费速度

发送/消费耗时

消息大小

节点信息

链路标识

版本信息

常用治理措施

定期巡检:有了埋点信息可以通过巡检将有风险的应用找出来。例如发送/消费耗时大于 800 ms、消息大小大于 10 KB、版本小于特定版本等。

发送平滑:例如检测到瞬时流量满足 1 万而且陡增了 2 倍以上,可以通过预热的方式将瞬时流量变的平滑一些。

消费限流:当第三方接口需要限流时,可以对消费的流量进行限流,这部分可以结合高可用框架实现。

消费摘除:通过监听摘除事件将消费客户端关闭和恢复。

主题/消费组治理

设计指南

监控主题消费组资源使用情况

场景回放

场景一 消费积压对业务的影响

>相关《 RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践》内容:


1、 哈啰出行发起成立30亿元产业投资基金 将聚焦绿色低碳出行领域

理财鱼小提示:哈啰出行发起成立30亿元产业投资基金 将聚焦绿色低碳出行领域 央广网上海12月24日消息 在今天(24日)举行的中国两轮出行产业高峰论坛暨哈啰第四届生态伙伴大会上,哈啰出行宣布协同产业伙伴发起成立哈啰产业投资基金,基金总规模30亿元。 在高峰...【继续阅读】


2、 哈啰出行成立30亿元产业投资基金,打通共享与电单车业务供应链

理财鱼小提示:哈啰出行成立30亿元产业投资基金,打通共享与电单车业务供应链 新京报贝壳财经讯(记者 陈维城)12月24日,在哈啰出行主办的两轮出行产业高峰论坛暨哈啰第四届生态伙伴大会上,哈啰出行执行总裁李开逐宣布,哈啰出行将发起聚焦绿色低碳出行领域的...【继续阅读】


3、 哈啰出行李开逐:公司估值难以从单一视角看,两轮电动业务会越跑

哈啰出行李开逐:公司估值难以从单一视角看,两轮电动业务会越跑越快 2021-12-23 16:31:00 12月21日,哈啰电动车推出了旗下两轮电动车的旗舰产品ME70。该车型搭载VVSMART超连网车机系统2.0,配备行业首创的汽车级车载OBC快充,72V-44Ah大容量汽车级动力锂...【继续阅读】