【软考】下篇 第14章 云原生架构设计与理论实践

news2024/12/27 1:54:57

目录

    • 一、云原生架构定义
    • 二、云原生架构原则
    • 三、云原生架构主要架构模式
      • 3.1 服务化架构模式
      • 3.2 Mesh化架构模式
      • 3.3 Serverless模式
      • 3.4 存储计算分离模式
      • 3.5 分布式事务模式
      • 4.6 可观测架构
      • 3.7 事件驱动架构
    • 四、云原生架构反模式
    • 五、云原生架构技术
      • 5.1 容器技术
        • 容器编排K8S
      • 5.2 云原生微服务
      • 5.3 无服务器技术
      • 5.4 服务网格
    • 六、云原生架构案例

一、云原生架构定义

云原生 来自于 Cloud Native 的直译,拆开来看,
Cloud 就是指其应用软件是在云端而非传统的数据中心。
Native代表应用软件从一开始就是基于云环境、专门为云端特性而设计,可充分利用和发挥云平台的弹性+分布式优势,最大化释放云计算生产力。

DevOps 可以看作是开发、技术运营和质量保障三者的交集,
促进之间的沟通、协作与整合,从而提高开发周期和效率。
而云原生的容器、微服务等技术正是为 DevOps提供了很好的前提条件,保证 IT 软件开发实现 DevOps 开发和持续交付的关键应用。

从技术的角度,云原生架构是基于云原生技术的一组架构原则和设计模式的集合,
旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等), 使业务不再有非功能性业务中断困扰的同时,具备轻量、敏捷、高度自动化的特点。

由于云原生是面向“云”而设计的应用,因此,技术部分依赖于传统云计算的3层概念,即基础设施即服务 (IaaS)平台即服务 (PaaS)软件即服务 (SaaS)

云原生的代码通常包括三部分:业务代码三方软件处理非功能特性的代码
其中“业务代码”指实现业务逻辑的代码;
“三方软件”是业务代码中依赖的所有三方库,包括业务库和基础库;
“处理非功能性的代码”指实现高可用、安全、可观测性等非功能性能力的代码。
三部分中只有业务代码是核心,是对业务真正带来价值的,另外两个部分都只算附属物,但是,随着软件规模的增大、业务模块规模变大、部署环境增多、分布式复杂性增强,使得今天的软件构建变得越来越复杂,对开发人员的技能要求也越来越高。云原生架构相比较传统架构进了一大步,从业务代码中剥离大量非功能性特性(不会是所有,比如易用性还不能剥离)到 IaaS和PaaS 中,从而减少业务代码开发人员的技术关注范围,通过云厂商的专业性提升应用的非功能性能力

此外,具备云原生架构的应用可以最大程度利用云服务和提升软件交付能力,进一步加快软件开发。

二、云原生架构原则

助记:服持弹韧零自测

服务化原则
拆分为微服务架构、小服务架构,分别迭代。

弹性原则
系统的部署规模可以随着业务量的变化而自动伸缩,无须根据事先的容量规划准备固定的硬件和软件资源。

可观测原则
通过日志链路跟踪度量等手段,使得一次点击背后的多次服务调用的耗时、返回值和参数都清晰可见

韧性原则
当软件所依赖的软硬件组件出现各种异常时,软件表现出来的抵御能力。
韧性从多个维度诠释了软件持续提供业务服务的能力,核心目标是提升软件的平均无故障时间 (Mean Time Between Failure,MTBF)。
从架构设计上,韧性包括服务异步化能力重试/限流/降级/熔断/反压主从模式集群模式、 A Z 内的高可用、单元化、跨 region 容灾、异地多活容灾等。

所有过程自动化原则
通过 IaC(Infrastructure as Code)、GitOps、OAM(Open Application Model)、Kubernetes Operator 和大量自动化交付工具在 CI/CD 流水线中的实践,一方面标准化企业内部的软件交付过程,另一方面在标准化的基础上进行自动化,通过配置数据自描述和面向终态的交付过程,让自动化工具理解交付目标和环境差异,实现整个软件交付和运维的自动化

