系统架构师考试学习笔记第三篇——架构设计高级知识(17)云原生架构设计理论与实践

news2024/9/22 21:28:13

本章知识考点:

        第17课时主要学习云原生架构设计理论与实践。根据考试大纲,本课时知识点会涉及单选题型(约占2~4分)、案例题(25分)和论文题,本课时节内容偏重于方法掌握和应用,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,概念知识的考查内容多数来源于实
际应用,还需要灵活运用相关知识点。本课时知识架构如图17.1所示。    

    

一、云原生架构内涵

1.定义


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

2.特点


基于云原生架构的应用特点包括:
(1)代码结构发生巨大变化:不再需要掌握文件及其分布式处理技术,不再需要掌握各种复杂的网络技术,简化让业务开发变得更敏捷、更快速。
(2)非功能性特性大量委托给云原生架构来解决:比如高可用能力、容灾能力、安全特性、可运维性、易用性、可测试性、灰度发布能力等。
(3)高度自动化的软件交付:基于云原生的自动化软件交付可以把应用自动部署到成千上万的节点上。

3.云原生的原则


云原生具有以下原则:
(1)服务化原则:通过服务化架构把不同生命周期的模块分离出来,分别进行业务迭代。
(2)弹性原则:弹性是指系统的部署规模可以随着业务量的变化而自动伸缩。
(3)可观测原则:通过日志、链路跟踪和度量等手段,使得多次服务调用的耗时、返回值和参数都清晰可见。
(4)韧性原则:软件所依赖的软硬件组件出现各种异常时,软件表现出来的抵御能力。
(5)所有过程自动化原则:让自动化工具理解交付目标和环境差异,实现整个软件交付和运维的自动化。
(6)零信任原则:不应该信任网络内部和外部的任何人/设备/系统,需要基于认证和授权重构访问控制的信任基础。

(7)架构持续演进原则:架构具备持续演进能力。

4.主要架构模式


云原生涉及的主要架构模式有:
(1)服务化架构模式:要求以应用模块为颗粒度划分一个应用软件,以接口契约(例如IDL)定义性此业务关系,以标准协议(HTTP、gRPC等)确保彼此的互联互通,结合领域模型驱动(DomainDriven Design,DDD)、测试动开发(Test Driven Design; TDD)、容器化部署提升每个接口的代码质量和迭代速度。
(2)Mesh化架构模式:Mesh化架构是把中间件框架(如RPC、缓存、异步消息等)从业务进程中分离,让中间件SDK与业务代码进一步解耦,从而使得中间件升级对业务进程没有影响,甚至迁移到另外一个平台的中间件也对业务透明。
(3)Serverless 模式:业务流量到来/业务事件发生时,云会启动或调度一个已启动的业务进程进行处理,处理完成后云自动会关闭/调度业务进程,等待下一次触发。开发者不用关心应用运行地点、操作系统、网络配置、CPU性能等,将应用的整个运行都委托给云。Serverless模式适合事件驱动的数据计算任务、计算时间短的请求/响应应用、没有复杂相互调用的长周期任务。
(4)存储计算分离模式:分布式环境中的CAP困难主要是针对有状态应用,由于一致性(Consistency,C),可用性(Availability,A),分区容错性(Partition Tolerance,P)三者无法同时满足,最多满足其中两个。所以无状态应用不存在一致性这个维度,可以获得很好的可用性和分区容错性,因而获得更好的弹性。
(5)分布式事务模式。由于业务需要访问多个微服务,所以会带来分布式事务问题,否则数据就会出现不一致。因此架构师需要根据不同的场景选择合适的分布式事务模式,常用的有:
        ·XA模式(传统采用XA模式);由于XA规范是实现分布式事务处理的标准,通常采用两阶段提交(2 Prepare Commit,2PC)的方法,具有很强的一致性,但是由于需要两次网络交互,所以性能差。
        ·基于消息的最终一致性(BASE):在可用性和一致性相冲突的情况下,为了权衡二者,BASE 提出只要满足基本可用(BA)和最终一致性(E),接受数据的软状态或未确定状
态(S),来优先实现性能,所以这类系统通常具备很高的性能。但正是由于应用的特点,选择可用性和一致性的妥协方案,导致通用性有限。
        ·TCC模式:采用Try-Confirm-Cancel二阶段模式,事务隔离性可控,高效,但需要应用代码将业务模型拆成二阶段,所以对业务侵入性强,设计开发维护等成本很高。
        ·SAGA模式:每个正向事务都对应一个补偿事务,若正向事务执行失败,则会执行补偿事务进行回滚。所以开发维护成本高。
        ·开源项目 SEATA的AT模式:它将TCC模式中的二阶段委托给底层代码框架,并且取消了行锁,所以非常高性能且无代码开发工作量,且可以自动执行回滚操作,但存在一些使用场景限制。
