阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

谷歌:云原生架构的 5 条原则

  • 2019-07-08
  • 本文字数:3515 字

    阅读完需:约 12 分钟

谷歌:云原生架构的5条原则

在 Google Cloud 中,我们经常把“云原生架构”这一术语作为迁移或构建在Google Cloud Platform(GCP)上的应用程序所期望的最终目标。但云原生究竟是什么意思呢?更重要的是,你如何着手设计这样一个系统?


从高层次来看,与传统的本地基础设施相比, 云原生架构意味着要适应云提供的许多新的可能性,但架构约束有着很大的不同。以下是我们作为软件架构师应该考虑到的高层次元素:


  • 系统的功能需求(它应该做什么,例如“以这种格式处理订单…”);

  • 非功能性要求(如“每分钟至少处理 200 个订单”);

  • 约束(超出变更范围的内容,例如“订单必须在我们现有的大型机系统上更新”)。


虽然功能方面不会发生太大变化,但云提供(有时需要)的用来满足非功能性需求的方式差别很大,对架构的约束也有很大的差别。如果架构师未能使他们的方法适应这些不同的约束,他们设计的系统通常就会脆弱而昂贵,并且难以维护。另一方面,架构良好的云原生系统应该在很大程度上是自修复、经济高效的,并且可以通过持续集成/持续交付(CI / CD)轻松进行更新和维护。


好消息是,构成云的服务器、磁盘和网络与传统基础设施相同。这意味着几乎所有优秀的架构设计原则仍然适用于云原生架构。但是在云中时,关于这种结构如何执行的一些基本假设会发生变化。例如,在传统环境中配置替换服务器可能需要数周时间,而在云环境中则需要几秒钟,应用程序架构要把这点考虑在内。


在本文中,我们列出了云原生架构的五个原则,这些原则将有助于确保设计充分利用云,同时避免将旧的方法引入新平台的陷阱。

云原生架构的原则

云架构(即云原生架构)的构建原则,侧重于如何针对云的独特功能优化系统架构。传统的架构倾向于为固定的、高成本的基础设施进行优化,需要大量手动的修改。因此,传统架构侧重于相对固定且数量较少的组件的弹性和性能。然而,在云中,这样一个固定的基础设施没有多大意义,因为云是根据使用量进行收费的(这样可以通过减少空间占用来节省资金),而且自动化也更容易(自动放大和缩小要容易得多)。因此,云原生架构的重点是通过横向扩展、分布式处理,以及自动更换故障组件来实现弹性和扩展。

原则 1:自动化设计

自动化一直是软件系统的最佳实践,但云技术使得基础设施以及位于其上的组件自动化变得前所未有的简单。尽管前期投资通常会更高,但从中期来看,无论从投入的角度,还是在系统的弹性和性能方面,几乎总能获得回报。自动化流程可以比人更快地修复、扩展和部署系统。正如我们稍后会讨论的那样,云上的架构并不是一次性的,自动化也不例外,因为会找到新的系统操作方法,所以将发现新的东西可以自动化。


自动化云原生系统的一些常见领域是:


  • 基础设施:使用Google Cloud Deployment ManagerTerraform之类的工具,自动创建基础设施并对其进行更新;

  • 持续集成/持续交付(CI/CD):使用Google Cloud BuildJenkinsSpinnaker等工具自动构建、测试和部署构成系统的软件包。不仅应该自动部署,还应该努力实现金丝雀测试和回滚等过程的自动化;

  • 伸缩性(Scale Up/Down):除非系统负载几乎从未发生变化,否则应该根据负载的增加自动扩展系统,并根据负载的持续下降进行收缩。通过扩展,可以确保服务仍然可用,并通过按比例收缩来降低成本。这对于大型应用程序(如公共网站)以及具有不规则负载的较小应用程序(例如在某些时段非常繁忙但在其他时间几乎不使用的内部应用程序)来说是很有意义的。对于有时几乎没有流量并且可以容忍一些初始延迟的应用程序,甚至应该考虑将其收缩为零(删除所有正在运行的实例,并在下次需要时重新启动应用程序);

  • 监控和自动恢复:应该从一开始就在云原生系统中纳入监控和日志记录。日志记录和监视的数据流可以很自然地用于监视系统的运行状况,除此之外还可以有许多用途。例如,它们可以对系统的使用和用户的行为(有多少人在使用系统,他们在使用什么部分,他们的平均延迟时间是多少等)提供有价值的见解。其次,它们可以通过汇总来衡量整个系统的健康状况(例如,磁盘又快满了,它的填写速度比平时快吗?磁盘使用量和服务占用之间的关系是什么?等等)。最后,它们是添加自动化理想的地方,当磁盘要填满时,可以自动调整磁盘大小以保持系统正常运行,而不仅仅只记录错误。

