Skip to main content

Command Palette

Search for a command to run...

警惕多云陷阱

Updated
1 min read

原文:Multi-Cloud Is a Trap

作者:Tyler Treat

和众多客户进行了沟通之后,我们得到了一些普遍需求:云无关、避免厂商锁定、能够在不同云供应商之间把工作负载进行无缝切换。这里我要再说一遍:多云是陷阱。大型零售商可能不想依赖在 Amazon 的基础设施上,除此以外,我想不出任何理由,让任何规模的组织将多云支持作为优先需求来考虑。

如果只是纸上谈兵,多云策略是很棒的;但是这一过程会引入了不必要的麻烦。绝大多数情况下,这种方法都会是一个兵分多路的过程,在用更多成本来解决旧问题的同时,造出更多的新问题,最终只能是竹篮打水一场空。这个说法似有危言耸听之嫌,后面会进一步进行说明。首先画个范围,这里提到的多云,指的是在不同云供应商的设施上运行同样的服务;或者一种允许用户在供应商之间平滑切换应用程序的设计方法。这一称谓不包括利用各不同供应商各自的最佳组件或者使用更高级别的跨供应商抽象方案的情况。

多云方案有很多值得关注的原因,主要是以下几个方向:灾备、供应商锁定和花费。我们会逐一进行讨论,并在最后看看多云实际发挥作用的方向。

灾备

多云方案经常以灾备方案的面目出现。当我们讨论灾备的时候,首先要对云供应商的运作方式有个清晰的认识。AWS、GCP 和 Azure 这些公有云供应商都有分区和 Availability Zone(AZ)的概念(Azure 在受到教训之后,最近在部分分区提供了 Availability Zone(AZ))。分区是一组在特定地理区域范围内的数据中心;而 AZ 是分区之内的一或多个数据中心。每个 AZ 都有独立的网络连接和备用供电,一个分区内的多个 AZ 之间会有低延迟网络链接。不同 AZ 可能处于同一个建筑内(配备独立计算、供电、冷却等设施)或者完全分开、甚至可能在几百英里以外。

分区一级的服务中断非常少见,然而一旦发生,就意味着互联网发生大规模的瘫痪,因此一定会成为万众瞩目的焦点。因为 AZ 本身在地理上是孤立的,除非是有陨石摧毁整个弗吉尼亚,否则很难干掉整个分区。更能导致区域故障的原因可能是配置或者其他方面的运维问题。虽然少见,但是确有发生(案例 1案例 2)。然而分区是高度隔离的,并且服务商的维护活动会在特定的时间窗口进行,从而避免多分区同时故障。

当然不是说多区域故障不可能发生(比如流星毁灭半个美洲大陆或者一些奇怪的蝴蝶效应)。有一些主干设施可能会跨区工作,也有可能引发大规模事故。这样看来,多个云供应商很明显比提供多区域服务的单一供应商要安全,但是灾备是个跨度极大的话题,这种成本之中,云服务的移植性在成本构成上只占很小一份。你可能并不需要用多个云供应商来提供额外的灾备保障——除非你具备 google 或者 amazon 的规模。毕竟 Amazon.com 是世界上最大的零售商,如果你的灾备需求达到这一等级,你的规模也可想而知了。

供应商锁定

供应商锁定是一个关于恐惧、不确定性以及怀疑的话题,这个话题经常被当做多云策略的理由。Beau 在他的文章中说过:

云、DevOps、Serverless 这些都是用于将普遍需求进行商品化的尝试。它们可能不是完美方案。是的,可能造成厂商锁定。但是我认为这是一个值得尝试的行为,并没有听起来那么可怕。Tim O'Reilly 有一段话:

锁定的出现,是因为有人能从你的服务中受益,而不是受控于你。

