跳至主内容

保障在线游戏安全:将混沌工程与DevOps实践相结合

· 1 分钟阅读
Zhaojun Wu
Senior DevOps Engineer at Tencent Interactive Entertainment Group
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

保障在线游戏安全:将混沌工程与DevOps实践相结合
保障在线游戏安全:将混沌工程与DevOps实践相结合

互动娱乐事业群(IEG)是腾讯集团专注于开发在线视频游戏及直播等数字内容的部门,以发行多款现象级游戏而闻名。

本文将阐述我们为何以及如何在DevOps流程中引入混沌工程。

我们每天需处理超1000万次访问,高峰时段每秒查询率(QPS)逾100万次。为保障玩家体验,我们频繁推出日常及季节性游戏活动,有时单日需更新活动代码超500次。随着用户规模扩大,数据总量呈几何级增长,当前已达200TB级别。面对海量用户请求与高频发布迭代,我们始终保持着高效运维。

云原生DevOps方案使我们从日益增长的在线活动中解放出来:当检测到新活动代码时,运维平台会自动构建镜像并部署至腾讯云容器服务(TKE)。从代码提交到生产环境上线,整个自动化流程仅需5分钟。

目前IEG几乎所有运营服务都运行在TKE上,云原生技术赋能的弹性扩缩容大幅提升了资源调度效率。

我们期望迭代过程能更轻量化——最佳实践是将庞大难维护的服务拆解为多个可独立运维的"微服务"。这类服务代码量小、逻辑简单,交接和培训成本更低。虽然我们持续推进微服务架构落地,但随着服务数量增长,调用链路复杂度陡增。更严峻的是,单个微服务的故障可能引发雪崩效应,导致整个系统瘫痪——这正是微服务依赖地狱的典型场景。

各服务的容错能力参差不齐:部分支持降级策略,部分则不具备;有些服务无法及时告警或缺乏有效调试工具。这些因素使得服务调试成为日常工作中日益棘手的难题。

但我们绝不能放任风险:若系统持续不稳定导致玩家流失怎么办?若发生灾难性故障又当如何?

主动引入故障

Netflix开创的混沌工程理念,通过在非生产环境注入故障来验证系统应对极端场景的韧性,最终达成理想可靠性。据Gartner预测,到2023年40%的企业将采用混沌工程实现核心DevOps目标,使非计划停机减少20%。

这正是我们规避最坏情况的手段。故障注入已成为技术团队的必备实践——早期测试中,开发者会主动宕掉节点,验证主节点是否自动切换备节点及灾备机制是否生效。

但混沌工程远不止于故障注入。 这个领域持续催生新技术、专业测试工具和完备理论体系,这正是我们不断探索的价值所在。

IEG 的混沌工程项目于一年前正式启动。我们希望从一开始就正确实施,关键在于选择支持 Kubernetes 环境实验的混沌工程工具。经过审慎评估,我们确信 Chaos Mesh 是最优选择,原因如下:

  • 该项目隶属云原生计算基金会(CNCF)沙箱项目,拥有活跃友好的社区生态

  • 无需侵入现有应用即可实现故障注入

  • 提供 Web UI 控制台及多样化的故障注入类型,如下图所示

混沌工程工具对比
混沌工程工具对比

注意:此对比内容已过时,仅用于展示 Chaos Mesh 与其他知名混沌工程平台的故障注入功能差异,并非项目优劣评判。欢迎提出修正建议

构建混沌测试平台

混沌工程团队将 Chaos Mesh 深度集成至 CI/CD 流水线。如下图所示,Chaos Mesh 已在运营平台发挥关键作用:通过其 Dashboard API 创建、运行和销毁混沌实验,并在自有平台进行监控。目前可模拟 Pod、容器、网络及 IO 等基础系统层故障

Chaos Mesh 在 IEG 运营平台的集成架构
Chaos Mesh 在 IEG 运营平台的集成架构

在 IEG 实践中,混沌工程已形成包含关键阶段的闭环流程

  • 提升系统整体韧性

    构建可随需求演进的混沌测试平台

  • 设计测试方案

    明确目标范围、待注入故障类型、监控指标等要素,确保实验过程可控

  • 执行混沌实验并评估结果

    对比系统在混沌实验前后的性能表现

  • 修复暴露问题

    针对性修复缺陷并升级系统,为后续实验做准备

  • 重复实验验证性能

    通过反复实验确认系统表现是否符合预期,达标后设计新测试方案

IEG 混沌工程五阶段实践
IEG 混沌工程五阶段实践

高 CPU 负载场景的服务性能测试为例:首先编排调度实验,随后运行实验并监控关联服务性能。通过运营平台实时观测 QPS、延迟、响应成功率等多项指标,最终生成评估报告验证实验结果是否符合预期

实践案例

以下展示我们在 DevOps 工作流中应用混沌工程的典型场景:

精细化故障注入

无需全系统停机即可验证游戏服务可用性。例如仅对特定玩家账号注入网络延迟故障,观察其响应状态。目前通过流量劫持技术在网关层实施实验,实现了此类精细化控制

红队攻防演练

团队成员对常规混沌实验产生倦怠是人之常情——毕竟这无异于让左右手互搏。在IEG,我们将红队测试实践融入混沌工程,确保系统韧性实现有机进化。 红队测试类似渗透测试但更具针对性,要求测试团队以外部攻击者视角模拟真实攻击。若由我负责运维,我会对特定服务注入故障,检验开发同事是否构建了健壮的系统。一旦发现潜在缺陷,"硬核复盘"就在所难免。而开发团队则会主动实施混沌实验,确保不留风险死角以避免问责。

IEG红队测试流程
IEG红队测试流程

依赖关系分析

微服务依赖管理至关重要。在我们的架构中,核心服务绝不能受非核心服务拖累。通过混沌工程,只需向被调用服务注入故障并观察主服务受影响程度,即可完成依赖分析。根据测试结果,我们能针对特定场景优化服务调用链。

自动化故障检测与诊断

我们正探索通过AI机器人实现故障检测诊断。随着服务复杂度提升,故障发生概率呈指数级增长。目标是通过在生产环境或受控环境中进行大规模混沌实验,训练出精准的故障检测模型。

混沌工程赋能DevOps实践

当前平均每周有超过50人执行混沌实验,完成150+次测试,累计发现逾百个系统缺陷。

手工编写故障注入脚本的时代已成历史——这对非专业人士曾是巨大挑战。混沌工程与DevOps结合的效益显而易见:通过可视化拖拽几分钟内编排各类故障,一键触发实时监控,全流程集成于统一平台。

混沌工程与DevOps结合实现高效故障注入
混沌工程与DevOps结合实现高效故障注入

受益于功能完备的混沌工程工具链和精益DevOps流程,过去半年IEG的故障注入及混沌优化效率至少提升10倍。若您对业务中实施混沌工程尚有疑虑,愿我们的实践经验能为您提供参考。