零信任原则
默认情况下不应该信任网络内部和外部的任何人/设备/系统
需要基于认证和授权重构访问控制的信任基础,诸如 IP地址、主机、地理位置、所处网络等均不能作为可信的凭证。
零信任对访问控制进行了范式上的颠覆,引导安全体系架构从“网络中心化”走向“身份中心化”,其本质诉求是以身份为中心进行访问控制

架构持续演进原则
今天技术和业务的演进速度非常快,
很少有一开始就清晰定义了架构并在整个软件生命周期里面都适用,
相反往往还需要对架构进行一定范围内的重构
因此云原生架构本身也必须是一个具备持续演进能力的架构,而不是一个封闭式架构。

三、云原生架构主要架构模式

助记:ssh tcoe
Service、Serverless、Mesh
Distributed Transaction、Storage/Computation Seperation、Observability、EDA

3.1 服务化架构模式

服务化架构是云时代构建云原生应用的标准架构模式,
要求以应用模块为颗粒度划分一个软件,
接口契约(例如 IDL) 定义彼此业务关系,
标准协议 (HTTP、gRPC 等)确保彼此的互联互通,
结合DDD (领域模型驱动)TDD (测试驱动开发)容器化部署提升每个接口的代码质量和迭代速度。
服务化架构的典型模式是微服务和小服务模式。

3.2 Mesh化架构模式

Mesh化架构是把中间件框架(如 RPC、 缓存、异步消息等)从业务进程中分离,让中间件SDK与业务代码进一步解耦,从而使得中间件升级对业务进程没有影响,甚至迁移到另外一个平台的中间件也对业务透明。分离后在业务进程中只保留很“薄”的 Client部分, Client通常很少变化,只负责与 Mesh 进程通信,原来需要在 SDK中处理的流量控制、安全等逻辑由 Mesh进程完成。
在这里插入图片描述

3.3 Serverless模式

Serverless 将“部署”这个动作从运维中“收走”,使开发者不用关心应用运行地点、操作系统、网络配置、 C P U性能等,
从架构抽象上看,当业务流量到来/业务事件发生时,云会启动或调度一个已启动的业务进程进行处理,处理完成后云自动会关闭/调度业务进程,等待下一次触发,也就是把应用的整个运行都委托给云

Serverless 并非适用任何类型的应用,因此架构决策者需要关心应用类型是否适合于Serverless运算。

  • 如果应用是有状态的,由于 Serverless 的调度不会帮助应用做状态同步,因此云在进行调度时可能导致上下文丢失;
  • 如果应用是长时间后台运行的密集型计算任务,会无法发挥 Serverless 的优势;
  • 如果应用涉及频繁的外部 I/O (网络或者存储,以及服务间调用),也因为繁重的 I/O 负担、时延大而不适合。
  • Serverless 非常适合于事件驱动的数据计算任务、计算时间短的请求/响应应用、没有复杂相互调用的长周期任务。

3.4 存储计算分离模式

在云环境中,推荐把各类暂态数据(如 session)、 结构化和非结构化持久数据都采用云服务来保存,从而实现存储计算分离。
但仍然有一些状态如果保存到远端缓存,会造成交易性能的明显下降,
比如交易会话数据太大、需要不断根据上下文重新获取等,
这时可以考虑通过采用时间日志+快照(或检查点)的方式,实现重启后快速增量恢复服务,减少不可用对业务的影响时长。

3.5 分布式事务模式