之所以我们会被锁定,一定是因为我们从这一过程中获得了好处。首先这意味着我们利用了这一服务的全部价值;另外作为众多消费者中的一员,我们还可能拥有超出认知的更多好处。服务商为了能够持续提供我们从中受益的能力,也必须与时俱进升级换代,以此来保障收入。O'Reilly 指出,供应商的控制能力其实是小于客户认知的。服务商的主要任务就是根据自身对客户需求的认识,构建系统以期最大程度上满足市场需要。它们的动力就是市场上的用户的价值。

用户权益的另外一个重要来源就是竞争。强如 AWS,仍然有为数众多的竞争对手。当竞争者看到市场空档,要提供不同的方案时,也必须同时满足市场上的基础需求。这个就是我们在各个供应商的方案中都能看到通用功能的原因。这都是利益驱动的。我们当然要善加利用。不可否认的是,在供应商之间迁移是要有投入的,但是如果相对于从自建基础设施首次迁入公有云的过程来说,这种投入规模要小很多。一旦进入了公有云,同时也就具备了更好的敏捷性。

我经常看到有公司为了避免供应商锁定做出种种匪夷所思的怪事,然而用这个理由来推进多云方案,则是让我感觉最震撼的一件了。原本应该用于建设差异化业务的成本,却投入到趋同的建设中去。

这种行为的产生,有很多原因。正如 Beau 指出的,我们常常高估自身能力,又经常对成本估计不足。是做还是买?两种方案很难对照。这有点像宜家效应,消费者总是给自己参与建设的产品以过高的估价。另外当前的趋势是,企业重心从 IT 改为业务,尤其是产品思维对企业转型产生了巨大影响,这种奇怪的方案,可能也算是是 IT 部门尝试保持控制权的一种尝试。

云无关特性的重要程度还不足影响关键决策。如果以此思维作为起点,系统设计就会受到严重的限制,同时也无法完全享有云带来的好处——搞得好像你只是租了新的主机。Pivotal Cloud Foundry 和 RedHat OpenShift 这样的平台提供了能在主流私有云和公有云上运行的能力,这种做法实际上是做了一个虚拟层,把每个受支持的云平台的差异能力都进行了抽象。这种抽象在远离锁定的同时,也远离了价值。避免锁定的意思就是,避免全面使用已经购买的服务。这种抽象如果把一种差异化能力抽象成了一种通用接口,很难相信在保持云无关性的同事还能从供应商的差异功能上受益;如果没有抽象成通用接口,那这种平台的存在价值以及他如何做成多云就难于澄清了。

抛开 PCF 或者红帽子不谈,但是主要云供应商一直在对自家平台进行解绑,并且用一种更加民主的方式进行重新绑定,这种举措让多云平台的价值被大幅削弱。在 Kubernetes 前期以及容器时代,也就是 PaaS 的全盛时期,多云还是一个好故事。然而随着容器、Kubernetes 尤其是像 GKE 以及 GKE On-Prem(以及类似的其他厂商)的大行其道,多云故事越来越难吸引听众了。有趣的是,最新发布的 Knative 是与 Pivotal 和 RedHat 紧密合作建立的,似乎是在利用 Kubernetes 的势头,在企业拥抱 Serverless 的盛宴上分一杯羹。

但是有些人会把朵云平台作为一种服务,这其中存在一些问题。这种过程通过一个运维团队来完成多云操作的——也有可能是和供应商直接签订了服务协议。

多云部署需要对多个平台的了解。PaaS 可能可以把开发者从中解放出来,但是责任并没有消失,只是转移到了运维的身上。我们还没有谈到安全以及合规方面的事务。对某些还在观望公有云的企业来说这些因素都是负面影响。只有绕过华丽的市场词令,才能看清多云方案的实际情况。

现在已经没有多少空间留给自建的 PaaS 平台了,只是因为跟业务无关。我认为 Pivotal 和 RedHat 的收入很大程度上就是来自于提供服务。这些平台的价值就在于为专业服务牵线搭桥