(6)可观测架构:可观测架构包括Logging、Tracing、Metrics,其中 Loggìng 提供多个级别跟踪,例如INFO/DEBUG/WARNING/ERROR;Tracing 收集一个请求从前端到后端的访问日志聚合,形成完整调用链路跟踪;Metrics 则提供对系统量化的多维度度量,包括并发度、耗时、可用时长、容量等。

(7)事件驱动架构:事件驱动架构(Event Driven Architecture,EDA)是一种应用/组件间的集成架构模式。适用于增强服务韧性、数据变化通知、构建开放式接口、事件流处理、命令查询的责任分离(Command Query Responsibility Segregation,CQRS)把对服务状态有影响的命令用事件来发起,而对服务状态没有影响的查询才使用同步调用的API接口等。

5.典型的云原生架构反模式

架构设计有时候需要根据不同的业务场景选择不同的方式,常见的云原生反模式有:
(1)庞大的单体应用:缺乏依赖隔离,代码耦合,责任和模块边界不清晰,模块间接口缺乏治理,变更影响扩散,不同模块间的开发进度和发布时间要求难以协调,一个子模块不稳定导致整个应用都变慢,扩容时只能整体扩容而不能对达到瓶颈的模块单独扩容等。
(2)单体应用“硬拆”为微服务:强行把耦合度高、代码量少的模块进行服务化拆分;拆分后服务的数据是紧密耦合的;拆分后成为分布式调用,严重影响性能。
(3)缺乏自动化能力的微服务:人均负责模块数上升,人均工作量增大,也增加了软件开发成本


 

二、云原生架构相关技术

1.容器技术


        容器作为标准化软件基础单元,它将应用及其所有依赖项打包发布,由于依赖项齐备,应用不再受环境限制,在不同计算环境间快速、可靠地运行。容器部署模式与其他模式的比较如图17.2。

2、容器编排技术


        容器编排技术包括资源调度、应用部署与管理、自动修复、服务发现与负载均衡、弹性伸缩、声明式API、可扩展性架构、可移植性。

3.微服务


        微服务模式将后端单体应用拆分为松耦合的多个子应用,每个子应用负责一组子功能。这些子应用称为“微服务”,多个“微服务”共同形成了一个物理独立但逻辑完整的分布式微服务体系。这些微服务相对独立,通过解耦研发、测试与部署流程,提高整体迭代效率。微服务设计约束如下:

(1)微服务个体约束:微服务应用的功能在业务领域划分上应是相互独立的。
(2)微服务与微服务之间的横向关系:在合理划分好微服务间的边界后,从可发现性和可交互性处理微服务间的横向关系。可发现性是指当服务A-发布和扩/缩容的时候,依赖服务A的服务B在不重新发布的前提下,能够自动感知到服务A的变化。可交互性是指服务A采用什么样的方
式可以调用服务B。
(3)微服务与数据层之间的纵向约束:提倡数据存储隔离(Data Storage Segregation, DSS)原则,对于数据的访问都必须通过相对应的微服务提供的API来访问。
(4)全局视角下的微服务分布式约束:高效运维整个系统,从技术上实现全自动化的 CI/CD流水线满足对开发效率的诉求,并在这个基础上支持蓝绿、金丝雀等不同发布策略,以满足对业务发布稳定性的诉求。

4.无服务器技术


无服务器技术的特点:
(1)全托管的计算服务-客户只需要编写代码构建应用,无须关注同质化的、负担繁重的基于服务器等基础设施的开发、运维、安全、高可用等工作。
(2)通用性-结合云 BaaS(后端云服务)API的能力,能够支撑云上所有重要类型的应用。
(3)自动弹性伸缩-让用户无须为资源使用提前进行容量规划。
(4)按量计费-让企业的使用成本有效降低,无须为闲置资源付费。
无服务器技术的关注点是:计算资源弹性调度(容错、资源利用率、性能、数据驱动)、负载均衡和流控、安全性。

5.服务网格(Service,Mesh)


        服务网格旨在将那些微服务间的连接、安全、流量控制和可观测等通用功能下沉为平台基础设施,实现应用与平台基础设施的解耦。图17.3展示了服务网格的典型架构。服务A调用服务B的所有请求,都被其下的服务代理截获,代理服务A完成到服务B的服务发现、熔断、限流等策略,
而这些策略的总控是在控制平面(Control Plane)上配置。
        服务网格的主要技术:Istio、Linkerd、Consul。

三、课后练习

