云原生韧性架构设计实战 您所在的位置:网站首页 韧性设计包含在架构设计活动中 云原生韧性架构设计实战

云原生韧性架构设计实战

2023-08-04 11:40| 来源: 网络整理| 查看: 265

此外,云原生架构的设计还需要考虑组织结构的改变。前面提到一个非常重要的云原生架构原则就是服务化(包括微服务、小服务等),这个领域的一个典型原则就是前文提到的康威定律,要求企业的技术架构与沟通架构必须保持一致,否则会导致畸形的服务化架构,甚至导致组织沟通成本上升和“扯皮”现象增多的问题。

企业需要考虑的另外一个很重要的问题就是,企业接受改变的程度如何,或者说,企业能够快速进行组织结构调整,并保持业务稳定性的能力如何。云原生架构构建要求大量的企业 IT 人员也进行技术体系的升级和岗位职能的重新设计,这势必导致原本处于稳定和舒适区的技术领导者和底层员工必须破而再立,所以组织改变的风险不得不慎重考虑。

云原生架构韧性设计原则

设计为松散耦合的微服务

微服务是一种将单体应用程序拆解成一套小型服务的方法,每个服务都在自己的进程中运行,并使用像 HTTP 等轻量级协议进行通信。这些服务是围绕业务功能构建的,可以通过完全自动化的部署机制独立进行部署。

使用最佳的语言和框架组合进行开发

每个云原生应用程序的服务都应该使用最适合该功能的语言和框架来开发。云原生应用程序是多语言的,服务使用各种编程语言、运行时和框架。例如,开发人员可以使用 Node.js 来开发基于 WebSocket 的实时流服务,选择 Python 来构建机器学习、算法基础服务,选择 spring-boot 来提供 REST APIs 接口、原则Golang对接Kubernetes API Server。这种细粒度的微服务开发方式使得开发者能够选择最合适的语言和框架来开发去开发特定的任务。

以互动和协作为中心的 APIs

云原生服务使用轻量级 APIs,这些 APIs 基于表述性状态转移(restful API)等协议来暴露其功能。内部服务使用 Thrift、Protobuf、gRPC 等二进制协议进行通信,以获得更好的性能。

无状态且可大规模扩展

云原生应用将其状态存储在数据库或其他外部实体中,因此实例可以随意上下线,任一实例都可以处理请求。实例不依赖于底层基础设施,底层基础设施允许应用程序以高度分布式的方式运行,并且仍然保持其状态独立于底层基础设施的弹性机制。从可伸缩性的角度来看,架构非常简单,只需向集群添加普通的商用服务器节点就可以扩展应用程序。

复原韧性作为架构核心

根据墨菲定律 - “凡是可能出错的事就一定会出错”。当我们将其应用于软件系统时,分布式系统也会发生故障:硬件可能会出错、网络可能会出现暂时的故障,甚至有极低的概率整个服务或区域也可能会出现中断,但即使是概率极低也必须做好预案。复原韧性是指系统从故障中恢复并继续运行的能力。它不是故障规避,而是以避免停机和数据丢失为目标去处理故障。复原韧性的目标是在发生故障后将应用程序恢复到能完全正常运行的状态。

复原韧性提供以下内容:

高可用性 - 应用程序保持健康状态继续运行的能力而无需大量宕机。

灾难恢复 - 应用程序从罕见但重大意外事件中恢复的能力:非临时、大规模的故障,比如波及整个区域的服务中断。使应用程序更具韧性的主要方法之一是通过冗余机制。HA 和 DR 高可用方案使用多节点集群、多区域部署、数据复制、无单点故障、持续监控等实现。

以下是实现复原韧性的一些策略:

重试临时故障 - 临时故障可能是由于网络连接短暂丢失、数据库连接突然掉线或服务繁忙导致的超时造成的。一般这种临时故障能通过简单重试请求来解决。 跨实例的负载均衡 - 万物集群化。无状态应用程序应该能够通过向集群添加更多节点进行扩展。 优雅降级 - 如果一个服务故障且没有故障转移路径,应用程序应该要能优雅降级,同时持续提供可接受的用户体验。 限流高吞吐的佃户/用户 - 有时候一小撮用户可能会产生过多的负载。这将会对其他用户产生影响,从而降低应用程序的整体可用性。 使用熔断器 - 熔断器模式可以防止应用程序反复尝试一个可能失败的操作。熔断器封装了对服务的调用并跟踪最近的失败次数。如果失败次数超过阈值,则断路器开始返回错误代码而不再是调用服务。 应用补偿事务 - 补偿事务是一种撤销另一个已完成事务造成的影响的事务。在分布式系统中,实现事务强一致性可能非常困难。补偿事务是一种通过使用一系列更小的单个事务来实现一致性的方法,这些事务的每个步骤都可以被撤消。 强弱依赖 - 异常发生时,不影响核心业务流程,不影响系统可用性的依赖称作弱依赖,反之为强依赖。 爆炸半径 - 在Kubernetes控制的环境中最备受关注的攻击场景之一是爆炸半径(blast radius,即影响范围)这个概念。就像核弹的爆炸半径指遭到破坏的范围那样,Kubernetes控制的部署环境的爆炸半径是指恶意分子能访问的目标离最初的攻击点有多远。 测试复原韧性 -- 通常复原韧性测试不能像测试应用程序功能一样(通过运行单元测试、集成测试等)。相反,你必须测试在间歇性发生故障的情况下端到端的工作负载情况。

打包成轻量级容器并编排

容器可以将应用程序隔离至共享操作系统内核的小型轻量级执行环境中。容器大小通常以 MB 为单位,因此所使用的资源远远少于虚拟机,并且几乎是瞬时启动。Docker 现在已成为容器技术的标准,它提供的最大优势是便携性。

云原生应用程序使用 Kubernetes 进行部署,Kubernetes 是一个开源平台,旨在自动部署、扩展和管理容器化应用程序。Kubernetes 最初由谷歌开发,现在已经成为部署云原生应用程序的操作系统。它也是首批从 CNCF 毕业的项目的其中之一。

通过 CI/CD 实施敏捷 DevOps 和自动化DevOps,是“开发”和“运维”的融合,描述了实现快速敏捷开发和可扩展、可靠运维所需的组织架构、实践和文化。DevOps 是关于文化、协作实践和自动化的,它要求开发和运营团队保持一致,在提升客户体验、更快地响应业务需求、以及确保业务创新能在安全性和运营需求之间保持平衡方面形成一个统一的思想。现代的组织笃信开发和运维的人员职责的合并,可以让一个 DevOps 团队同时承担起这两项责任。通过这种方式,你只需要一个团队来负责开发、部署以及在生产环境运行软件。

持续集成(CI)和持续交付(CD)是一组操作原则,它们使应用程序开发团队能够更频繁、更可靠地交付代码变更。CI 的技术目标是建立一致和自动化的方法来构建、打包和测试应用程序。有了集成过程中的一致性,团队能够更频繁地提交代码变更,从而实现更好的协作和软件质量。

持续交付 (CD) 负责交接持续集成 (CI),完成后续的工作。CD 将交付应用程序到选定的基础设施环境的过程自动化,它挑选出 CI 构建完成的应用包,将其部署到像 Dev、QA、Performance 等各种环境中,分阶段运行各种测试,如集成测试、性能测试等,最后部署到生产环境中。通常 CD 的 pipeline 中几乎不需要人工介入,鉴于持续部署 (Continuous Deployment) 是一个完全自动化的 pipeline,从代码拉取到生产环境部署的整个过程都自动化了。

弹性 - 动态扩容/缩容

得益于云计算的弹性特性,云原生应用得以在运行高峰期通过增加计算资源来缓解压力。如果你部署在云上的电子商务应用正在经历一个流量高峰,你可以设置额外的计算资源给应用,等到高峰消退之后再下线这些资源。云原生应用可以根据需求调整增删的资源和规模

安全能力

关注业务的数字化安全,在利用云服务加固业务运行环境的同时,采用安全软件生命周期开发,使应用符合 ISO27001、PCI/DSS、等级保护等安全要求。安全能力是基础维度,要求在架构评测中关注,但它不会参与评分。返回搜狐,查看更多



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有