我想,世上没有人会不知道“云”这个词。我指的并不是天空中的那些白色物体。问题在于,在技术领域,很少有人能真正理解这个词的真正含义。在本文中,我不会对这个领域进行更深入的探讨,而是将重点放在对云原生应用和传统企业应用的对比上。
所以,在我们开始之前,我们要先了解一下这两种观念,以便我们能够更好地了解我们到底在比较什么。
这种类型的应用是老式的单体应用。它们通常采用瀑布方法(或者是一些缓慢的 Scrum 尝试),并且与首次部署时所用到的软硬件密切联系在一起。它们对操作系统有着很大的依赖性,并且要求物理资源不易扩充,而且即使工程师在某些部分使用了微服务,它们也仍然是以单体应用的方式进行部署。这些应用的进一步开发往往会花费更多的时间和更多的成本。也会花费更多的时间在可扩展性上,并且无法根据“按需”来更改。在 10~20 年前,云服务几乎不存在的时候,它们的普及率是相当高的,但我们也要记得,那时候 IT 产业还很小,资金只集中在相当少的关键参与者。这个事实的重要性将在本文稍后加以论述。
这个术语描述了一种应用,它依赖于云计算的很多优势,并且建立在微服务架构之上。重要的是要记住,云原生开发的应用是一个描述它们如何创建、维护和优化的想法。这并不意味着这些数据会被存储到云端中,而是可以在本地存储,但是依然可以从云原生方式中获益。这对于监管非常严格的市场尤为重要。
这些类型的应用程序也受益于 CI(持续集成)和 CD(持续部署)解决方案。
更让我们感到困惑的是,还有一种基于云的应用的概念。它们通常是描述迁移到云端的传统企业应用。它仍然代表了其前辈的许多不足之处。在本文中,我们不会对此进行太多的讨论,但是我只想提及一下,以便你对此有一个全面的认识。
传统企业应用的缺点
在本文中,我(可能你已经看出来了)正在推广云原生应用的想法,因此我将重点放在老式方法的缺点上。这并不代表没有优点,只是我觉得没有必要去描述这些优点。
传统企业应用最大的缺点就是单体环境,这就要求采用瀑布方法来解决任何新的特性或者已存在的特性的改变。它们的测试环境往往与生产环境相差甚远,这就增加了在部署之后发生重大问题的可能性。
因为传统企业应用对硬件和操作系统的依赖性很强,因此很难对其进行移植或扩充。这将导致大量的开发成本和宝贵的时间。此外,在扩充方面,我们要注意的是,传统的企业应用都是建立在预期流量基础上的。所以,如果超出了这些假定的极限,那么就无法处理所有的峰值(我们也要记住,这些应用是在互联网规模相当小的时候被创造出来的)。
它们的备份和恢复过程通常是很有限的,而且很难实施。
正如你所看到的,这种方法有相当严重的后果,对业务造成了很严重的影响。就像我之前提到过的,在 20 年前,由于那时候的行业和现在完全不同,所以这些因素都没有太大的影响。现在,推出市场的时机非常关键,还有可维护性和团队士气。如果我们采用这样的方法,那么我们就很难在市场上保持竞争力,并且无法满足客户所要求的质量和标准。
受益于云原生方法的一个最有趣的特点是,即使是旧的单体应用都可以通过 Docker 的方式迁移到云端。这样,Docker(或者其他工具)在让我们利用云计算的网络解决方案的时候,给我们一个传统的环境。这也让我们有机会把传统的架构逐渐转变成像微服务这样的云原生架构,再逐步淘汰掉传统的解决方案。
我决定从它的好处开始说起,因为这会让那些停仍留在 IT 远古时代的人们看到希望。
但是,回归到它的好处——它可以把一个应用从一个操作系统或者一个硬件中完全抽象出来,这就为我们提供了无限的可能。这让工程师可以集中精力在自己的实际工作上,而不用去考虑那些由不得他们决定的软硬件的依赖性。新的抽象层让所有事情都变得简单了,而且,你猜怎么着,更快。
当涉及硬件能力时,云原生方法赋予了工程师完全的控制权,并且可以根据需要进行扩大和缩小规模。它既简单又有效,使你的客户无论在什么样的流量都能从你的软件中获益。而另一方面,你的企业可以更好地控制价格昂贵的资源的成本,确保你只支付你实际需要的费用。这也让我们能够更好地控制部署流程,降低风险和重要问题的数量。
在这种类型的组织中,团队合作本身也是非常容易的。团队可以很容易地被分成较小的组织,分别负责特定的服务或领域(如安全)。利用合适的工作,使他们可以彼此协作,即使他们不在同一个部分工作。除了这些,他们还可以通过持续集成中获益,因为持续集成能够保持对代码质量的关注,确保任何被部署的东西都能保持一定的质量和安全水平。
最后,但并非不重要的是,人们还必须看一下可用的备份和恢复选项。这使得整个环境对他们的客户来说更加安全和有效,从而能够最大限度降低停机时间。而且我们都知道,每次事故都要花掉一大笔钱(对于大型科技公司来说,你可以很容易地看出股价和事故之间的相关性)。
嗯,我猜你也许会说,这太显而易见了。老实说,我实在不愿意说某种解决方案是最好的方法。但是,在这个例子中,我实在难以为传统企业应用方法提供任何理由。每次我要做出技术决策的时候,我都会优先考虑业务方面的问题。在云原生应用中,业务方面的好处非常多,很难争论。速度,开放的协作环境,安全,可维护性,可扩展性和安全性。所有这些因素似乎都在高呼“选我!”。
最后一个想法是——我极力建议你在做出技术决策的时候,把业务因素考虑进去。