1.云的时代需要新的技术架构,来帮助企业应用能够更好地利用云计算优势,充分释放云计算的技术红利。云计算无法为企业带来的改进是()。
A.通过DevSecOps应用开发模式,业务功能开发更加敏捷,提升迭代速度,成本更低
B.企业软件架构可以获得强大的可伸缩性和高可用性
C.结合云平台全方位企业级安全服务和安全合规能力,保障企业应用在云上安全构建,业务安全运行
D.企业的开发人员只须关注业务代码部分的开发,非业务功能可以完全委托给云原生架构来解决

2.下列关于云原生架构原则的描述,错误的是()。
A.服务化原则、弹性原则、韧性原则
B.可观测原则、所有过程自动化原则
C.零信任原则、接口隔离原则
D.架构持续演进原则

3.关于微服务的描述,错误的是()。
A.微服务是将后端单体应用拆分为松耦合的多个子应用,每个子应用负责一组子功能
B.微服务相对独立,通过解耦研发、测试与部署流程,提高整体迭代效率
C.微服务与数据层之间的纵向约束的含义是:在合理划分好微服务间的边界后,主要从微服务的可发现性和可交互性处理服务间的关系
D.驾驭微服务的前提是:高效运维整个系统,从技术上要准备全自动化的CI/CD流水线满足对开发效率的诉求,并在这个基础上支持蓝绿、金丝雀等不同发布策略

4.无服务器技术的特点之一是全托管的计算服务:客户只需要编写代码构建应用,无须关注同质化的、负担繁重的基于服务器等基础设施的()等工作。
A.开发、测试、发布、交付
B.开发、运维、安全、高可用
C.机房建设、服务器装机、操作系统安装、软件安装
D.资源调度、性能压测、负载均衡、数据统计

5.容器作为标准化软件单元,它将应用及其所有依赖项打包,使应用不再受()限制,在不同计算环境间快速、可靠地运行。
A.环境
B.操作系统
C.硬件
D.网络

答案解析:

1、解析:云原生架构旨在将云应用中的非业务代码部分进行最大化的剥离,从而让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),但无法接管所有的非功能特性。
答案:D

2、解析:接口隔离原则是面向对象设计原则,其含义是使用多个专门的接口比使用单一的总接口好。它不是云原生架构原则。
答案:C

3、解析:在合理划分好微服务间的边界后,主要从微服务的可发现性和可交互性处理服务间的关系,是属于微服务之间的横向关系。正确的纵向约束是:对于微服务的私有数据的访问都必须通过当前微服务提供的API来访问。
答案:C

4、解析:无服务器技术的特点如下。
全托管的计算服务:客户只需要编写代码构建应用,无须关注同质化的、负担繁重的基于服务器等基础设施的开发、运维、安全、高可用等工作。
通用性:结合云BaaSAPI的能力,能够支撑云上所有重要类型的应用。
自动弹性伸缩:让用户无须为资源使用提前进行容量规划。
按量计费:让企业的使用成本有效降低,无须为闲置资源付费。
答案:B

5、解析:在容器的帮助下,应用程序无须关注操作系统及更加低层的硬件、网络、存储的限制。选项B、C、D的说法有局限性,选项A更贴切。
答案:A

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

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

相关文章

KEIL中编译51程序 算法计算异常的疑问

KEIL开发 51 单片机程序 算法处理过程中遇到的问题 ...... by 矜辰所致前言 因为产品的更新换代, 把所有温湿度传感器都换成 SHT40 ,替换以前的 SHT21。在 STM32 系列产品上的替换都正常,但是在一块 51 内核的无线产品上面,数据…

两个月冲刺软考——逻辑地址与物理地址的转换(例题+讲解);文件类型的考点

1.已知计算机系统页面大小和进程的逻辑地址,根据页面变换表(页号-物理块号),求变换后的物理地址。 首先介绍几个公式: 逻辑地址 页号 页内地址 (默认为32机位) 物理地址 物理块号 物理地址的页内地址 其中:页内地址 物理地址…

Kubernetes--服务发布(Service、Ingress)

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 出自B站博主教程笔记: 完整版Kubernetes(K8S)全套入门微服务实战项目,带你一站式深入掌握K8S核心能…

算法_栈专题---持续更新

文章目录 前言删除字符中的所有相邻重复项题目要求题目解析代码如下 比较含退格的字符串题目要求题目解析代码如下 基本计算器II题目要求题目解析 字符串解码题目要求题目解析代码如下 验证栈序列题目要求题目解析代码如下 前言 本文将会向你介绍有关栈的相关题目:…

matter中的Fabric(网络结构)

什么是Fabric? Fabric可以被理解为一组相互信任的设备和控制器,它们共享一个共同的信任域。这意味着在同一个Fabric中的设备和控制器之间可以进行安全的通信,而无需额外的身份验证或安全检查。每个Fabric有一个唯一的标识,确保Fab…

迁移替换AD域时,有几个关键点需要注意

