【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

为技术系统打“疫苗”,爱奇艺攻防演练平台的探索实践

  • 2021-07-15
  • 本文字数:2740 字

    阅读完需:约 9 分钟

为技术系统打“疫苗”,爱奇艺攻防演练平台的探索实践

在程序员的江湖里,流传着一些经典的老梗:

编程第一法则:如果代码莫名运行成功了,那就别动了~

架构第一法则:稳定运行多年的老系统,千万不要碰~

图片来自网络


初入行的程序员们接受前辈的洗礼,将如上的法则深深印入脑海,并广泛应用于日后的职业生涯中。

对于正在运行中的线上生产环境,不仅不敢乱碰,恨不得烧香供奉起来。


然而,技术系统的脆弱性来源是多方面的,不仅包含硬件的故障代码的 Bug,还有架构和逻辑的漏洞线上流量的各种突发性与不确定性等等。随着各个技术系统向云原生架构的迁移,架构中引入的依赖和不确定性也越来越多。


如何在日益复杂的技术架构下,实现系统的反脆弱,成为了一个程序员向架构师提升之路上的必修课。

2010 年,NetFlix 的工程师提出了混沌工程的概念,通过对线上生产系统主动注入故障,来验证系统在各种故障场景下的响应行为,提前识别并修复系统隐患。


它就像“疫苗”一样,故意将有害物质注入体内以防止未来疾病。对于复杂的技术系统,工程师们同样可以通过注入有限可控的故障,提前发现系统的弱点并进行修复,从而规避可能产生严重后果的大型故障。

混沌工程的引入,既是一个技术上的革新,也是一个观念上的突破。它抛弃行业前辈们过去死守的“线上系统千万不能碰”的老旧维稳观念,提出了“以攻代守”的稳定性建设的新思路,开启了在生产环境做攻防演练的新时代。

混沌工程在爱奇艺的发展

爱奇艺的攻防演练工作,最早是由各个业务自行组织开展的。如金融支付团队,因其业务特点对稳定性要求极高,很早就开展混沌工程相关工作。详见之前的文章《攻防大战的背后》


在这个阶段,各个团队攻防演练使用的方法和工具都比较分散多样,没有形成一个统一的平台和工具标准。


在 2020 年初的疫情流量高峰期间,爱奇艺发生了一次播放失败故障。


在复盘后总结发现,这个大型故障其实是由一个小的网络抖动和代码 bug 引发的雪崩。这样的小问题平时隐藏在复杂的技术架构中很难被一般的测试发现,然而庞大的系统却因为这一个小的异常,触发巨大的连锁反应。


自此,爱奇艺的技术团队开始大规模地在重点服务的生产环境里,推动落地常态化,标准化的攻防演练工作,同时建设了公司级的攻防演练平台小鹿乱撞平台,用于支持各业务攻防演练的相关需求,提升攻防演练的安全性和执行效率。


截止到 2021 年 Q2,爱奇艺内部已有 20+重点业务通过小鹿乱撞平台进行攻防演练,平均每个重点服务的线上环境都经历了 3 到 4 轮的真实故障攻击演练。

小鹿乱撞平台的使用介绍

小鹿乱撞平台在爱奇艺承担着两个角色


(1)业务自测:各业务系统的 Owner 可以通过小鹿乱撞平台,对自己系统的生产或测试环境进行故障自测,检验自己在服务中预设的各类高可用保障措施(报警/降级/熔断/灾备切流等)是否生效。

(2)红蓝攻防:由公司成立的独立的架构评估团队,从第三方视角,用随机化的攻击实验,验证重点业务系统的高可用水平,对关键服务进行第三方检验保障。


小鹿乱撞平台模块图


小鹿乱撞平台参考了公有云攻防演练优秀产品的设计,用户可以通过如下简单步骤来进行攻防配置

1.选择攻击对象

2.配置攻击方式

3.编排演练方案

按照上面编排好的演练方案,提交审批之后就可以执行了。

4.演练观测

小鹿乱撞平台除了配置和编排演练方案之外,还打通了公司内部各个资源管理和监控观测系统,解决攻防演练中的权限,流程,可观测性等问题,为用户输出简洁有效的故障演练报告。


攻防演练进行中的观测:监控和告警

重点业务攻防演练案例介绍

案例一:视频播放服务 Couchbase 缓存故障演练

