云计算改变了我们构建和运行系统的方式,为我们提供了可提高可靠性的托管服务。但这种灵活性也意味着小错误会迅速蔓延,一个错误的设置、缺失的标签策略或错误的扩展规则都可能同时影响多个环境。这些问题很快就会变得代价高昂或风险巨大。
许多团队都会遇到“类似”的问题……不是因为他们粗心大意,而是因为云平台的运行方式与传统的本地系统不同。
本期内容将带您了解云环境中的 15 个常见陷阱。
每个部分包含:
目标很简单:设计能够适应变化而不是被变化击垮的系统,并构建即使出现问题也能保持可靠的系统。
一、孤立资源
孤立资源是指不再使用但仍在运行的云资产。
例如:
随着时间的推移,它们会不断堆积,耗费“金钱”,并使仪表盘变得杂乱无章……从而使跟踪重要内容变得更加困难。
一个典型的例子是,在大型且昂贵的虚拟机上运行概念验证程序,却忘记将其关闭或删除。虚拟机持续运行,账单不断增长,直到有人注意到为止。
为什么会发生这种情况
云平台让创建新资源变得轻而易举,但删除资源通常需要手动操作,而且人们很容易忘记。由于每项资源都有成本,即使是少量残留资源也会累积成一笔不小的开支。如果资源没有被追踪记录,就没有人知道哪些可以安全删除。
架构影响
孤立资源会使资金流向难以追踪,也可能造成安全风险。例如:
如何预防
被遗忘的资源会悄无声息地浪费钱,而配置错误则会迅速导致系统崩溃。
二、配置错误
配置错误是云事故最常见的原因之一。
一个错误的设置或缺失的规则都可能影响可靠性、安全性或成本。而且,其影响往往会在人们察觉之前就已经扩散开来了。
例如:
当这些模式自动化时,一个错误就会在多个账户或地区被放大。
为什么会发生这种情况
云服务提供数百种设置:权限、扩展规则、加密选项、网络控制等等。
团队经常依赖默认设置,或者在未进行审查的情况下在不同环境之间复制设置。当基础设施即代码( IaC )模板包含错误时,每次使用该模板时,这些错误都会传播。
快速的发布周期让情况变得更糟,几乎没有时间可供审核。
架构影响
配置错误可能导致:
由于云自动化会大规模推送变更,因此一个微小的错误就可能在几分钟内影响整个生产环境。
如何预防
强大的配置固然有用,但前提是团队必须有效沟通。下一个挑战不在于代码,而在于协调。
三、团队间沟通不畅
云系统依赖于开发、运营、安全、网络和财务团队之间的有效协调。
如果他们不清楚地分享信息,各种假设就会发生变化,所有权就会变得不明确,问题就会在生产后期才显现出来。
例如:
为什么会发生这种情况
云项目涉及多个专业领域:
如果团队之间信息共享不清晰,关键细节就会丢失。团队可能不清楚哪些工作负载比较重要,或者具体变更会对成本或性能产生哪些影响。
架构影响
沟通不畅会导致:
事故发生时,没有人知道哪些东西属于谁,这会减慢响应和恢复速度。
如何预防
沟通不畅常常导致团队走捷径,例如依赖单一工具解决所有问题,但这种做法可能会适得其反!
四、认为一种工具就能解决所有问题
许多团队认为,单一的云平台、监控工具或自动化系统就能满足所有需求。
起初感觉效率很高:
一个界面,一个工作流程,一个学习平台。
但随着系统的发展,这种方法限制了灵活性……而且带来的问题比解决的问题还要多。
例子:
为什么会发生这种情况
云工具发展迅速,许多云工具都以“一体化”解决方案的名义进行销售。
面临简化或降低成本压力的团队通常会选择单一工具来完成所有事情:可观测性 、CI/CD、安全、部署等等。
起初,在单一平台上管理和培训员工似乎更容易。但随着时间的推移,难度会逐渐增加:
最初的“简单”最终变成了僵化。
架构影响
过度依赖单一工具可能导致:
如何预防
仅仅依赖单一工具是有风险的。然而,当人们对云计算的实际运作方式缺乏了解时,就会出现更深层次的问题。
五、对云技术原理的理解薄弱
许多云问题源于对云实际工作原理缺乏了解:从计费和扩展到数据传输和网络。
如果没有这些知识,即使是设计良好的系统也可能变得昂贵或不可靠。
例子:
为什么会发生这种情况
云平台隐藏了许多基础设施细节。
虽然这简化了流程,但并不能免除责任。习惯了传统环境的团队期望的是固定成本和可预测的绩效。
但在云端,一切都是基于使用量的:
服务可以自动扩展,但并非总能如团队预期那样扩展。服务的描述与其在实际工作负载下的表现之间通常存在差距。
架构影响
对云基数的理解不足会导致:
如何预防
对平台的误解往往会导致在云端照搬旧的数据中心模式,这可能会限制使用云计算的优势。
六、在云端重建本地部署
一个常见且代价高昂的错误是将云视为传统的数据中心。
许多团队在迁移虚拟机、网络和防火墙时,并未更改其设计,这样做看似安全可靠,但却忽略了云的关键优势,例如弹性、自动化和托管服务。
例子:
为什么会发生这种情况
大多数迁移都是在时间紧迫的情况下发生的,团队将会选择最快的方法:将他们的本地环境迁移到云端,以避免重新设计工作(“迁移”策略 )。
但如果这些旧习惯继续下去,如:
就会给平台带来技术债务,而该平台会对单元使用的每个资源(时间/调用/执行)收费。
架构影响
在云端重建本地环境可能会导致:
这些问题使得系统更难扩展、运行成本更高、恢复速度更慢。
如何预防
迁移到云端后,架构和可视性变得至关重要,如果没有妥善的管理,即使是小型部署也可能变得混乱不堪。
七、缺乏治理:无标签、无命名、无监控
如果没有明确的治理,即使是构建良好的云环境也会很快变得混乱。
当资源名称不明确、缺少标签或未受到监控时,成本会增加,所有权也会变得不明确。
团队无法回答诸如此类的简单问题:
这是谁的?
它是做什么用的?
我们可以删除它吗?
例子:
为什么会发生这种情况
在云计算采用过程的早期阶段,团队更注重速度而不是结构。
它们快速创建资源,但没有标准标签或名称。随着环境扩展到各个项目和地区,这些缺失的细节就会成为一个问题:
因此,环境变得难以理解。
架构影响
缺乏治理会导致:
如何预防
良好的治理可以提高可见性,但并不能保证安全,尤其是在团队过度依赖网络边界而忽视身份和访问控制的情况下。
八、将网络视为主要安全层
在传统数据中心中,网络边界通常是第一道防线:
您可以隔离系统、添加防火墙、控制流量等等。
但在云端,这种模式不再适用,身份和权限如今定义了真正的安全边界。然而,许多团队仍然主要依赖网络规则,而忽略了身份识别。
例子:
为什么会发生这种情况
来自本地环境的团队通常会将同样的基于边界的思维模式带到云端。
他们继续使用:
这种方法或许适用于小型部署环境,但云环境瞬息万变,许多服务(例如无服务器函数和托管数据库),完全运行在固定网络之外。
架构影响
过度依赖网络控制会导致:
如何预防
稳固的安全基础固然重要,但韧性也需要灵活性。静态的设计一旦环境发生变化,就会失效。
九、无法应对变化的静态设计
云系统旨在适应各种变化:
服务不断发展,使用习惯不断变化,地域范围也在不断转移。
但许多团队在设计架构时,仿佛一切都不会改变。静态、僵化的设计乍看之下可能很稳定……但一旦工作负载、连接或平台功能发生变化,它们就会失效。
例子:
为什么会发生这种情况
来自本地部署环境的团队通常秉持“设置好就不用管了”的心态,他们沿用旧有的模式:
有时,内部规则(例如审批流程过长或担心自动化出错)也会减缓变革。其结果是,系统虽然能够应对当前的流量,但却无法随着需求的增长而扩展。
架构影响
静态设计会导致:
他们也不鼓励测试和实验。
如何预防
系统无法适应环境变化是一个问题。但即使是灵活的系统,如果开发环境与生产环境过于相似,也会造成浪费。
十、将开发环境视为生产环境(相同的层级、策略、权限)
开发和生产过程不应该完全相同。
当两个环境使用相同的实例大小、保留规则和权限时,结果不是更好的控制;而是不必要的成本和降低的灵活性。
开发环境应该是一个安全的测试想法的环境,而不是生产环境的完全复制品。
例子:
为什么会发生这种情况
为了避免意外情况,团队通常会将生产环境的设置复制到开发或测试环境中。但在云端:
而且相同的配置会减慢开发速度,增加成本,并限制实验。
架构影响
对所有环境一视同仁会导致:
如何预防
随着业务规模的扩大,跨账户追踪成本变得越来越困难。缺乏透明度,支出就难以解释和控制。
十一、零成本可见性
只有当有人实际跟踪云成本时,云成本才会变得清晰可见。
许多团队几个月都不知道资金的去向。这会迅速削弱财务和领导层对团队的信任。
例子:
为什么会发生这种情况
云计费提供详细信息,但过程较为复杂。
成本分摊到各项服务、地区和账户中,如果没有合理的结构,就很难了解谁在花多少钱。
常见原因:
如果只注重速度而不跟踪成本,就会造成“神秘支出”,每个人都认为其他人正在监控使用情况。
架构影响
成本透明度不足会导致:
如何预防
成本透明度差往往会掩盖浪费,其中一个常见原因是收集了过多的数据。
作者丨Magdalena 编译丨Rio
来源丨网址:https://newsletter.systemdesign.one/p/cloud-system-design?utm_source=profile&utm_medium=reader2
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721