找份工作,工作内容就是不断破坏东西,然后让它们更好地运转?听起来像是每个好奇心重的六岁小孩的梦想,但又确实是 DevOps 向 DevSecOps 转型过程中的一种新兴软件工程趋势。其宗旨就是通过测试系统极限,来提升任何情况下的安全及性能。

这种趋势就是混沌工程。其前提是,即使在一切正常的时候,现代分布式网络的本质仍旧意味着,系统中存在固有的混沌元素,可导致不可预知的结果。

混沌工程是主动型漏洞管理的一种形式,在受控环境中测试网络在最极端情况下的表现。其理论基础是:当你做好了应对最坏情况的准备,就能轻松应付常规性能问题。

在受控环境中放任混沌肆虐,可使工程师运用收集来的数据设计出更健壮、更富弹性的系统。而且,听起来就很有趣。

Netflix 为什么选择混沌

混沌工程这一概念成型于 2010 年,作为此前 Netflix 所遭严重宕机事件的应对之策。Netflix 在宕机事件后即从单一供应商内部部署网络,转型至基于云的全球分布模式。那次宕机事件源于该公司主数据库之一崩溃,造成公司掉线三天,数百万客户无服务可用。

在一小时宕机时间即可导致企业平均 10 万美元以上损失的时代,就算掉线五分钟也是不可接受的。宕机不仅影响企业声誉和收益,还会令企业网络更易遭受攻击和数据泄露。

为准备转向去中心化全球网络,Netflix 团队创建了 Chaos Monkey (混世猴子)工具。该工具用于在非预期时间和位置上制造随机系统性故障,以确定系统能否抗住极端情况。其中逻辑在于,如果网络连这种极端情况都能对付,那肯定就能处理不那么极端的情况。

自 Netflix 将混沌作为一种软件工程 DevOps 工具,并把他们的 “猴子” 放到了开源社区,将近七年的时间里,混沌工程已经成为 IBM、谷歌和亚马逊等公司的标准测试过程。

混沌实战:混沌工程的原则

混沌工程可简单比作以网络为对象的接种防疫。人体接种失活疫苗后,身体会自然产生抗体,抵御此后可能的感染。网络安全发展至今,有些方法开始利用机器学习预测、调适和对抗内部及外部威胁。混沌工程可与这些先进网络安全方法紧密协作。

混沌工程原理

混沌工程的目标之一,是通过直接解决特定谬论,纠正不熟悉分布式网络的那些人的偏见。

这些谬论是:

  • 网络可靠且安全

  • 零延迟

  • 带宽是无限的

  • 拓扑是不变的

  • 管理员只有一个

  • 传输开销为零

  • 网络是同质的

混沌工程实验旨在解决全球网络分布中范围和结果的不确定性,发现可能影响性能和安全的系统性漏洞。绝大多数混沌工程实验遵循以下四步:

1. 定义指征正常系统性能的可衡量结果 “稳定状态”。

2. 假设该稳定状态将在控制和挑战两种环境中延续。

3. 引入模拟现实世界问题的变量,比如服务器崩溃、恶意软件注入、网络掉线和硬件故障等。

4. 通过对比控制组和挑战组中网络行为的差异,试图推翻原本稳定状态将延续的假设。

实验在受控设置下进行,以便了解分布式网络行为的更多特征,寻求在发生系统性故障之前就修正问题。良好混沌实验的核心,是可产生非预期变量的一系列创意。在试图证伪先前假设的过程中,一次改变一个重要变量,打破陈规。

有很多种方式可以创建新的潜在破坏性变量。很多人都会用 VPN 加密互联网连接,但未必考虑过使用其地理位置功能隐藏自身 IP 地址。该软件就通过以中间计算机连接互联网,来冒充其他国家的用户,以此实现隐藏自身 IP 地址的目的。关键点就在于尝试打破稳定状态。造成服务器崩溃。关闭虚拟机。给网络制造的复杂情况越多,你对系统安全与性能的信心越足,而且人工智能的发展也可以生成相当复杂的各种场景。

为确保混沌工程在理想状况下执行,产生出可靠数据,以下原则是必须遵循的。

1. 围绕基于可测输出而非系统特征的稳定状态行为,形成一种假设。这将证明系统可抵御不可预测的压力因素,而不仅仅是确认其如何运作。

2. 变动现实世界事件,包含源自硬件故障、软件漏洞及其他未必造成故障的事件,比如瞬时流量峰值或操作增加。

3. 在生产中实验,以便囊括真实流量。这可确保测试的真实性与相关性,让结果比仅仅依靠流量及压力模拟来得更具现实意义。

4. 运用自动化技术,安排和执行持续实验。自动化测试已编入混沌工程标准流程,目的是节省人工实现所耗费的时间和开销。

5. 最小化冲击范围,提升控制与减少网络中断。

企业运用混沌工程的优势

混沌条件下实现测试比单纯实验室分析提供的好处更多。技术人员能获得有关系统性漏洞的更深洞见,可减少有害事件及后果,缩短上市时间。业务人员能主动缓解盈利损失,减少停工时间,启动更有意义的 IT 和工程培训项目。

最重要的是,开发人员、工程师和业务人员可以支持更可靠的服务开发与交付,通过确保持续的服务可用性而增加客户满意度。

想要保护联网系统,在整体性能与网络安全缓解计划中融入混沌工程标准值得一试。

结语

网络越复杂,分布范围越广,软件开发人员和工程师就越想拥有适应各种情况的有效测试协议。

引入混沌工程,可以在不中断关键系统功能的情况下,更好地应对非预期事件。这将提升几乎所有挑战性环境中的整体性能并增强系统安全性。

声明:本文来自安全牛,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。