在当今的数字化时代,企业对于身份管理和访问控制的需求日益增长。然而,传统的AD域控方案在面对国产化替代和业务上云的趋势时,逐渐显露出一些局限性。宁盾国产化身份域管作为一种迁移替换AD域控的创新解决方案,正逐渐崭露头角&…

文心一言 VS 讯飞星火 VS chatgpt (341)-- 算法导论23.1 10题

十、给定图 G G G和 G G G的一棵最小生成树 T T T,假设减小了 T T T中一条边的权重。证明: T T T仍然是 G G G的一棵最小生成树。更形式化地,设 T T T为 G G G的一棵最小生成树, G G G的边权重由权重函数 w w w给出。选择一条边 (…

职称评审中,论文发表要求?

无论是医生、教师或其他等职业,职称评审无疑是一个非常重要的环节。而职称评审中的论文发表则是评定我们专业能力的重要一环,可如何才能让自己辛苦撰写的的论文被发表,达到论文发表都有哪些要求呢? 一、选题要新颖 编辑和审稿人…

VMware的三种网络模式及应用场景

在VMware中,虚拟机网络连接的方式主要有三种模式:桥接模式(Bridged Mode)、NAT模式(Network Address Translation Mode)、仅主机模式(Host-Only Mode)。每种模式都有其独特的用途和配…

SSM+Ajax实现广告系统

文章目录 1.案例需求2.编程思路3.案例源码(这里只给出新增部分的Handler和ajax部分,需要详情的可以私信我)4.小结 1.案例需求 使用SSMAjax实现广告系统,包括登录、查询所有、搜索、新增、删除、修改等功能,具体实现的效果图如下:…

『功能项目』状态模式转换场景【30】

本章项目成果展示 打开上一篇29Unity本地数据库读取进入游戏的项目, 本章要做的事情是通过状态者模式转换场景,在进入账号登陆界面前闪烁显示Logo 首先创建一个新的场景命名为StartUI 修改游戏场景名字 重命名为FightGame01 首先创建一个脚本文件夹&…

gazebo可能打不开的问题

如果经常遇到gazebo只能断网才能运行的时候,主要就是因为无法联网访问gazebo的在线模型库,此时我们一般无法在联网的情况下打开gazebo。 这个时候就直接将下载好的模型先放到~/.gazebo/models/文件夹下面即可: https://github.com/osrf/gazeb…

RTOS Sensor Framework对比

1.背景 传感器(Sensor)是物联网(IOT)的重要组成部分,用于感知和采集环境中的各种数据,大部分智能硬件都需要。 为使传感器能正常⼯作,驱动开发者需要开发不同的驱动程序,驱动程序要实现芯片寄存器\IO设置,又要响应使用…

搭建 canal 监控mysql数据到 elasticsearch 中(本机到远端sql)

搭建 canal 监控mysql数据到 elasticsearch 中(本机到远端sql) 需求: 要将 MySQL 数据库 info 中的 notice 和 result 表的增、删、改操作同步到 Elasticsearch 的 notice 和 result 索引,您需要正确配置 MySQL、Canal 、Canal Adapter 、 …

3--Web前端开发-前端工程化,vue项目

目录 端口配置 element 快速入门 table表格组件 分页组件 Dialog对话框组件 表单组件 端口配置 在vue.config.js中更改 源代码为 const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true })更改为 const { def…

Linux——redis主从复制、哨兵模式

一、redis 的安全加固: 对redis数据库访问的角度 auth // 验证登录redis 数据库的用户acl // 设置redis用户的权限将配置完成的ACL策略写入配置文件 config rewrite //目前redis生效的配置全部写入到默认配置文件的尾部写入到acl文件中,在加载配置文件时…

《论软件设计模式及其应用》通关范文,软考高级系统架构设计师

论文真题 设计模式(Design Pattern)是一套被反复使用的代码设计经验总结,代表了软件开发人员在软件开发过程中面临的一般问题的解决方案和最佳实践。使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性。现有的设计模式已经在前人的系统中…

每日一练:和为K的子数组

一、题目要求 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2: 输入:n…

python深度学习:从注意力机制到生成模型,全面解析现代AI技术

近年来,伴随着以卷积神经网络(CNN)为代表的深度学习的快速发展,人工智能迈入了第三次发展浪潮,AI技术在各个领域中的应用越来越广泛。注意力机制、Transformer模型(BERT、GPT-1/2/3/3.5/4、DETR、ViT、Swin…

OpenCV结构分析与形状描述符(10)检测并提取轮廓函数findContours()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在二值图像中查找轮廓。 该函数使用算法 253从二值图像中检索轮廓。轮廓是有用的工具,可用于形状分析和对象检测与识别。参见 OpenC…