此外,云原生应用通常遵循12因素应用框架的原则。它们围绕以下几个方面构建:
性能:应用程序在设计时就考虑了可伸缩性,旨在实现良好的伸缩性能。
(资料图)
弹性:应用程序是由具有良好可伸缩性的小型可伸缩组件构建而成的。
弹性:应用对故障有很强的弹性,可以自动替换故障组件,而不中断其他组件的运行。
安全性:在构建应用程序时,要考虑安全性,以确保应用程序或其数据不会被攻击者破坏。
本土建筑原则
构建云原生应用时,首先要构建一个可以多维度连续移动的系统,实现动态扩展,自动处理故障,尽可能方便地添加或删除组件。以下原则可以使构建的云原生架构更强大,更适应变化,更易于维护。
01自动化设计
您可以创建部署、修复和扩展系统的自动化流程,并生成相关的日志和事件。构建系统以自动处理:
提供基础设施,如机器实例;
CI/CD管道中的生成、测试和部署阶段;
基于工作负载或其他应用需求的动态可扩展性;
备份、健康监控和故障恢复。
尽可能保持无国籍状态。
尽管一些云原生纯粹主义者认为云原生应用应该是无状态的,但在现实世界中开发无状态应用可能很困难。但是,也应该尽可能地使用无状态组件,因为在分布式应用程序中很难跟踪管理状态(例如当前运行的实例数量)。无状态组件使得扩展(添加更多副本)、修复(删除并用新实例替换)、回滚和平衡工作负载(没有哪个实例处理哪个事务的复杂逻辑)变得更加容易。
03弹性设计
通过在设计中增加冗余,在云原生应用程序中构建弹性。云原生应用通过使用实例集群、数据复制和多可用性或多区域云部署来避免单点故障。那些必须在本地运行的应用程序应该使用混合架构,以利用公共云来实现高可用性和灾难恢复,至少对于其中的一些组件是如此。
一些常见的弹性机制:
能够识别连接丢失或服务超时等临时问题导致的临时故障,并提出重试请求;
实现断路器模式,检查重试操作次数,在后续重试中返回错误,不激活服务;
当服务依赖的其他服务失败时,允许服务正常降级,并且仍然提供合理的用户体验;
根据应用程序的使用率限制和节流,识别和限制大容量用户;
补偿事务用于将业务事务分解成一系列更小的事务,这样更容易实现分布式系统中的事务一致性。
04使用微边界构建每个组件
云原生应用不仅要从一开始就进行安全性设计,还要在没有可信组件的假设下进行设计。因为应用程序和它的用户之间,甚至内部组件之间可能没有私有网络,所以应该努力加强所有组件,加密数据,并实现组件之间的身份验证,以便应用程序更具弹性,可以在不受信任的环境中灵活地部署组件。
05构建多语言架构
云原生应用不需要高度集成的架构,不需要用相同语言编写的组件,不需要相同的技术和框架。因为REST API可以公开每个组件的功能,允许异构组件之间相互通信和使用,所以在充分考虑团队能力后,用能够提供最大价值和最快上市时间的语言或技术编写每个组件是可能的。
06组件是不可变的
通过使基础架构组件不变,引入高水平的敏捷性和灵活性。这意味着不允许在部署后修改配置服务器或虚拟机(VM)。
不可变服务器部署后,就不能再修改了。相反,如果不部署不可变的服务器,应该确保部署的服务器保持不变,不做任何修改,这样,如果出现问题,可以快速轻松地替换服务器,应用程序可以运行。
以下是使用不可变基础设施的一些主要优势:
不可变组件有助于实现一致和可靠的基础设施,使测试更加容易和清晰。
部署不可变的组件可以更简单、更可预测。
不可变组件的每个部署都是版本化和自动化的,这使得环境回滚更加容易和简单。
优雅的配置、雪花服务器和错误被减轻甚至完全消除。
使用云服务时,自动扩展毫不费力。
可变的服务器会增加成本和迭代时间,严重延迟上市时间,不可变的基础设施会促进敏捷开发。不可变的基础设施可以提高部署环境的可靠性、一致性和效率,开发人员可以在几分钟内重建环境。
云原生架构的优势和劣势
云原生架构有许多优势:
(1)成本:云提供低成本选项,以确保
系统不间断运行,为客户提供服务,此外还可以利用各种云交付功能。若在企业内部提供这些功能,则既耗时又昂贵。(2)可靠性:云环境提供弹性和可靠性选项,例如可用性区域,可以确保系统永远不会出现故障,免受中断的影响,因此避免停机造成的不可挽回的损失。
(3)敏捷性:敏捷开发需要不断的测试和优化,这在传统的整体架构中是很困难的,因为一个小小的改变可能会破坏整个系统。云原生系统在构建时考虑了持续变化,因此可以更轻松地更新和调整应用程序。
(4)灵活性:云原生设计与平台无关,因此若当前系统不适合开发,可以切换到新环境,而不必从头开始重新编译。
云原生架构的缺点包括:
(1)解决问题:在传统体系架构中可以遵循线性计划来识别问题。而云原生设计存在复杂网络中相互连接和交互的容器,并且特定组件集之间的路径可能不明确。如果问题的根源分散在多个容器中,则可能更难找出根本原因。
(2)安全性:由于系统是由大量动态分布式组件构成,云原生架构通常更难以监控和保护。
(3)知识差距:如果开发人员不熟悉云原生系统,则需要重新学习,就像使用新语言一样,重要的是需要能够很好地理解新概念,以避免造成严重损失的错误。
在考虑构建新的云原生架构时,企业组织需要仔细权衡各种优缺点,以便为业务、客户和利益相关者做出正确的决策。