原则 2:善用状态

存储的“状态”,可以是用户的数据(例如,用户购物车中的条目,或他们的员工编号)或者是系统的状态(例如,作业中运行的实例数量,运行中的代码版本),这是构建分布式、云原生架构最难的方面。因此,设计系统时应该有意地去了解何时以及如何存储状态,并尽可能设计无状态的组件


无状态的组件可以很容易实现以下功能:


  • 伸缩:要扩展,只需添加更多的副本。要收缩,可以引导实例在完成当前任务后终止;

  • 修复:要“修复”一个失败的组件实例,只需尽可能优雅地终止它并启动一个替换;

  • 回滚:如果部署得不好,无状态的组件更容易回滚,因为可以终止它们并启动旧版本的实例;

  • 负载均衡:当组件处于无状态时,负载均衡要简单得多,因为任何实例都可以处理任何请求。有状态组件的负载均衡要困难得多,因为用户会话的状态通常驻留在实例上,这迫使该实例处理来自给定用户的所有请求。

原则 3:支持托管服务

云不仅仅是基础设施,大多数的云提供商都提供丰富的托管服务,提供各种各样的功能,让我们轻松管理后端软件或基础设施。但是,许多组织对利用这些服务持谨慎态度,因为他们担心被某个供应商给“绑定”。这是一个合理的担心,但托管服务通常可以极大地节省组织的时间和运营开销。


广义上讲,从资金和技能两方面来看,是否采用托管服务取决于可移植性与运营开销。粗略地说,今天可能会考虑的托管服务分为三大类:


  • 托管开源或开源兼容服务:托管开源(例如Cloud SQL)或提供开源兼容的接口(例如Cloud Bigtable)的服务。这应该是一个简单的选择,因为使用托管服务有很多好处,而且风险很小;

  • 节省高运营成本的托管服务:某些服务不能直接与开源兼容,或者没有直接的开源替代方案,但是比替代方案更容易使用,它们值得承担风险。例如,BigQuery因为易于操作而经常被组织所采用;

  • 其他情况:然后是困难的情况,没有容易的迁移途径可以离开服务,它提供了不太明显的运营效益。需要逐个分析这些问题,考虑到服务的战略意义、自己运行它的运营开销以及迁移所需的工作。


但是,实践经验表明,大多数云原生架构都偏爱托管服务,但必须让迁移的潜在风险,低于云提供商大规模管理服务所带来的时间、精力和运营风险方面的巨大节省。

原则 4:深入实践防御

传统的体系架构非常重视周边安全,粗略地说,它建立了一个强化的网络边界,内部有“可信赖的东西”,外部有“不受信任的东西”。不幸的是,这种方法总是容易受到内部的攻击,以及鱼叉式网络钓鱼(spear phishing)之类的外部威胁。此外,提供灵活的移动办公的压力越来越大,进一步破坏了网络边界。


云原生架构起源于面向互联网的服务,因此始终需要处理外部的攻击。因此,它们通过在每个组件之间应用身份验证,并通过最小化这些组件之间的信任(即使它们是“内部的”)来实施深度防御。因此,没有内部外部”之分


云原生架构应该将此想法扩展到身份验证之外,包括速率限制和脚本注入等内容。设计中的每个组件都应该设法保护自己免受其他组件的影响。这不仅使体系架构具有很强的弹性,而且使产生的服务更容易部署在云环境中,在云环境中,服务与其用户之间可能没有可信任的网络。

原则 5:架构不止

云原生系统的核心特征之一是它总是在进化,这同样适用于架构。作为一个云原生架构师,随着组织需求的变化、IT 系统环境的变化以及云提供商自身的能力的变化,您应该始终寻求优化、简化和改进系统的架构。尽管这无疑需要不断的投资,但过去的教训是显而易见的:要发展、增长和响应,IT 系统需要生存、呼吸和改变。过时的、僵化的 IT 系统会迅速使组织陷入停顿,无法应对新的威胁和机遇。

唯一不变的是变化

在动物界,生存有利于那些适应环境的个体。这不是从“坏”到“最佳”或从“原始”到“进化”的线性旅程,而是所有事物都在不断变化。随着环境的变化,对物种施加压力以进化和适应。同样,云原生架构并不能取代传统架构,但它们更适合于非常不同的云环境。云正日益成为我们大多数人工作的环境,许多物种都证明,不能发展和适应的都不是长期的选择。


