NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

攻防大战的背后——矛盾双修

  • 2020-09-21
  • 本文字数:2148 字

    阅读完需:约 7 分钟

攻防大战的背后——矛盾双修

1 Chaos 体系

1.1 Chaos 之混沌工程

混沌工程是在分布式系统上进行实验的学科,通过一系列可控的实验和执行实验的原则,揭示出分布式系统中随时或天灾或人为发生的各类事件是如何逐步导致系统整体不可用的,目的是建立对系统抵御生产环境中失控条件的能力以及信心。最近 2 年国内著名互联网公司已经开始意识并逐步实施,提高系统服务质量。

1.2 混沌的框架原则的理解


爱奇艺金融科技团队的混沌原则更多的是应对不可预知场景下系统架构、人员架构对于问题的应对能力,如隔离、告警、自我修复能力等,主要倾向工程层面、架构层面、研发流程体系层面、灾难预警恢复层面等。

1.3 Chaos - Monkey

理想的 Chaos Monkey 是 Chaos 体系的执行者,是基于场景为某个特定目标而生的,是一种可执行、可按预期销毁的手段。它主要负责寻找系统中任意一个盲区,并且利用盲区对系统实现某种程度并且可控的破坏。

2 矛盾大战的目的和设计

爱奇艺金融科技团队在高安全、高并发、高可用上遇到了很多挑战,同时金融系统相比于常规系统,在用户隐私、资金安全、敏感数据上有极高的要求,因此我们构建 Chaos 攻防模型,不断实施攻防对抗,逐步提高系统健壮性,为业务保驾护航。


目标如下


  1. 建立 Chaos Monkey 的攻击能力、执行流程来辅助及验证服务架构的实施效果,从而给架构演进提供指导和参考价值;

  2. 建立架构与业务的生产关系,达到架构与业务的双向促进,提高系统稳定性、可用性、健壮性;

  3. 通过架构与业务生产关系的良性循环,提高技术同学对整个系统的掌控力、技术实力更好的为业务服务。


混沌工程自循环之生产关系



  • Chaos 攻击能力的建设及升级


按照不同时期、不同要求、不同目标训练建设 Chaos Monkey 的可实施、可落地的攻击能力。


  • 制定计划及设置风险范围


Chaos Monkey 能力训练满足要求后,按照假定目标制定整个实施计划,包括执行时间、执行过程、影响范围、执行手段、结果预期、故障恢复、是否静默执行等,最后进行自动化实施准备。


  • 执行与反馈


执行前 check 无异常后开始实施同时观察监控系统、业务系统、告警系统,实施结束后恢复当前系统并给出相应反馈包括详细描述,优化建议等。


  • 系统优化及能力提升


业务 owner 收到结果反馈后需对已存问题进行 review、评估整改方案、修复计划并检查同类问题,最后进行系统升级。


  • 修复验证及业务需求


收到业务系统升级上线通知后再次与业务 review 预期目标,然后进行验证性攻击检验修复效果同时记录 case 库。


业务 owner 也可以向 Chaos Monkey 申请攻击来验证当前系统的真实情况。

3 Chaos 攻防的拷问及设计实施原则

Chaos 攻防的拷问


  1. 支付、金融 架构设计 是否存在问题?

  2. 原来的架构设计是不是不再符合我们的预期了?

  3. 设计方案和当前生产系统实现之间差了多少?

  4. 支付、金融 服务底线 都是什么,支付、金融服务的隔离颗粒度?

  5. 我们能承受哪些,能承受多长时间,我们不能承受哪些?

  6. 我们 系统的高可用程度

  7. 高可用节点切换过程会发生什么?

  8. HA 的切换手段、切换(不可用)的间隔?

  9. 切换成功的时间和一致性的时间是不是有关?等等。


设计实施原则


  1. 为设计漏洞、代码缺陷而生同时面向生产环境,做到要发现问题更要可控;

  2. 不拘于手段和形式。不论是使用开源工具,还是切断网线、偷偷杀掉进程、还是进程植入,内存数据篡改都是一种面向某个目的可实施手段;

  3. 监控告警辅助支撑,最大化风险评估,细化到流量的损失控制等。

4 攻防战绩

4.1 执行大类分布

4.2 已执行攻防 case 分类列表

4.3 实战案例举例

例 1:验证支付系统微服务 Spring Cloud 套件的高可用机制


涉及 Eureka Server、Client、Ribbon LB 及当前业务对配置掌握的合理性。


  • 验证结果: 当前架构能在 30s 内应对下游节点的无前兆故障。

  • 优化建议: 调整 LB 的探测时间,Eureka Client、Ribbon Cache 缓存时间,服务心跳续约,Eureka Server 服务剔除、数据同步时间等加强架构对故障的应对能力同时减少类似问题对业务的影响。


例 2:攻击金融业务系统中非核心依赖的中间件