1.演练背景

在上文提到的播放故障里,其中一个原因是由于网络抖动导致播放服务访问 Couchbase 的 SDK 连接使用异常,引发后续的连锁反应。


在故障后,播放服务的同学对架构中的依赖进行了一系列的熔断加固,当服务访问 Couchbase 依赖超时会触发自动熔断,服务请求改成访问备用 KV 数据库,并通过攻防演练重放网络故障验证熔断加固的效果。


2.演练过程

在攻防演练中,我们选择攻击的方式是注入点对点网络故障,使视频播放服务所在的服务器与 Couchbase 集群之间增加 1000ms 延迟,模拟网络故障造成业务访问 Couchbase 超时。

3.演练效果

顺利触发熔断,Couchbase 访问超时后,业务请求立即切换到 HiKV。


案例二:会员服务 Redis 分布式锁攻防演练

1.演练背景

爱奇艺会员服务团队统一切换到新的 Redis 分布式锁,并通过攻防演练检验新的分布式锁在各种故障极端场景下的可靠性。


2.演练过程

对 Redis 分布式锁进行三种不同故障攻击,分别检验分布式锁在这三类不同攻击下的效果表现:

(1)场景 1:业务服务和 Redis 之间的网络断开,5 分钟后恢复

(2)场景 2:Redis 主库故障,触发主从切换到 Redis 从库

(3)场景 3:Redis 主库故障,不进行主从切换,经过 5 分钟后,重启 Redis 服务


3.演练效果

验证了 Redis 分布式锁在这三种极端场景下的业务影响,确定了业务侧在分布式锁故障期间的等待/重试等机制。根据 Redis 故障期间的分布式锁请求响应状况,指导业务调用方按照各自业务场景设置合理的等待间隔和重试配置等。

演练中常见的隐患和经验

回顾过去一年,在 20 多个业务线的生产环境里做攻防演练的经验,我们总结了一些具有普遍性或者较大危害性的问题,这里简单整理如下:

场景
常见隐患
数据库
客户端缓存了数据库地址,在数据库Failover主从切换后,客户端仍然在访问故障的主库。
异常数据
一些攻击依赖的场景下,会造成服务响应异常数据(如空JSON,非法格式的结果),并将错误数据返回给线上。各层健康检查和监控机制很少关注响应数据的格式正确性。
慢节点识别
在大集群(或者多容器)应用中,对少量节点注入攻击产生的少量慢节点,没有监控或者健康检查机制去发现。慢节点可以一直留在线上扛流量。
报警失效
报警长期失效,业务无感知。一些系统的关键报警是很久前设置的,在某次迭代/运维后报警已经失效了。缺乏对关键报警有效性的验证和测试。

总结

在爱奇艺,经过一年多的混沌工程文化布道和系统性的线上攻防实操,核心业务的一线技术 Leader 都已经具备了相当的攻防意识。作者这里总结了各业务优秀的架构师们的两个共同特点:

1.零信任

任何一个服务都不是孤立的,包括 DNS、负载均衡、网关、虚机/容器、数据库、中间件、存储、网络、Cache 等大量基础服务依赖,以及大量的外部接口依赖,即使每个单独的依赖都有 99.99%的可用性,几十项依赖叠乘在一起的可用性也是不高的。


优秀的架构师从不会抱着一种 “某某依赖是基础服务,我的架构里假设它 100%可用,出了故障我直接给它甩锅” 的想法来做技术服务,而是尽量假设任意一个环节都可能出问题,以此来设计自己系统的高可用方案。

2.探索欲

优秀的技术负责人,对自己的服务架构的可靠性做到心中有数,能够明确地对着架构图中的任意一个点回答,这里的异常能抵挡,那里的异常会让服务故障。如果有不确定的异常点,会主动通过攻防演练进行探索。测试/灰度等环境验证过的各类灾备/切流/熔断/降级机制,同样也敢去线上环境做攻击验证。


敢于对自己负责的线上服务进行真实攻击,是对未来云原生时代下架构师们的新要求,体现了技术 Leader 们的架构自信和技术自信。


自信源于对代码逻辑的深刻把握,对架构原理的理性思考,对业务责任的勇敢担当。