上面描述的原则并不是创建云原生架构的神奇公式,但希望能为如何充分利用云提供强有力的指导。作为额外的一个好处,云架构的变化和调整给了我们以其他方式改进和调整的机会,并使它们能够更好地适应下一次环境的变化。改变可能是困难的,正如十几亿年的进化所展示的那样,不必是生存得最好的,只需要能够去适应。


原文链接5 principles for cloud-native architecture


2019-07-08 15:4124910
用户头像

发布了 43 篇内容, 共 33.3 次阅读, 收获喜欢 136 次。

关注

评论 1 条评论

发布
用户头像
这篇文章的观点很有参考价值啊~推荐给关注云原生领域的架构师
2019-07-09 09:21
回复
没有更多了
发现更多内容

如何使用物联网低代码平台进行事件管理?

AIRIOT

物联网 低代码开发

飞腾与百度发布云智一体机,金融领域AI场景成功落地“江苏银行”

百度开发者中心

ABAP 程序间传递数据

桥下本有油菜花

【大厂面试题精选】UDP 和 TCP 核心知识总结

C++后台开发

面试题 udp TCP/IP 校招 大厂面经

ebook下载 | 灵雀云发布《 企业高管IT战略指南——为何选择容器与Kubernetes》

York

Kubernetes 容器 云原生 系统架构 技术选型

敏捷需求管理篇|如何从0-1写好一个用户故事

云智慧AIOps社区

需求管理 编程效率 用户故事 敏捷管理 需求迭代

大数据相关名称解释看这里!简单通俗理解大数据!

行云管家

云计算 大数据 数据安全

中国信通院、清华大学、腾讯安全,云原生安全产学研用强强联合!

腾讯安全云鼎实验室

云原生 云原生安全

感谢有你!Apache DolphinScheduler 项目 GitHub star 突破 8k

Apache DolphinScheduler

Apache 大数据 开源 DolphinScheduler workflow

Java—线程池

武师叔

6月月更

30倍加速,3毫秒极速识别,人、车、OCR等9大识别任务一网打尽

百度开发者中心

焱融科技加入多家行业协会与产业联盟,加速产业互联生态跃迁

焱融科技

易观分析《机器学习平台市场研究,2022》研究报告正式启动

易观分析

机器学习 AI软件

研发效能管理如何建立闭环?

思码逸研发效能

研发效能

JDBC连接MySQL数据库,访问数据库信息完成登录功能——保姆级详细教程(附所有java和jsp源代码)

写代码两年半

数据库 JDBC Java EE 6月月更

架构实战营6期,毕业总结

本人法海

「架构实战营」

通过DAO的现状,看Web3最具影响力的基础设施M-DAO

西柚子

企业级Web应用系统权限设计

BigBang!

权限 权限架构 权限设计

集成测试时 MockMvc 无法注入

程序员小航

Java 后端 单元测试

虎符交易所Hoo推出挂单活动 未成交订单最高可得 200%APY

区块链前沿News

Hoo 虎符交易所

【堡垒机】常见的堡垒机部署模式有哪些?

行云管家

等保 堡垒机 等保2.0

在线办公时代,企业如何选择一款合适的文档管理系统

小炮

化工产业业态数字升级案例,看摩贝如何快速打通全场景互融互通?

数商云

数字化转型 企业数字化

对抗软件复杂度的战争

阿里技术

软件架构 复杂度

模块九:毕业设计

本人法海

「架构实战营」

OpenHarmony开源开发者成长计划 | 知识赋能第六期预告—从零上手OpenHarmony智能家居项目

OpenHarmony开发者

OpenHarmony

测试基础之:面试的信心来源于过硬的基础

甜甜的白桃

软件测试 核心竞争力 测试开发 功能测试 6月月更

阻塞与非阻塞客户端

Damon

微服务 6月月更

华为云云原生2.0全景图再升级,一切皆服务共创新价值

Geek_2d6073

经期管理APP的开发解决方案

开源直播系统源码

软件开发

我为 Netty 贡献源码 | 且看 Netty 如何应对 TCP 连接的正常关闭,异常关闭,半关闭场景

bin的技术小屋

Java 网络编程 Netty TCP/IP 6月月更

谷歌:云原生架构的5条原则_云原生_Tom Grey_InfoQ精选文章