大颗粒度的业务需要访问多个微服务,必然带来分布式事务问题,否则数据就会出现不一致。架构师需要根据不同的场景选择合适的分布式事务模式

  • (1) 传统采用XA模式,虽然具备很强的一致性,但是性能差。
  • (2) 基于消息的最终一致性 (BASE) 通常有很高的性能,但是通用性有限。
  • (3) TCC模式完全由应用层来控制事务,事务隔离性可控,也可以做到比较高效;但是对业务的侵入性非常强,设计开发维护等成本很高。
  • (4) SAGA 模式与TCC模式的优缺点类似但没有try这个阶段,而是每个正向事务都对应一个补偿事务,也是开发维护成本高。
  • (5) 开源项目 SEATA 的 AT 模式非常高性能且无代码开发工作量,且可以自动执行回滚操作,同时也存在一些使用场景限制。

4.6 可观测架构

可观测架构包括Logging、Tracing、Metrics三个方面,
其中 Logging提供多个级别 (verbose/debug/warning/error/fatal) 的详细信息跟踪,由应用开发者主动提供;
Tracing提供一个请求从前端到后端的完整调用链路跟踪,对于分布式场景尤其有用;
Metrics则提供对系统量化的多维度度量。

3.7 事件驱动架构

事件驱动架构 (EDA,Event Driven Architecture) 本质上是一种应用/组件间的集成架构模式。
事件和传统的消息不同,事件具有 schema, 所以可以校验 event的有效性,同时EDA具备QoS 保障机制,也能够对事件处理失败进行响应。事件驱动架构不仅用于(微)服务解耦,还可应用于下面的场景中。

  • (1) 增强服务韧性:由于服务间是异步集成的,也就是下游的任何处理失败甚至宕机都不会被上游感知,自然也就不会对上游带来影响。
  • (2) CQRS(Command Query Responsibility Segregation): 把对服务状态有影响的命令用事件来发起,而对服务状态没有影响的查询才使用同步调用的API 接口;结合EDA 中的 Event Sourcing机制可以用于维护数据变更的一致性,当需要重新构建服务状态时,把EDA 中的事件重新“播放”一遍即可。
  • (3) 数据变化通知:在服务架构下,往往一个服务中的数据发生变化,另外的服务会感兴趣,比如用户订单完成后,积分服务、信用服务等都需要得到事件通知并更新用户积分和信用等级。
  • (4) 构建开放式接口:在EDA 下,事件的提供者并不用关心有哪些订阅者,不像服务调用的场景——数据的产生者需要知道数据的消费者在哪里并调用它,因此保持了接口的开放性。
  • (5) 事件流处理:应用于大量事件流(而非离散事件)的数据分析场景,典型应用是基于Kafka 的日志处理。
  • (6) 基于事件触发的响应:在 IoT时代大量传感器产生的数据,不会像人机交互一样需要等待处理结果的返回,天然适合用EDA来构建数据处理应用。

四、云原生架构反模式

庞大的单体应用
单体应用硬拆为微服务
缺乏自动化能力的微服务

五、云原生架构技术

5.1 容器技术

Docker, K8S
在这里插入图片描述

容器编排K8S

Kubernetes 已经成为容器编排的事实标准,被广泛用于自动部署,扩展和管理容器化应用。

Kubernetes 提供了分布式应用管理的核心能力。

  • 资源调度:根据应用请求的资源量CPU、Memory, 或者GPU等设备资源,在集群中选择合适的节点来运行应用。
  • 应用部署与管理:支持应用的自动发布与应用的回滚,以及与应用相关的配置的管理;也可以自动化存储卷的编排,让存储卷与容器应用的生命周期相关联。
  • 自动修复: Kubernetes能监测这个集群中所有的宿主机,当宿主机或者OS出现故障,节点健康检查会自动进行应用迁移;K8S也支持应用的自愈,极大简化了运维管理的复杂性。
  • 服务发现与负载均衡:通过Service资源出现各种应用服务,结合D N S和多种负载均衡机制,支持容器化应用之间的相互通信。
  • 弹性伸缩: K8s可以监测业务上所承担的负载,如果这个业务本身的CPU利用率过高,或者响应时间过长,它可以对这个业务进行自动扩容。Kubernetes 的控制平面包含四个主要的组件: APIServer、Controller、Scheduler 以及 etcd。
  • 声明式API: 开发者可以关注于应用自身,而非系统执行细节。比如Deployment (无状态应用)、 StatefulSet (有状态应用)、 Job (任务类应用)等不同资源类型,提供了对不同类型工作负载的抽象;对Kubernetes实现而言,基于声明式API的 “level-triggered”实现比 “edge-triggered” 方式可以提供更加健壮的分布式系统实现。
  • 可扩展性架构:所有K8s组件都是基于一致的、开放的API实现和交互;三方开发者也可通过CRD(Custom Resource Definition)/Operator等方法提供领域相关的扩展实现,极大提升了K8s的能力。
  • 可移植性: K8s通过一系列抽象如Load Balance Service (负载均衡服务)、 CNI (容器网络接口)、 CSI (容器存储接口),帮助业务应用可以屏蔽底层基础设施的实现差异,实现容器灵活迁移的设计目标。

5.2 云原生微服务

设计约束:

  • 1)微服务个体约束 - 服务拆分、单一职责、高内聚低耦合、独立性
  • 2)微服务间的横向关系 - 服务注册发现、客户端负载均衡、限流熔断等
  • 3)微服务与数据层之间的纵向约束 - 零共享架构
  • 4)全局视角下的微服务分布式约束 - 自动化CI/CD、可观测、蓝绿/金丝雀发布等

主要技术:阿里Apache Dubbo、Spring Cloud、Eclipse MicroProfile、腾讯Tars、蚂蚁金服SOFAStack、微软DAPR

5.3 无服务器技术

BaaS(Backend as Service)
随着以Kubernetes 为代表的云原生技术成为云计算的容器界面, Kubernetes成为云计算的新一代操作系统。面向特定领域的后端云服务 (BaaS) 则是这个操作系统上的服务API, 存储、数据库、中间件、大数据、 AI等领域的大量产品与技术都开始提供全托管的云形态服务,如今越来越多用户已习惯使用云服务,而不是自己搭建存储系统、部署数据库软件。

FaaS(Function as Service)
通过把应用逻辑拆分多个函数,每个函数都通过事件驱动的方式触发执行,例如,当对象存储 (OSS)
中产生的上传/删除对象等事件,能够自动、可靠地触发 FaaS 函数处理且每个环节都是弹性和高可用的,客户能够快速实现大规模数据的实时并行处理。同样,通过消息中间件和函数计算的集成,客户可以快速实现大规模消息的实时处理。

目前函数计算这种 Serverless 形态在普及方面仍存在一定困难,例如:

  • (1) 函数编程以事件驱动方式执行,这在应用架构、开发习惯方面,以及研发交付流程上都会有比较大的改变;
  • (2) 函数编程的生态仍不够成熟,应用开发者和企业内部的研发流程需要重新适配;
  • (3) 细颗粒度的函数运行也引发了新技术挑战,比如冷启动会导致应用响应延迟,按需建立数据库连接成本高等。

容器作为载体
针对这些情况,在 Serverless计算中又诞生出更多其他形式的服务形态,典型的就是和容器技术进行融合创新,通过良好的可移植性,容器化的应用能够无差别地运行在开发机、自建机房以及公有云环境中;基于容器工具链能够加快解决 Serverless 的交付。

  • 云厂商如阿里云提供了弹性容器实例 (ECI) 以及更上层的 Serverless 应用引擎 (SAE),
  • Google 提供了CloudRun服务,这都帮助用户专注于容器化应用构建,而无需关心基础设施的管理成本。
  • 此外 Google 也开源了基于 Kubernetes 的 Serverless应用框架Knative。

相对函数计算的编程模式,这类Serverless应用服务支持容器镜像作为载体,无需修改即可部署在 Serverless环境中,可以享受Serverless带来的全托管免运维、自动弹性伸缩、按量计费等优势。

Serverless计算包含以下特征:

  • (1)全托管的计算服务
  • (2)通用性,集合云BasSAPI的能力,能够支撑云上所有重要类型的应用
  • (3)自动弹性伸缩
  • (4)按量计费

5.4 服务网格

服务网格 (ServiceMesh) 是分布式应用在微服务软件架构之上发展起来的新技术,旨在将那些微服务间的连接、安全、流量控制和可观测等通用功能下沉为平台基础设施,实现应用与平台基础设施的解耦。这个解耦意味着开发者无需关注微服务相关治理问题而聚焦于业务逻辑本身,提升应用开发效率并加速业务探索和创新。换句话说,因为大量非功能性从业务进程剥离到另外进程中,服务网格以无侵入的方式实现了应用轻量化。
在这里插入图片描述

主要技术:Istio(envoy、xDS)、Linked(linkerd-proxy)、Consul、Conduit

六、云原生架构案例

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1709631.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用uniapp编写的微信小程序进行分包

简介: 由于小程序发布的时候每个包最多只能放置2MB的东西,所以把所有的代码资源都放置在一个主包当中不显示,所以就需要进行合理分包,,但是分包后整个小程序最终不能超过20MB。 一般情况下,我习惯将tabba…

为什么推荐前端用WebStorm软件编程?

一、介绍 WebStorm是由JetBrains公司开发的一款JavaScript开发工具,被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。它支持JavaScript、ECMAScript 6、TypeScript、CoffeeScript、Dart和Flow等多种语言的代码…

从 0 开始实现一个博客系统 (SSM 项目)

相关技术 Spring Spring Boot Spring MVC MyBatis Html Css JS pom 文件我就不放出来了, 之前用的 jdk8 做的, MySQL 用的 5.7, 都有点老了, 你们自己看着配版本就好 实现功能 用户注册 - 密码加盐加密 (md5 加密)前后端用户信息存储 - 令牌技术用户登录 - (使用 拦截…

基于51单片机的汽车智能灯光控制系统

一.硬件方案 本设计硬件部分,中央处理器采用了STC89C52RC单片机,另外使用两个灯珠代表远近光灯,感光部分采用了光敏电阻,因为光敏电阻输出的是电压模拟信号,单片机不能直接处理模拟信号,所以经过ADC0832进…

为什么配置了安全组还是有攻击进来?

面对DDoS攻击,即使配置了安全组规则来限制入站流量,攻击者仍可能找到绕过这些基本防护措施的方法,尤其是当攻击流量巨大时。这是因为安全组主要工作在网络层和传输层,它们依据IP地址、协议和端口号来过滤流量,对于应用…

【模拟面试问答】深入解析力扣164题:最大间距(桶排序与排序方法详解)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

c 系统宏有多少

在C语言中,系统宏(也称为预定义宏或内置宏)的数量并不是固定的,因为它们取决于C标准、编译器以及可能的其他因素。然而,有一些常见的预定义宏是几乎所有C编译器都支持的。 以下是一些常见的C预定义宏: __…

Nature 正刊!瑞典于默奥大学研究团队在研究全球河流和溪流的甲烷排放中取得新进展

甲烷(CH4)是一种强有力的温室气体,自工业革命以来,其在大气中的浓度增加了两倍。有证据表明,全球变暖增加了淡水生态系统的 CH4 排放,为全球气候提供了积极的反馈。然而,对于河流和溪流来说,甲烷排放的控制…

鸿蒙OS开发:典型页面场景【一次开发,多端部署】(信息应用)案例

信息应用 简介 内容介绍 Mms应用是OpenHarmony中预置的系统应用,主要的功能包含信息查看、发送短信、接收短信、短信送达报告、删除短信等功能。 架构图 目录 /Mms/ ├── doc # 资料 ├── entry │ └── src │…

阳光电源临摹品引发的EMC正向设计思考

画画可以临摹。画电路板临摹的人更多。 抄板,抄的是过去的板子,容易出问题。现在市场竞争激烈,欧美客户对出口产品的标准要求推陈出新,防不胜防。由于市场的竞争,欧洲客户已经意识到EMC电磁兼容的重要性,不…

洁净环境测试标准、监测计划要点及风险评估注意事项

洁净区日常环境监测 洁净区环境监测作为污染控制策略(CCS)的重要组成部分,用于监测旨在将粒子和微生物污染风险降至最低的控制措施。下面内容,中邦兴业小编将与大家做个详细的分享。 环境监测计划 评估和定义粒子、微生物监测所…

Python 机器学习 基础 之 模型评估与改进 【评估指标与评分】的简单说明

Python 机器学习 基础 之 模型评估与改进 【评估指标与评分】的简单说明 目录 Python 机器学习 基础 之 模型评估与改进 【评估指标与评分】的简单说明 一、简单介绍 二、评估指标与评分 1、牢记最终目标 2、二分类指标 1)错误类型 2)不平衡数据集…

什么是erp仓储管理系统?ERP系统的价值体现在哪些方面?

ERP仓储管理系统是一个帮助企业管理仓库的工具。想象一下,如果你是一个仓库管理员,里面堆满了各种各样的产品和货物,如何确保这些产品数量准确、摆放有序,以及快速找到自己需要的产品呢? 这时,如果企业引用…

Web会话管理

一、会话管理的概念: 在人机交互时,会话管理是保持用户的整个会话活动的互动与计算机系统跟踪过程会话管理分类: 桌面会话管理、浏览器会话管理、Web服务器的会话管理。 二、为什么需要会话管理? HTTP是一种无状态协议,一次请…

【SpringCloud】Spring Cloud基本介绍

目录 回顾架构分类单体架构分布式架构微服务架构什么是微服务优点缺点微服务的架构特征:微服务架构面临的挑战技术挑战微服架构的设计原则微服务概念提供者(Provider)消费者(Consumer)RPC和Restful集群分布式 总结 服务拆分和远程调用服务拆分原则服务拆分示例 思考…

保障餐饮场所安全:可燃气体报警器专业检测的必要性

在餐饮行业,火灾隐患一直是备受关注的问题。为了有效预防和及时发现可燃气体泄漏,可燃气体报警器的专业检测周期显得尤为重要。 今天,佰德和大家一起来深入了解一下可燃气体报警器的专业检测周期,若您对此有不同的观点或其他的问…

比较(一)利用python绘制条形图

比较(一)利用python绘制条形图 条形图(Barplot)简介 条形图主要用来比较不同类别间的数据差异,一条轴表示类别,另一条则表示对应的数值度量。 快速绘制 基于seaborn import seaborn as sns import matplo…

新型高性能数据记录仪ETHOS 2

| 具有强大CPU性能的数据记录仪 IPETRONIK推出了一款新型高性能数据记录仪——ETHOS 2,作为ETHOS的第二代,它借助新型英特尔i7-9850HE处理器,实现了11,572的性能指数,从而能够快速有效应对CAN FD、LIN和以太网总线测量方面的日益…

linux线程,线程控制与线程相关概念

线程概念 线程这个词或多或少大家都听过,今天我们正式的来谈一下线程; 在我一开始的概念中线程就是进程的一部分,一个进程中有很多个线程,这个想法基本是正确的,但细节部分呢我们需要细细讲解一下; 什么…

OKR 实践:来自一位信息技术部主管的成功秘诀

OKR 实践:来自一位信息技术部主管的成功秘诀 为什么选择OKR 公司信息技术部为38个各地分公司、12,000名员工的IT需求提供服务。庞大而多样的客户群常常使我们的团队分散,许多团队都在各自为政,以个案为基础解决问题,而不是采用企业…