在 Google Cloud 中,我们经常把“云原生架构”这一术语作为迁移或构建在 Google Cloud Platform (GCP)上的应用程序所期望的最终目标。但云原生究竟是什么意思呢?更重要的是,你如何着手设计这样一个系统?
从高层次来看,与传统的本地基础设施相比, 云原生架构意味着要适应云提供的许多新的可能性,但架构约束有着很大的不同。以下是我们作为软件架构师应该考虑到的高层次元素:
虽然功能方面不会发生太大变化,但云提供(有时需要)的用来满足非功能性需求的方式差别很大,对架构的约束也有很大的差别。如果架构师未能使他们的方法适应这些不同的约束,他们设计的系统通常就会脆弱而昂贵,并且难以维护。另一方面,架构良好的云原生系统应该在很大程度上是自修复、经济高效的,并且可以通过持续集成 / 持续交付(CI / CD)轻松进行更新和维护。
好消息是,构成云的服务器、磁盘和网络与传统基础设施相同。这意味着几乎所有优秀的架构设计原则仍然适用于云原生架构。但是在云中时,关于这种结构如何执行的一些基本假设会发生变化。例如,在传统环境中配置替换服务器可能需要数周时间,而在云环境中则需要几秒钟,应用程序架构要把这点考虑在内。
在本文中,我们列出了云原生架构的五个原则,这些原则将有助于确保设计充分利用云,同时避免将旧的方法引入新平台的陷阱。
云架构(即云原生架构)的构建原则,侧重于如何针对云的独特功能优化系统架构。传统的架构倾向于为固定的、高成本的基础设施进行优化,需要大量手动的修改。因此,传统架构侧重于相对固定且数量较少的组件的弹性和性能。然而,在云中,这样一个固定的基础设施没有多大意义,因为云是根据使用量进行收费的(这样可以通过减少空间占用来节省资金),而且自动化也更容易(自动放大和缩小要容易得多)。因此,云原生架构的重点是通过横向扩展、分布式处理,以及自动更换故障组件来实现弹性和扩展。
自动化一直是软件系统的最佳实践,但云技术使得 基础 设施 以及位于其上的组件 自动化 变得前所未有的简单。尽管前期投资通常会更高,但从中期来看,无论从投入的角度,还是在系统的弹性和性能方面,几乎总能获得回报。自动化流程可以比人更快地修复、扩展和部署系统。正如我们稍后会讨论的那样,云上的架构并不是一次性的,自动化也不例外,因为会找到新的系统操作方法,所以将发现新的东西可以自动化。
自动化云原生系统的一些常见领域是:
存储的“状态”,可以是用户的数据(例如,用户购物车中的条目,或他们的员工编号)或者是系统的状态(例如,作业中运行的实例数量,运行中的代码版本),这是构建分布式、云原生架构最难的方面。因此,设计系统时应该有意地去了解何时以及如何存储状态,并尽可能 设计无状态的组件 。
无状态的组件可以很容易实现以下功能:
云不仅仅是基础设施,大多数的云提供商都提供丰富的托管服务,提供各种各样的功能,让我们轻松管理后端软件或基础设施。但是,许多组织对利用这些服务持谨慎态度,因为他们担心被某个供应商给“绑定”。这是一个合理的担心,但托管服务通常可以极大地节省组织的时间和运营开销。
广义上讲,从资金和技能两方面来看,是否采用托管服务取决于可移植性与运营开销。粗略地说,今天可能会考虑的托管服务分为三大类:
但是,实践经验表明,大多数云原生架构都偏爱托管服务,但必须让迁移的潜在风险,低于云提供商大规模管理服务所带来的时间、精力和运营风险方面的巨大节省。
传统的体系架构非常重视周边安全,粗略地说,它建立了一个强化的网络边界,内部有“可信赖的东西”,外部有“不受信任的东西”。不幸的是,这种方法总是容易受到内部的攻击,以及 鱼叉式网络钓鱼 (spear phishing)之类的外部威胁。此外,提供灵活的移动办公的压力越来越大,进一步破坏了网络边界。
云原生架构起源于面向互联网的服务,因此始终需要处理外部的攻击。因此,它们通过在每个组件之间应用身份验证,并通过最小化这些组件之间的信任(即使它们是“内部的”)来 实施深度防御 。因此, 没有 “ 内部 ” 和 “ 外部 ”之分 。
云原生架构应该将此想法扩展到身份验证之外,包括速率限制和脚本注入等内容。设计中的每个组件都应该设法保护自己免受其他组件的影响。这不仅使体系架构具有很强的弹性,而且使产生的服务更容易部署在云环境中,在云环境中,服务与其用户之间可能没有可信任的网络。
云原生系统的核心特征之一是它总是在进化,这同样适用于架构。作为一个云原生架构师,随着组织需求的变化、IT 系统环境的变化以及云提供商自身的能力的变化,您应该始终寻求优化、简化和改进系统的架构。尽管这无疑需要不断的投资,但过去的教训是显而易见的:要发展、增长和响应,IT 系统需要生存、呼吸和改变。过时的、僵化的 IT 系统会迅速使组织陷入停顿,无法应对新的威胁和机遇。
在动物界,生存有利于那些适应环境的个体。这不是从“坏”到“最佳”或从“原始”到“进化”的线性旅程,而是所有事物都在不断变化。随着环境的变化,对物种施加压力以进化和适应。同样,云原生架构并不能取代传统架构,但它们更适合于非常不同的云环境。云正日益成为我们大多数人工作的环境,许多物种都证明,不能发展和适应的都不是长期的选择。
上面描述的原则并不是创建云原生架构的神奇公式,但希望能为如何充分利用云提供强有力的指导。作为额外的一个好处,云架构的变化和调整给了我们以其他方式改进和调整的机会,并使它们能够更好地适应下一次环境的变化。改变可能是困难的,正如十几亿年的进化所展示的那样,不必是生存得最好的,只需要能够去适应。
原文链接: 5 principles for cloud-native architecture