随着应用规模的扩大,系统变得越来越复杂,不可避免地会走向分布式化。各种中间组件会相继被引入系统,其中分布式消息服务更是系统中必不可少的一环。这些消息服务之前并没有在系统中实际经历过真实流量考验,其中某些隐患或缺陷很难被发现,急需通过故障演练来评测高可用性。AHAS提供了强大且高灵活度的故障演练功能,可以根据不同的场景注入对应的故障类型。为了使您的演练服务更便捷,故障演练还提供消息演练功能。本文介绍消息演练的基本概念。
消息演练概述
目前市面上有RocketMQ、Kafka、RabbitMQ等流行的消息中间件服务,消息演练功能将这些常见的中间件进行了统一抽离,为消息服务安排分配了精选后的演练最佳实践。您无需分析每种消息服务需要什么演练场景,仅需选择演练方案即可,如下图所示。
在您授权后,消息演练功能会展示对应的消息服务整体架构图,方便您进行演练对象选择,如下图所示。
选择完成后,消息演练功能将会自动生成演练,省去您选择故障和填写参数的步骤,即可进行演练。
支持的部署模式
目前消息演练支持ECS自建服务的部署模式。
消息演练治理方案
您可以每次选择已有的消息组件进行演练,以30天为治理周期。消息演练治理的过程如下图所示。
消息演练治理控制台的操作主要包含以下步骤:
选择演练组件。
选择演练方案(需要安装探针)。
演练影响预判。
演练验证(通过演练进行验证)。
方案归档。
消息演练的应用场景
消息演练可以应用于以下场景:
评估组件架构:观测已部署的消息组件当前架构是否符合之前的设计方案,保证正确的组件服务。
验证服务依赖:通过演练的故障注入,检测系统对消息组件的依赖程度,探索消息失效的情况下,自身服务是否能够运行正常。
降级备案方案:评估消息服务在故障情况下,降级预案是否运行正常,上下游通知服务是否具有容错机制。
定位故障根源:经过消息演练之后,积累了消息系统的处理经验,对于未来的系统诊断定位有参考和提升作用。
消息的演练场景
消息服务通常是由不同的模块组成。例如,RocketMQ分为生产者Producer、消费者Consumer、服务集群Broker和注册中心NameServer四大模块。单个或多个模块都可能会有不同类型的故障发生,导致模块不能正常运行,例如Producer无法发送消息,这种场景叫做消息的演练场景。需要注意的是演练场景仅是组件表象,其内部故障原因可能是多种多样的,需要进一步进行分析。