在未来云时代复杂的技术架构中,坚持这种技术自信,积极地参与到攻防演练的工作中,有利于加深架构理解,发现和修复服务隐患,为技术同学的能力成长开辟新前景,为公司业务的稳定发展保驾护航。


本文转载自:爱奇艺技术产品团队(ID:iQIYI-TP)

原文链接:为技术系统打“疫苗”,爱奇艺攻防演练平台的探索实践

2021-07-15 08:001428

评论 1 条评论

发布
用户头像
有多点细节介绍就好了
2021-08-10 09:22
回复
没有更多了
发现更多内容

IPQ6000 IPQ6010 VS IPQ5018|A Comprehensive Comparison: Evaluating Wallys' WiFi 6 SoCs Offering

wallyslilly

IPQ6010 IPQ6000 ipq5018

Ulysses for Mac(让写作变得更加简单) v33.1免激活版

影影绰绰一往直前

创新驱动数字经济发展,融云获评「2023 数字经济隐形独角兽」

融云 RongCloud

数字化转型 数字经济 办公 融云 政企

ubuntu20.4服务器安装mysql社区版并开放3306端口

百度搜索:蓝易云

MySQL 云计算 Linux ubuntu 运维

Topaz Video AI for mac(视频增强和修复工具) 4.0.8完整激活版

mac

苹果mac Windows软件 Topaz Video AI

如何利用香港VPS免备案加速你的数字生活

一只扑棱蛾子

香港VPS

mac电脑强大电脑风扇转速管理:Macs Fan Control Pro激活码中文版

胖墩儿不胖y

Mac软件 电脑风扇软件 风扇转速软件

淘宝API与大数据技术在电商行业的应用研究

技术冰糖葫芦

API

克魔助手:方便查看iPhone应用实时日志和奔溃日志工具

MySQL常用图形管理工具

小魏写代码

淘宝API和天猫SKU API在推动电子商务创新中的作用研究

技术冰糖葫芦

API

【Linux】硬件性能测试工具安装。

百度搜索:蓝易云

云计算 Linux 运维 服务器 云服务器

软件开发

Geek_8da502

语音数据集:探索、挑战与应用

来自四九城儿

The Next Generation of Apache Flink

Apache Flink

大数据 flink 实时计算

万界星空科技MES系统中的工时管理

万界星空科技

MES系统 mes 工时管理 万界星空科技 工时管理系统

MES系统中的标准工时管理

万界星空科技

低代码 低代码开发 低代码平台 mes 低代码云MES

记录一次RPC服务有损上线的分析过程

京东科技开发者

软通咨询助力某新能源头部企业迈向高效数智化时代,塑造行业新典范

软通咨询

数据智能 数字化咨询

Solana 生态铭文跨链桥 Sobit 是何神圣?其场外白名单已达到1200U

西柚子

如何在敏捷项目中实现高效测试?

敏捷开发

项目管理 敏捷开发 测试左移 测试自动化 bug管理

AI在NFT发展中的力量发挥:2024年AI将如何主导NFT场景

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

火山引擎边缘云获“2023边缘计算年度领航企业”及“最佳CDN创新企业”等多项荣誉

火山引擎边缘云

CDN 边缘计算 边缘云 CDN技术

TI 专访 Merlin Protocol:构建在比特币网络上的资产适配协议

中本聪研究院

Amazon Q | 融会贯通的 AI 开发助手来了!

亚马逊云科技 (Amazon Web Services)

人工智能 re:Invent 生成式人工智能 Amazon Q Amazon CodeCatalyst

语音数据集:推动智能语音技术发展的关键驱动力

来自四九城儿

全球校园人工智能算法精英大赛-AIOT应用赛项圆满落幕

AIRIOT

人工智能 IoT AIOT

天猫商品详情数据接口(Tmall.item_get)

tbapi

天猫数据接口 天猫商品详情数据接口 天猫商品API接口 天猫商品数据接口 天猫API

【保姆级教程】PAI x EasyPhoto,节日氛围AI写真生成

阿里云大数据AI技术

在Mac上,按Command-X键无法剪切怎么办?

mac大玩家j

Mac软件教程 好用的软件分享

万界星空科技智能制造平台的工时管理系统

万界星空科技

MES系统 mes 万界星空科技 工时管理系统

为技术系统打“疫苗”,爱奇艺攻防演练平台的探索实践_架构_爱奇艺技术产品团队_InfoQ精选文章