【软考备考】云原生架构:十二要素应用、容器化(Docker)、编排(Kubernetes)、服务网格(Istio)、无服务器(Serverless)
云原生架构:十二要素应用、容器化(Docker)、编排(Kubernetes)、服务网格(Istio)、无服务器(Serverless)
一、十二要素应用
定位:云原生应用的设计纲领与基本原则。
核心思想:为构建易于部署、扩展、维护的SaaS应用提供了一套方法论。
十二要素(精炼版):
| 要素 | 核心要求 | 举例与解释 |
|---|---|---|
| 1. 基准代码 | 一份代码库,多份部署 | 使用Git等版本控制系统管理一份代码,可部署到开发、测试、生产环境。 |
| 2. 依赖 | 显式声明依赖 | 使用pom.xml(Maven)、requirements.txt(Python)等文件显式声明,而非隐式依赖系统库。 |
| 3. 配置 | 在环境中存储配置 | 将数据库URL、API密钥等配置信息通过环境变量注入,与代码分离。 |
| 4. 后端服务 | 把后端服务当作附加资源 | 将数据库、消息队列、缓存等服务视为通过URL访问的“附加资源”,可轻松切换。 |
| 5. 构建,发布,运行 | 严格分离构建和运行 | 构建阶段将代码和依赖打包成制品(如Docker镜像);发布阶段将制品与配置结合;运行阶段启动应用进程。 |
| 6. 进程 | 以一个或多个无状态进程运行应用 | 会话状态等应存储在外部服务(如Redis)中,而非进程内存。这是实现水平扩展的前提。 |
| 7. 端口绑定 | 通过端口绑定提供服务 | 应用是自包含的,通过指定的端口直接对外提供服务(如Spring Boot内嵌Tomcat)。 |
| 8. 并发 | 通过进程模型进行扩展 | 通过新增进程(如K8s Pod副本)来应对高并发,而非依赖多线程。 |
| 9. 易处置 | 快速启动和优雅终止 | 进程应能快速启动,并在收到终止信号时优雅关闭,最大化健壮性。 |
| 10. 开发/生产环境等价 | 保持环境高度相似 | 利用Docker等容器技术,消除开发、测试、生产环境之间的差异。 |
| 11. 日志 | 把日志当作事件流 | 应用不关心日志文件的存储和处理,只需将日志事件输出到标准输出(stdout)。 |
| 12. 管理进程 | 管理任务当作一次性进程运行 | 数据库迁移、脚本执行等管理任务,应使用与正常应用进程相同的环境运行。 |
软考关联:是设计和评审微服务架构的理论依据。在案例分析和论文中,可用以论证设计的合理性。
二、容器化
定位:云原生应用的打包与交付标准。
核心技术:Docker
核心概念:
-
镜像:一个轻量级、独立的、可执行的软件包,包含运行应用所需的一切。
-
容器:镜像的运行时实例。它在隔离的进程中运行。
-
Dockerfile:一个文本文件,包含了一系列构建镜像的指令。
价值:
-
环境一致性:彻底解决“在我这儿是好的”问题。
-
隔离性:资源隔离,应用互不影响。
-
轻量高效:共享主机OS内核,启动秒级,资源开销远小于虚拟机。
软考关联:容器是实现微服务独立部署和弹性伸缩的物理基础。需理解Docker镜像的分层结构。
三、编排
定位:云原生应用的大脑与运维平台。
事实标准:Kubernetes
核心概念与架构:
| 概念/组件 | 作用与解释 |
|---|---|
| Master节点 | 集群的大脑,负责调度和管理。 |
| Node节点 | 具体运行容器的工作机器。 |
| Pod | K8s最小调度单元,包含一个或多个紧密关联的容器。 |
| Deployment | 定义Pod的期望状态,控制无状态应用的部署、副本数和滚动更新。 |
| Service | 为一组Pod提供稳定的网络访问入口,实现服务发现和负载均衡。 |
| Ingress | 管理集群外部访问的API对象,提供HTTP路由、SSL终结等功能。 |
| ConfigMap/Secret | 分别用于管理应用配置和敏感信息,实现配置与镜像解耦。 |
| 声明式API | 用户提交一个YAML/JSON文件(声明期望状态),K8s负责驱动当前状态向期望状态收敛。 |
软考关联:必考重点。需掌握其核心组件、资源对象及工作原理。它是实现应用高可用、自愈、弹性伸缩的核心。
四、服务网格
定位:微服务架构的通信基础设施层。
主流实现:Istio
核心思想:通过 Sidecar(边车) 模式,将服务间通信的复杂性(如熔断、限流、观测、安全)从业务代码中彻底解耦。
核心架构:
-
数据平面:由一组以Sidecar方式部署的智能代理(Istio默认使用Envoy)组成。它拦截并控制所有进出Pod的网络流量。
-
控制平面:管理和配置数据平面中的代理,下发策略和收集遥测数据。
核心功能:
-
流量管理:金丝雀发布、故障注入、动态路由。
-
可观测性:丰富的指标、日志和分布式追踪。
-
安全:服务间的mTLS加密通信、细粒度的访问控制。
软考关联:理解服务网格解决的核心问题——将微服务的通用“交叉关切点”下沉到基础设施层。这是微服务治理的高阶形态。
五、无服务器
定位:云原生架构的更高层次抽象,让开发者只关注业务逻辑。
核心模式:
-
FaaS:函数即服务。以函数为单元部署和运行代码,由事件(如HTTP请求、文件上传)触发,按执行时间和次数计费。
-
例子:AWS Lambda, Azure Functions。
-
-
BaaS:后端即服务。直接使用云厂商提供的后端服务,如数据库、认证、存储等。
特点:
-
无需运维:无需管理服务器。
-
事件驱动:由特定事件触发执行。
-
极致弹性:从零扩展到高并发完全自动。
-
按需计费:函数不运行时成本为零。
软考关联:理解其适用场景(事件处理、API网关后端、数据ETL)和局限性(冷启动、执行时长限制、状态管理复杂)。
软考备考要点与答题技巧
1. 选择题考点
-
直接考查概念:如“十二要素应用中,配置应存储在何处?”(答案:环境变量)。
-
考查组件功能:如“Kubernetes中,负责实现滚动更新的资源对象是什么?”(答案:Deployment)。
-
考查架构理解:如“服务网格的数据平面主要由什么构成?”(答案:Sidecar代理)。
2. 案例分析题考点
-
场景:传统单体应用迁移到云原生。
-
问题与答题思路:
-
如何进行应用改造?
-
答:参照十二要素应用原则,如实现无状态、配置外置、日志输出到stdout等。
-
-
如何打包和部署?
-
答:使用Docker进行容器化。使用Kubernetes进行编排,通过Deployment部署应用,通过Service暴露服务。
-
-
如何保证稳定性和可观测性?
-
答:在微服务复杂度提升后,引入服务网格来实现熔断、限流、链路追踪等治理功能。
-
-
某些特定场景如何优化成本?
-
答:对于事件驱动、流量波峰波谷明显的场景,可以考虑使用Serverless架构。
-
-
3. 论文题考点
-
可能的题目:《论云原生架构的演进与实践》、《论基于Kubernetes的微服务治理》。
-
写作框架:
-
引言:介绍项目背景和挑战。
-
总体架构:画出以Kubernetes为核心的云原生架构图。
-
分点论述:
-
应用改造:如何遵循十二要素。
-
容器化与编排:如何利用Docker和K8s实现敏捷部署和弹性。
-
服务治理:如何引入Istio解决通信复杂性。
-
创新实践:如何在部分场景使用Serverless。
-
-
总结:对比改造前后的效果,并反思遇到的挑战(如复杂性、学习成本)。
-

更多推荐

所有评论(0)