前言俯瞰:什么是云原生?
目前,每个 IT 资源或产品都作为服务提供。而且伴随云计算的滚滚浪潮,云原生(CloudNative)的概念应运而生,云原生很火,火得一塌糊涂,都0202年了,如果还不懂云原生,那真的out了。因此,云原生软件开发成为每个企业的关键要求,无论其规模和性质如何。在加入云计算潮流之前,了解什么是云原生架构以及如何为云原生应用程序需求设计正确的架构非常重要。
云原生架构是一种创新的软件开发方法,专为充分利用云计算模型而设计。它使组织能够使用微服务架构将应用程序构建为松散耦合的服务,并在动态编排的平台上运行它们。因此,基于云原生应用程序架构构建的应用程序是可靠的,可提供规模和性能,并缩短上市时间。
有人会说,云原生就是微服务,我觉得是不对的。云原生和微服务是两个不同维度的东西。 云原生更侧重应用程序的运行环境, 它是以k8s和容器为基础的云环境。“云原生计算基金会”致力于打造一整套工具来帮助应用程序从开发,测试,运行以及部署到云环境。
微服务是应用程序的软件架构,可以是单体式和微服务式。 微服务是基于分布式计算的。 你的应用程序即使不采用微服务架构也可以是云原生的,例如分布式的,但效果没有微服务好。 如果是单体式的,云原生就基本发挥不出什么优势。 另外微服务的程序也可以不是云原生的。它们虽然是两个不同的东西,但云原生和微服务是天生良配,相得益彰,相辅相成。 而且很多云原生的工具都是针对微服务架构设计的。
当然,更合适的方式是可以说现代应用程序的趋势就是"微服务+云原生"。因为云原生的几大特征就是:容器化封装管理、服务编排、微服务架构、持续交付、DevOps。
在当今瞬息万变的大数据信息世界中,云原生架构不再是可选的,而是必需的。变化是云中唯一不变的东西,这意味着您的软件开发环境应该足够灵活,以便在不干扰业务运营的情况下快速适应新技术和方法。云原生架构为使用正确的工具、技术和流程构建应用程序提供了正确的环境。充分利用云革命的关键是为软件开发需求设计正确的云架构。建议在正确的领域实施正确的自动化,充分利用托管服务,整合 DevOps 最佳实践,并应用最佳的云原生应用程序架构模式。
后起之秀:云原生
日薄西山:传统的软件开发模型?
传统的软件开发环境依赖于由单体架构驱动的所谓“瀑布”模型,其中软件是按顺序开发的。
1、设计师准备产品设计以及相关文件。
2、开发人员编写代码并将其发送给测试部门。
3、测试团队运行不同类型的测试来识别错误并衡量云原生应用程序的性能。
4、发现错误时,会将代码发送回开发人员。
5、代码成功通过所有测试后,将部署到测试生产环境并部署到实时环境。
如果需要更新代码或添加/删除功能,则必须重新完成整个过程。当多个团队在同一个项目上工作时,相互协调代码更改是一个很大的挑战。它还限制他们使用单一的编程语言。此外,部署大型软件项目需要建立庞大的基础架构以及广泛的功能测试机制。整个过程效率低下且耗时。
引入了微服务架构来解决大多数这些挑战。微服务架构是一种面向服务的架构,其中应用程序构建为松散耦合的独立服务,可以通过 API 相互通信。它使开发人员能够处理不同的服务并独立使用不同的语言。借助充当版本控制系统的中央存储库,组织能够同时处理代码的不同部分并更新特定功能,而不会干扰软件或导致应用程序停机。此外,实施自动化后,企业可以轻松、频繁地进行具有重大影响的更改,而无需付出多少努力。
横空出世:云原生简介
在微服务架构基础上改进增强的云原生应用程序利用高度可扩展、灵活和分布式的云特性,在持续交付环境中生产以客户为中心的软件产品。云原生架构的显着特点是它允许您抽象基础架构的所有层,例如数据库、网络、服务器、操作系统、安全性等,能够使用脚本独立地自动化和管理每一层。同时,可以使用代码立即启动所需的基础架构。因此,开发人员可以专注于向软件添加功能和编排基础架构,而不必担心平台、操作系统或运行时环境。
纵横驰骋:三大技术基石
1:基础设施即代码
Infrastructure As Code,是指把创建基础设施(包括服务器和网络环境)的命令像应用程序一样储存在源码库中,并进行版本管理。这样创建基础设施的过程就变成了部署软件的过程。它的最大的好处就是可重复性。以前的方法是用人工敲入命令来创建运行环境,出了问题就在原来的基础之上进行修修补补,一旦需要把整个环境重新建立,很难保证与原来的一样。 当使用基础设施即代码之后,再也没有了这个担心。
2:不可变基础设施
Immutable Infrastructure,它是基础设施即代码的升级版。有了基础设施即代码之后,随时都可以通过运行软件再构建出一个一模一样的服务器和其他需要的设备,并且还能预装应用程序,创建的时间还是秒级的。这时当服务器出现问题时,就没有必要去花时间查找原因了并修复了,而是直接把服务器销毁重新创建一个新的。因此这时的基础设施是不可变的,只有创建和删除,而没有修改操作。这彻底改变了运维的方式。
3:声明式API
Declarative APIs:声明式API也是基础设施即代码的升级版。最开始时,当用软件定义基础设施时是用的过程式描述,也就是通过运行一系列的命令来创建运行环境。后来发现更好的办法是描述最终运行环境的状态,而由系统来决定如何来创建这个环境。例如,你的描述就变成“创建一个有三个Nginx的集群”,而不是把创建Nginx的命令运行三次组成一个集群。这样的好处是当运行环境与描述不符合时,系统能检测到差异,并自动修复,这样系统就有了自动容错的功能。
如日中天:云原生的优点
1:加速软件开发周期
云原生应用程序补充了基于 DevOps 的持续交付环境,并在整个产品生命周期中嵌入了自动化,从而为桌面带来速度和质量。跨职能团队由来自设计、开发、测试、运营和业务的成员组成,通过SDLC无缝协作和协同工作。通过开发部分的自动化CI/CD 管道和运营部分的基于 IaC 的基础设施协同工作,可以更好地控制整个过程,使整个系统快速、高效且无错误。整个环境也保持透明度。所有这些元素都显着加快了软件开发生命周期。
软件开发生命周期 (SDLC) 是指软件产品开发中涉及的各个阶段。典型的 SDLC 包括 7 个不同的阶段。
1、需求收集/计划阶段:收集有关当前问题、业务需求、客户请求等的信息。
2、分析阶段:定义原型系统要求、现有原型的市场研究、针对提议的原型分析客户需求等。
3、设计阶段:准备产品设计、软件需求规范文档、编码指南、技术栈、框架等。
4、开发阶段:编写代码以根据规范和指南文档构建产品
5、测试阶段:测试代码的错误/错误,并根据 SRS 文档评估质量。
6、部署阶段:基础设施配置、软件部署到生产环境
7、运营和维护阶段:产品维护、处理客户问题、根据指标监控性能等。
2:更快的上市时间
速度和服务质量是当今快速发展的 IT 世界中的两个重要要求。由 DevOps 实践增强的云原生应用程序架构可帮助轻松构建和自动化持续交付管道,从而更快、更好地交付软件。IaC 工具使按需自动配置基础设施成为可能,同时允许随时随地扩展或拆除基础设施。通过简化 IT 管理和更好地控制整个产品生命周期,SDLC 显着加快,使组织能够更快地进入市场。DevOps 专注于以客户为中心的方法,团队负责整个产品生命周期。因此,更新和后续版本也变得更快更好。开发时间缩短,生产过剩,过度工程和技术债务也可以降低总体开发成本。同样,提高生产力也会增加收入。
3:高可用性与弹性
现代 IT 系统不允许停机。如果产品经常停机,那就是大问题。通过将云原生架构与微服务和 Kubernetes 相结合,可以构建可自我修复的弹性和容错系统。在停机期间,应用程序仍然可用,因为可以简单地隔离故障系统并通过自动启动其他系统来运行应用程序。因此,可以实现更高的可用性、改进的客户体验和正常运行时间。
4:更低的成本
云原生应用程序架构带有按使用付费的模式,这意味着所涉及的组织只需为使用的资源付费,同时从规模经济中受益匪浅。随着资本支出转变为运营支出,企业可以将其初始投资转换为获取开发资源。在运营支出方面,云原生环境利用了由开源 Kubernetes 软件管理的容器化技术。市场上还有其他云原生工具可以有效地管理系统。借助无服务器架构、基础设施标准化和开源工具,运营成本也随之下降,从而降低了 TCO。
5:将应用程序转变为API
云原生环境能够使用基于 API 的集成将海量企业数据与前端应用程序连接起来。由于每个 IT 资源都在云中并使用 API,因此应用程序也变成了 API。因此,它提供了引人入胜的客户体验,并允许使用传统基础架构,从而将其扩展到云原生应用程序的 Web 和移动时代。
厚积薄发:云原生架构模式特点详解
1:现收现付
在云架构中,资源通过按使用付费或即用即付模式通过 Internet 集中托管和交付。客户根据资源使用情况付费。这意味着可以在需要时扩展资源,将资源优化到核心。它还提供了各种支付率的灵活性和服务选择。例如,无服务器架构允许仅在执行代码时提供资源,这意味着只需在应用程序使用时付费。
2:自助服务基础设施
基础设施即服务(IaaS) 是云原生应用架构的关键属性。无论您是在弹性、虚拟还是共享环境中部署应用程序,您的应用程序都会自动重新调整以适应底层基础设施,并根据不断变化的工作负载进行扩展和缩减。这意味不必从服务器、负载平衡器或中央管理系统寻求和获得许可来创建、测试或部署 IT 资源。在缩短等待时间的同时,简化了 IT 管理。
3:分布式架构
分布式架构是云原生架构的另一个关键组件,它允许跨基础架构安装和管理软件。它是安装在不同位置的独立组件的网络。这些组件共享信息以实现单一目标。分布式系统使组织能够大规模扩展资源,同时给最终用户留下他正在一台机器上工作的印象。在这种情况下,数据、软件或硬件等资源是共享的,单个功能同时在多台机器上运行。这些系统具有容错性、透明度和高可扩展性。虽然较早使用客户端-服务器架构,但现代分布式系统使用多层、三层或对等网络架构。分布式系统提供无限的水平扩展、容错和低延迟。不利的一面是,他们需要智能监控、数据集成和数据同步。避免网络和通信故障是一项挑战。云供应商负责治理、安全、工程、演进和生命周期控制。不必担心云原生应用程序中的更新、补丁和兼容性问题。
4:管理服务
云架构允许充分利用云托管服务,从而有效地管理云基础架构,从迁移和配置到管理和维护,同时优化核心时间和成本。由于每个服务都被视为一个独立的生命周期,因此将其作为敏捷的 DevOps 流程进行管理很容易。可以同时使用多个 CI/CD 管道,也可以独立管理它们。
例如,AWS Fargate 是一种无服务器计算引擎,可让构建应用程序,而无需通过按使用付费模式管理服务器。Amazon lambda 是另一个用于相同目的的工具。Amazon RDS 使您能够在云中构建、扩展和管理关系数据库。Amazon Cognito 是一个强大的工具,可帮助安全地管理所有云应用程序上的用户身份验证、授权和管理。借助这些工具,可以以最少的成本和精力轻松设置和管理云开发环境。
5:自动放缩
自动缩放是云原生架构的一项强大功能,可自动调整资源以将应用程序维持在最佳水平。自动缩放的好处是可以抽象每个可缩放层并缩放特定资源。有两种方法可以扩展资源。垂直扩展增加了机器的配置来处理不断增长的流量,而水平扩展增加了更多的机器来横向扩展资源。垂直扩展受容量限制。水平扩展提供了无限的资源。
例如,AWS 提供开箱即用的水平自动扩展。无论是弹性计算云 (EC2) 实例、DynamoDB 索引、弹性容器服务 (ECS) 容器还是 Aurora 集群,Amazon 都会根据定义的每个应用程序的统一扩展策略监控和调整资源。您可以定义可扩展的优先级,例如成本优化或高可用性,也可以同时平衡两者。AWS 的 Autoscaling 功能是免费的,但需要为横向扩展的资源付费。
6:自动恢复
在如今必须保证产品每时每刻运行可用的时代,为确保所有资源的高可用性,为所有服务、数据资源和基础架构制定灾难恢复计划非常重要。云架构允许从一开始就将弹性整合到应用程序中。可以设计自我修复应用程序,并可以立即恢复数据、源代码存储库和资源。
例如, Terraform 或 CloudFormation 等IaC 工具允许自动配置底层基础设施,以防系统崩溃。从预置 EC2 实例和 VPC 到管理和安全策略,可以自动化灾难恢复工作流程的所有阶段。它还可以帮助您立即回滚对基础架构所做的更改或在需要时重新创建实例。同样,可以使用 Jenkins 或 Gitlab 等 CI 自动化服务器回滚对CI/CD 管道所做的更改。这意味着灾难恢复快速且具有成本效益。
7:自动化和基础设施即代码IaC
通过在现代系统设计支持的微服务架构上运行容器,组织可以在业务流程中实现速度和敏捷性。为了将此功能扩展到生产环境,企业现在正在实施基础架构即代码 (IaC)。组织可以通过应用软件工程实践来自动化资源配置,通过配置文件来管理基础设施。通过测试和版本控制部署,可以自动化部署以将基础架构保持在所需状态。当需要更改资源分配时,您可以简单地在配置文件中定义它并自动将其应用到基础架构中。IaC 将一次性系统带入画面,可以在其中即时创建、管理和销毁生产环境,同时自动执行每项任务。
云设计非常有利于自动化。可以使用Terraform 或 CloudFormation自动化基础架构管理、使用 Jenkins/Gitlab 的 CI/CD 管道,以及使用 AWS 内置功能自动扩展资源。云原生架构使您能够构建与云无关的应用程序,这些应用程序可以部署到任何云提供商平台。Terraform 是一款功能强大的工具,可帮助您使用 Hashicorp 配置语言 (HCL) 创建模板,以便在 AWS、Azure、GCP 等流行云平台上自动配置应用程序。CloudFormation 是 AWS 提供的一项流行功能,用于自动配置工作负载在 AWS 服务上运行的资源。它使您可以轻松地在 AWS 服务上自动设置和部署各种 IaaS 产品。如果您使用各种 AWS 服务,使用 CloudFormation 可以轻松实现基础设施自动化。
8:不可变的基础设施
不可变的基础设施或不可变的代码部署是部署服务器的概念,因此它们不能被编辑或更改。如果需要更改,则服务器将被销毁,并从公共图像存储库在该位置部署新的服务器实例。并非每个部署都依赖于前一个部署,并且没有配置偏差。由于每个部署都带有时间戳和版本,因此如果需要,您可以回滚到早期版本。
不可变的基础架构使管理员能够轻松更换有问题的服务器,而不会干扰应用程序。此外,它使部署在所有环境中变得可预测、简单且一致。它还使测试变得简单。自动缩放也变得容易。总体而言,它提高了部署环境的可靠性、一致性和效率。Docker、Kubernetes、Terraform 和 Spinnaker 是一些有助于不可变基础架构的流行工具。此外,实施 12 要素方法原则还有助于维护不可变的基础架构。
9:12因子方法论
为了促进开发同一应用程序的开发人员之间的无缝协作,并随着时间的推移有效地管理应用程序的动态有机增长,同时最大限度地降低软件侵蚀成本,Heroku 的开发人员提出了一种 12 因素方法,可帮助组织轻松地在云中构建和部署应用程序 -本机应用程序架构。这种方法的关键要点是应用程序应该对所有部署使用单一代码库,并且应该打包所有相互隔离的依赖项。配置代码应与应用代码分开。进程应该是无状态的,以便您可以单独运行它们、扩展它们并终止它们。同样,应该构建自动化 CI/CD 管道,同时单独管理构建、发布和运行无状态流程。另一个关键建议是应用程序应该是一次性的,以便您可以独立启动、停止和扩展每个资源。12 因素方法非常适合云架构。