随着应用规模的扩大,系统变得越来越复杂,不可避免地系统会走向分布式化。各种中间组件会相继被引入系统,其中分布式消息服务更是系统中必不可少的一环,这些消息服务之前并没有实际在系统中经历过真实流量考验,很难发现一些其中隐患或缺陷,急需通过故障演练来评测高可用性。AHAS提供了强大且高灵活度的故障演练功能,可以根据不同的场景注入对应的故障类型。为了您使用演练服务更便捷,故障演练还提供了消息演练功能。本文介绍消息演练的基本概念。

消息演练概述

目前市面上有RocketMQ、Kafka、RabbitMQ等流行的消息中间件服务,消息演练功能将这些常见的中间件进行了统一抽离,为消息服务安排分配了精选后的演练最佳实践,您不需要自己去研究分析每种消息服务需要什么演练场景,仅需选择演练方案即可,如下图所示。

消息演练1

消息演练功能会在您的授权下展出对应的消息服务整体架构图,方便您进行演练对象选择,如下图所示。

消息演练2.png

选择完成后,消息演练功能将会自动生成演练,省去您选择故障和填写参数的步骤,即可进行演练。

支持的部署模式

目前消息演练支持ECS自建服务的部署模式。

消息演练治理方案

您可以每次选择已有的消息组件进行演练,以30天为治理周期。消息演练治理的过程如下图所示。

消息演练3.png

消息演练治理控制台的操作主要包含以下步骤:

  1. 选择演练组件。
  2. 选择演练方案(需要安装探针)。
  3. 演练影响预判。
  4. 演练验证(通过演练进行验证)。
  5. 方案归档。

消息演练的应用场景

消息演练可以应用于以下场景:

  • 评估组件架构:观测已部署的消息组件当前架构是否符合之前的设计方案,保证正确的组件服务。
  • 验证服务依赖:通过演练的故障注入,检测系统对消息组件的依赖程度,探索消息失效的情况下,自身服务是否能够运行正常。
  • 降级备案方案:评估消息服务在故障情况下,降级预案是否运行正常,上下游通知服务是否具有容错机制。
  • 定位故障根源:经过消息演练之后,积累了消息系统的处理经验,对于未来的系统诊断定位有参考和提升作用。

消息的演练场景

消息服务通常是由不同的模块组成,例如RocketMQ,分为生产者Producer、消费者Consumer、服务集群Broker,注册中心NameServer四大模块。单个或多个模块都可能会有不同类型的故障发生,导致模块不能正常运行,例如Producer无法发送消息,这种场景叫做消息的演练场景。需要注意的是演练场景仅是组件表象,其内部故障原因可能是多种多样的,需要进一步进行分析。

参考文档

消息演练的最佳实践,请参见消息演练最佳实践