KCNA 1:云原生架构
1. 概述
随着云计算的兴起,开发、部署和设计应用程序的需求和可能性发生了显著变化。
云提供商提供各种随需应变的服务,从简单(虚拟)服务器、网络、存储、数据库等等开始。 部署和管理这些服务非常方便,无论是交互式的,还是通过使用应用程序编程接口(api)。
在本章中,您将学习现代应用程序架构的原则,通常被称为云本地架构。 我们将发现是什么使这些应用程序原生于云系统,以及它们与传统方法的区别。
2. 学习目标
在本章结束时,你应该能够:
讨论云本地架构的特征。
解释自动伸缩和无服务器模式的好处。
理解在云本地环境中开放标准和社区项目的重要性。
3. Cloud Native Architecture Fundamentals
云本地架构的核心思想是通过结合使用文化、技术和架构设计模式来优化您的软件,以实现成本效益、可靠性和更快的上市时间。
“云原生”一词可以在各种定义中找到,其中一些侧重于技术,而另一些可能侧重于文化方面。
云本地计算基金会定义如下:
“云本地技术使组织能够在现代动态环境(如公共、私有和混合云)中构建和运行可伸缩的应用程序。 容器、服务网格、微服务、不可变基础设施和声明性api都是这种方法的例证。
这些技术支持具有弹性、可管理和可观察性的松散耦合系统。 结合强大的自动化,它们允许工程师以最小的工作量频繁地、可预测地进行高影响的更改。 […]”
传统或遗留应用程序通常在设计时考虑了整体方法,这意味着它们是自包含的,包括完成一项任务所需的所有功能和组件。 一个单一的应用程序通常有一个单一的代码库,并作为一个可以在服务器上运行的单一二进制文件提供。
如果您考虑一个在线商店的电子商务软件,那么一个单一的应用程序将包括来自图形用户界面、列出产品、购物车、结帐、处理订单等等的所有功能。
虽然以这种格式开发和部署应用程序非常容易,但在管理复杂性、跨多个团队扩展开发、快速实现更改以及在应用程序面临大量负载时有效地扩展应用程序等方面也同样困难。
云本地架构可以为日益复杂的应用程序和用户日益增长的需求提供解决方案。 其基本思想是将应用程序分解为更小的部分,从而使它们更易于管理。 不是在一个应用程序中提供所有功能,而是有多个解耦的应用程序在网络中彼此通信。 如果我们坚持之前的例子,你可以为你的用户界面,你的结帐和其他一切有一个应用程序。 这些小型的、独立的、具有明确定义的功能范围的应用程序通常被称为微服务。
4. 云本地架构的特性
自动化程度高 为了管理您的云本地应用程序的所有移动部分,从开发到部署的每个步骤都建议自动化。 这可以通过使用现代自动化工具和持续集成/持续交付(CI/CD)管道来实现(我们将在稍后的课程中更多地讨论管道,但现在, 请知道,CI/CD管道是一个概念,它可以用于交付软件的新版本时所需要的多个步骤),这些步骤由版本控制系统(如git)支持。 以最小的人力参与构建、测试和部署应用程序以及基础设施,允许对生产进行快速、频繁和增量的更改。 如果必须重建整个系统,可靠的自动化系统还允许更容易的灾难恢复。
自我疗愈 应用程序和基础设施不时会出现故障。 这是预料之中的,因此云本地应用程序框架和基础设施组件包括健康检查,这些检查有助于从内部监视应用程序,并在必要时自动重新启动它们。 此外,由于应用程序已经被划分了,有可能只有部分应用程序停止工作或变慢,而其他部分不会。
可伸缩的 扩展应用程序描述的是在处理更多负载的同时仍然提供愉快的用户体验的过程。 一种扩展方法是启动同一个应用程序的多个副本,并在它们之间分发负载。 基于应用程序指标(如CPU或内存)自动化此行为还可以确保服务的可用性和性能。
效率(成本) 就像在高流量情况下扩展应用程序一样,在流量较低时,缩小应用程序和云提供商的基于使用的定价模型可以节省成本。 为了优化基础设施的使用,像Kubernetes这样的编排系统可以帮助更高效、更密集地放置应用程序。
易于维护 使用Microservices可以将应用程序分解成更小的部分,使它们更具可移植性、更容易测试和跨多个团队分发。
缺省安全 云环境通常在多个客户或团队之间共享,这需要不同的安全模型。 在过去,许多系统被划分在不同的安全区域,拒绝来自不同网络或人的访问。 一旦你进入一个区域,你可以进入里面的每个系统。 像零信任计算这样的模式通过要求每个用户和进程进行身份验证来缓解这种情况。
虽然这些模式和技术在云中运行时提供了充分的优势,但应用于本地系统时也可以提供很多好处。 最后但并非最不重要的是,如果您将应用程序和基础设施迁移到云,它们允许更平稳的转换。
5. Autoscaling
6. Serverless
7. 开放标准
按照这种方法,其他系统(如Prometheus或OpenTelemetry)在这个生态系统中发展壮大,并为监视和观测提供了额外的标准。
8. Cloud Native Roles & Site Reliability Engineering
当然,我们在过去二十年中看到的技术和文化变革导致了任务和工作描述的调整。之前的职位包括系统、网络或数据库管理员、软件开发人员或测试经理。 云计算领域的工作更难以描述,而且转换也更顺利,因为职责通常由来自不同领域、拥有不同技能的多个人员共同承担。
云计算架构师(Cloud Architect)
负责采用云技术,设计应用程序环境和基础设施,重点关注安全性、可伸缩性和部署机制。DevOps工程师
通常被描述为开发人员和管理员的简单组合,但这样做并不公平。DevOps工程师使用工具和流程来平衡软件开发和操作。从在整个部署生命周期中编写、构建和测试软件的方法开始。安全工程师(Security Engineer)
也许这是最容易理解的角色。尽管如此,安全工程师的角色已经发生了重大变化。云技术创造了新的攻击载体,如今,这个角色必须更具包容性,并成为团队的一个组成部分。DevSecOps工程师
为了使安全成为现代IT环境中不可或缺的一部分,DevSecOps工程师将前两者的角色结合起来。这个角色通常用于在更传统的开发团队和安全团队之间建立桥梁。数据工程师(Data Engineer)
数据工程师面临的挑战是收集、存储和分析正在或可能在大型系统中收集的大量数据。这包括提供和管理专门的基础设施,以及使用这些数据。开发人员(Full-Stack Developer)
精通前端和后端开发以及基础设施的全才。
9. 社区和治理
10. 额外的资源
了解更多关于…… 原生云架构
良好的框架
Microservices
Serverless
网站可靠性工程
✈推荐阅读:
最后更新于