暴露发现系统设计的健壮性问题。


  • 执行结果: 非核心依赖中间件发生服务抖动、服务故障时系统无降级策略,直接导致整个业务无法服务,不符合架构原则。

  • 优化建议: 业务系统增加对非核心依赖故障的降级及切换策略。优化连接池配置来应对当非核心依赖中间件出现问题时降低性能损耗及减少切换的时间差。

5 思考总结

5.1 总结

随着 Chaos 体系的逐渐成熟,体系内自驱力逐渐减少,Chaos 会进入一个新的阶段就是常态化。这个阶段不再是以暴露发现系统现有实施问题为主,而是面向系统架构的将来以及系统健壮性、可用性的稳固。主要有以下几点:


(1)自动化安全巡视


Chaos 将进入不定期按照已经积累 case 库进行自动化巡检。


(2)基础架构高可用由谁来监控


Chaos 进行不定期面向架构层面进行实弹演习,检验他们的战备值班能力。


(3)新技术、中间件的探索验证


对于新技术、新中间件甚至是自研的中间件可利用 Chaos Monkey 进行符合业务需求的健壮性、可用性探测验证。


(4)举一反三


建立线上故障 case 库,定时重播线上故障。

5.2 思考

(1)让业务能更直观的感觉到他守护的东西及带来的价值;


(2)增加覆盖面,有的放矢,针对实际情况调整目标及方向;


(3)建立可视化、模板化能力。丰富 case 库并支持重复攻击演练及跟踪。


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


原文链接


攻防大战的背后——矛盾双修


2020-09-21 14:001502

评论

发布
暂无评论
发现更多内容

阿里技术大牛亲自编写,将高难度的Java高并发知识讲解得浅显易懂

了不起的程序猿

使用软引用实现缓存机制

JAVA活菩萨

Java 后端 java程序员 大厂技能 大厂实践

C++中const关键字的作用总结

桑榆

c++ 8月月更

Spring(二、配置文件)

开源 bean Spring JPA 8月月更

七日算法先导(五)——归并排序,希尔排序

工程师日月

8月月更

Axure9基本交互操作(二)

乔乔

8月月更

Nacos配置中心之动态感知

急需上岸的小谢

8月月更

Java “constant string too long” 编译错误

HoneyMoose

从 VLAN 到 IPVLAN: 聊聊虚拟网络设备及其在云原生中的应用

阿里巴巴云原生

Linux 阿里云 云原生 容器服务 IPVLAN

六千字梳理 Node.js 的多进程模型和项目部署流程

昆吾kw

Node Express NGIN pm2

原型链中的函数和对象

掘金安东尼

JavaScript 前端 8月月更

12条MySQL优化技巧,提速不止十倍!

TimeFriends

8月月更

设计电商秒杀系统

爱晒太阳的大白

Github Actions 实现 Node.js 项目的 CICD 环境搭建

昆吾kw

nginx CI/CD Node Express Github Actions

站在数字经济浪尖:360视觉云探路中小微企业数智转型

脑极体

超强力推!阿里全新微服务突击手册,把所有操作都写出来了|超清PDF

冉然学Java

架构 微服务 java; 消息中间件 微服务框架

图文并茂|Linux内核内存回收之LRU算法

简说Linux内核

内存管理 Linux内核 进程管理 嵌入式开发

大算力时代已经到来

DisonTangor

计算

架构实战营复盘

Fan

#架构实战营

来学习开源模块化前端框架—Layui【Layui极致轻量前端框架】

恒山其若陋兮

开源 前端框架 签约计划第三季 8月月更

我们来聊聊锁升级吧

JAVA活菩萨

Java 后端 java程序员 大厂技能 大厂实践

系统管理-Linux系统进程管理

Albert Edison

Linux centos 运维 服务器 8月月更

Python 教程之输入输出(6)—— 使用 print() 函数输出

海拥(haiyong.site)

Python 8月月更

leetcode 769. Max Chunks To Make Sorted 最多能完成排序的块(中等)

okokabcd

数组 LeetCode 数据结构与算法

危险!请马上替换代码中的BeanUtils!!!

JAVA活菩萨

Java 后端 java程序员 大厂技能 大厂实践

发布Android库至MavenCentral详解

JAVA活菩萨

Java 后端 java程序员 大厂技能 大厂实践

Linux内核LRU算法内存交换过程

简说Linux内核

内存管理 Linux内核 进程管理 嵌入式开发

阿里SpringCloudAlibaba实战小抄(第五版)GitHub独家首发开源

冉然学Java

GitHub 开源 springcloudAlibaba spring-boot

JVM学习之 内存结构

JAVA活菩萨

Java java程序员 大厂技能 大厂实践 秋招

一文读懂Linux内核处理器架构中的栈

简说Linux内核

Linux内核 进程管理 嵌入式开发 设备驱动

C++对象模型和this指针实例分析

CtrlX

c++ 面向对象 后端 代码 8月月更

攻防大战的背后——矛盾双修_架构_爱奇艺技术产品团队_InfoQ精选文章