攻防大战的背后——矛盾双修
1 Chaos体系
1.1 Chaos之混沌工程
1.2 混沌的框架原则的理解
爱奇艺金融科技团队的混沌原则更多的是应对不可预知场景下系统架构、人员架构对于问题的应对能力,如隔离、告警、自我修复能力等,主要倾向工程层面、架构层面、研发流程体系层面、灾难预警恢复层面等。
1.3 Chaos - Monkey
理想的Chaos Monkey是Chaos体系的执行者,是基于场景为某个特定目标而生的,是一种可执行、可按预期销毁的手段。它主要负责寻找系统中任意一个盲区,并且利用盲区对系统实现某种程度并且可控的破坏。
2 矛盾大战的目的和设计
爱奇艺金融科技团队在高安全、高并发、高可用上遇到了很多挑战,同时金融系统相比于常规系统,在用户隐私、资金安全、敏感数据上有极高的要求,因此我们构建Chaos攻防模型,不断实施攻防对抗,逐步提高系统健壮性,为业务保驾护航。
目标如下:
-
建立Chaos Monkey的攻击能力、执行流程来辅助及验证服务架构的实施效果,从而给架构演进提供指导和参考价值; -
建立架构与业务的生产关系,达到架构与业务的双向促进,提高系统稳定性、可用性、健壮性; -
通过架构与业务生产关系的良性循环,提高技术同学对整个系统的掌控力、技术实力更好的为业务服务。
-
Chaos攻击能力的建设及升级:
-
制定计划及设置风险范围:
Chaos Monkey能力训练满足要求后,按照假定目标制定整个实施计划,包括执行时间、执行过程、影响范围、执行手段、结果预期、故障恢复、是否静默执行等,最后进行自动化实施准备。
-
执行与反馈:
执行前check无异常后开始实施同时观察监控系统、业务系统、告警系统,实施结束后恢复当前系统并给出相应反馈包括详细描述,优化建议等。
-
系统优化及能力提升:
业务owner收到结果反馈后需对已存问题进行review、评估整改方案、修复计划并检查同类问题,最后进行系统升级。
-
修复验证及业务需求:
收到业务系统升级上线通知后再次与业务review预期目标,然后进行验证性攻击检验修复效果同时记录case库。
业务owner也可以向Chaos Monkey申请攻击来验证当前系统的真实情况。
3 Chaos 攻防的拷问及设计实施原则
Chaos 攻防的拷问:
-
支付、金融 架构设计是否存在问题? 原来的架构设计是不是不再符合我们的预期了? 设计方案和当前生产系统实现之间差了多少? -
支付、金融 服务底线都是什么,支付、金融服务的隔离颗粒度? 我们能承受哪些,能承受多长时间,我们不能承受哪些? -
我们 系统的高可用程度? 高可用节点切换过程会发生什么? HA的切换手段、切换(不可用)的间隔? 切换成功的时间和一致性的时间是不是有关? 等等。
设计实施原则:
-
为设计漏洞、代码缺陷而生同时面向生产环境,做到要发现问题更要可控; -
不拘于手段和形式。不论是使用开源工具,还是切断网线、偷偷杀掉进程、还是进程植入,内存数据篡改都是一种面向某个目的可实施手段; 监控告警辅助支撑,最大化风险评估,细化到流量的损失控制等。
4 攻防战绩
4.1 执行大类分布
4.2 已执行攻防case分类列表
4.3 实战案例举例
例1:验证支付系统微服务Spring Cloud套件的高可用机制
涉及Eureka Server、Client、Ribbon LB及当前业务对配置掌握的合理性。
验证结果:当前架构能在30s内应对下游节点的无前兆故障。
优化建议:调整LB的探测时间,Eureka Client、Ribbon Cache缓存时间,服务心跳续约,Eureka Server服务剔除、数据同步时间等加强架构对故障的应对能力同时减少类似问题对业务的影响。
执行结果:非核心依赖中间件发生服务抖动、服务故障时系统无降级策略,直接导致整个业务无法服务,不符合架构原则。
优化建议:业务系统增加对非核心依赖故障的降级及切换策略。优化连接池配置来应对当非核心依赖中间件出现问题时降低性能损耗及减少切换的时间差。
5 思考总结
5.1 总 结
随着Chaos体系的逐渐成熟,体系内自驱力逐渐减少,Chaos会进入一个新的阶段就是常态化。这个阶段不再是以暴露发现系统现有实施问题为主,而是面向系统架构的将来以及系统健壮性、可用性的稳固。主要有以下几点:
Chaos将进入不定期按照已经积累case库进行自动化巡检。
Chaos进行不定期面向架构层面进行实弹演习,检验他们的战备值班能力。
(3)新技术、中间件的探索验证
对于新技术、新中间件甚至是自研的中间件可利用Chaos Monkey进行符合业务需求的健壮性、可用性探测验证。
(4)举一反三
5.2 思 考
也许你还想看
本文分享自微信公众号 - 爱奇艺技术产品团队(iQIYI-TP)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
估值百亿独角兽爱学习教育集团:通过云原生实践与时间赛跑
作者:山猎 爱学习教育集团的前身为高思教育,成立于2009年,以中小学课外培训起家,曾经的定位是K12培训机构;2014年,爱学习教育集团发力B端市场,目前在2B领域获得了全国各地办学机构的广泛认可,由K12培训机构升级为K12教育供给平台。 2019年4月份,爱学习教育集团完成由华平投资领投的1.4亿美元D轮融资。2014年以前,作为一家“教育产品研发”企业,爱学习教育集团为3-18岁年龄层的孩子提供个性化的教育产品方案及所有与教育相关的服务,旗下拥有“思泉语文”、“高思数学”、“高思VIP一对一”、“中学理科”等互联网教育产品:“乐乐课堂”、“爱学习”、“爱上古诗”“爱尖子”、“爱提分”等多个全国著名的学习子品牌,这些产品目前已经被大量的中小学辅导机构及公立学校引进,普遍提升了孩子的学习体验和学习效果。 2014年,在不断发展进化当中,爱学习教育集团(当时还叫高思教育)毅然决然的转型2B领域。据了解,到2029年,爱学习教育集团希望服务全球1亿学生和500万老师,助力50万所学校,以引领行业的内容和科技给学生带来美好的学习体验。 在线教育市场竞争激烈,爱学习是如何脱颖而出? 丰富的...
- 下一篇
详解Context包,看这一篇就够了!!!
前言 最近在项目开发时,经常使用到Context这个包。context.Context是Go语言中独特的设计,在其他编程语言中我们很少见到类似的概念。所以这一期我们就来好好讲一讲Context的基本概念与实际使用,麻麻再也不担心我的并发编程啦~~~。 什么是context 在理解context包之前,我们应该熟悉两个概念,因为这能加深你对context的理解。 1. Goroutine Goroutine是一个轻量级的执行线程,多个Goroutine比一个线程轻量所以管理他们消耗的资源相对更少。Goroutine是Go中最基本的执行单元,每一个Go程序至少有一个Goroutine:主Goroutine。程序启动时会自动创建。这里为了大家能更好的理解Goroutine,我们先来看一看线程与协程的概念。 线程(Thread) 线程是一种轻量级进程,是CPU调度的最小单位。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属于一个进程的其他线程共享...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7,CentOS8安装Elasticsearch6.8.6