总的说来,非战略系统的厂商锁定所造成的风险并不高。例如用于存储数据的数据库,不管是 Amazon、google 还是 Azure 的,技术上有一些区别,但是归根到底只是用来存储和读取数据的。在这些数据库中进行迁移一定要投入成本,但是客户一定是为了获得好处才需要进行迁移的,这个好处一定是远大于迁移成本。但是运行重要业务逻辑、触及公司关键的核心系统还是应该避免供应商锁定的。正如 Joel Spolsky 所说:“不管怎样,关键业务功能还是要自建的。选择你的核心业务能力和业务目标,在内部完成。”

价格

价格可能是多云的理由中最弱的一个。实际情况是,随着商品化程度的不断深入,所有的供应商都在压低价格。在供应商之间的价格比较,最终都是某个方面花费更多,某个方面花费较少的选择。多云之间的价格套利只是部分人的臆想。一方面,这种设想很不现实;另一方面,这种做法会失去用量折扣。我曾经在 AWS 和 GCP 的对比中说过我的经验,不同的供应商侧重点不同,做好这一选择才能真正的节约成本。

Beau 也说过,云厂商利用锁定优势坐地起价这种事情很不合理。首先,这不是规模经济的运作方式。初次上云之后,在云供应商之间的迁移成本会大大降低,所以杀熟并不是云服务商的最佳选择。他们的首要任务是获得最大市场份额,竞争环境强制降低 IaaS 的成本。因为竞争环境和获取市场份额的需要,定价会趋于一致。云服务商必须将技术栈向 SaaS 以及增值服务方向发展,才能获取更好的效益。

另外多数公有云提供了批量折扣。例如 AWS 的 Reserved Instance 有高达 75% 的 EC2 折扣,其他的 AWS 服务也有批量折扣,并且 Amazone 提供合并账单选项,可以合并组织内成员的账单,从而尽可能的提供合理的折扣。GCP 则提供了持续使用折扣,在计费月份的大部分时间内运行 GCE 应用则会自动应用此折扣。它们还提供了一个称作 Inferred Instance 的功能,将部分实例打包成为单个实例,防止实例替换时丢失折扣。GCP 也有和 AWS Reserved Instance 类似的 Committed Use Discounts。如果资源分散在多个不同的云上,可能就很难获得这些优惠了。

多云的适用场景

我再次声明,多云方案对多数组织来说,除了分神别无用处。如果你的公司刚刚开始涉及云端,这种方案不但毫无助益,还会让你无法看清真正的重点;同时会拖慢进展速度,并埋下不安的种子。

一些公司试图同时在多个云服务上进行建设,避免把鸡蛋装在同一个篮子里。我认为这会适得其反,实际上会降低生产力,提高失败的风险。对于较小的组织,应该选择供应商并集中精力进行生产。尽可能利用托管服务,不要使用多云作为理由。对于大型公司而言,多云方案并不是不合理的,但应该通过受控实验来完成。这是云的优势之一,我们可以进行有限的投资和实验而无需大量的前期支出,只要注意一下多云 PaaS 和服务合同即可。

但是这也不意味着多云方案就完全无用了。真实世界从来没有这么干脆。对于具有多个业务机构的大型企业来说。多云的存在有其必然性。不同的产品团队可能有不同的成熟度、IT 基础设施,另外还有合并以及收购产生的结果。多云方案在这里存在一点存在价值就是——各有所好。这其实就回到上面的话题,云供应商的服务栈升级,不断提高的差异化水平和对应的增值服务会让多云方案更有意义。还有一种可能的情况就是数据主权。但是随着分区和 AZ 的普遍存在,这种情况会越来越少。但是 Google Cloud Spanner 这样的“全球可用”服务会放弃 AZ 粒度,因此可能会影响到 GDPR 之类的法规。对于拥有主机托管设施的企业来说,混合云最终会成为现实的解决方案,虽然这种方案更加复杂更加难于向多云方向迁移。

对于还处在试水阶段的用户,多云策略不应该处于备选方案的前列。而且绝对不应该是一个指导目标,也不应该是个影响业务方面核心决策或策略的选项。多云方案有一定的适用条件,除去这些特例之外,只是平白无故的消费掉了宝贵的注意力而已。

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts