云原生要则
取自:https://learn.microsoft.com/zh-cn/dotnet/architecture/cloud-native/definition
1 云原生定义
云原生技术使组织能够在新式动态环境(如公有云、私有云和混合云)中构建和运行可缩放的应用程序。 容器、服务网格、微服务、不可变基础结构和声明性 API 便是此方法的范例。
这些技术实现了可复原、可管理且可观察的松散耦合系统。 它们与强大的自动化相结合,使工程师能够在尽量减少工作量的情况下,以可预测的方式频繁地进行具有重大影响力的更改。
2 云原生系统模型
基于[平台即服务 (PaaS)计算基础结构,将底层基础结构视为可处置:可在几分钟内进行预配,并根据需要重设大小、缩放或销毁(通过自动化)。
DevOps 概念:宠物 (Pets) 与牲畜 (Cattle)。
在传统数据中心内,服务器被视为“宠物”:一台物理计算机,被赋予有意义的名称,并受到照料。 你通过将更多资源添加到相同计算机(纵向扩展)来进行缩放。 如果服务器出现问题,你会进行修复,使它恢复正常运行状况。 如果服务器不可用,则每个人都会注意到。
“牲畜”服务模型有所不同。 你会将每个实例预配为虚拟机或容器。 它们是相同的,并分配有系统标识符(如服务-01、服务-02 等等)。 你通过创建更多实例(横向扩展)来进行缩放。 当一个实例不可用时,无人会注意到。
牲畜模型采用不可变基础结构。 服务器不会进行修复或修改。 如果一台服务器发生故障或需要更新,则会销毁它并预配新服务器 – 所有操作都通过自动化完成。
云原生系统采用牲畜服务模型。 它们会在基础结构横向缩减或扩展时持续运行,而不考虑运行它们的计算机。
3 构建云原生应用程序要则
十二要素应用程序是一种被广泛认可的用于构建基于云的应用程序的方法。 它介绍了一系列原则和做法,开发人员在构建针对新式云环境进行优化的应用程序时需要遵循这些内容。 其中特别关注了跨环境的可移植性和声明性自动化。
尽管适用于任何基于 Web 的应用程序,不过许多从业人员都将十二要素视为构建云原生应用的坚实基础。 基于这些原则构建的系统可以快速部署和缩放,或添加功能以快速应对市场变化。
十二要素方法如下:
因素 | 说明 |
---|---|
1 - 基本代码 | 每个微服务都有单个基本代码,存储在其自己的存储库中。 它通过版本控制进行跟踪,可以部署到多个环境(QA、暂存、生产)。 |
2 - 依赖项 | 每个微服务都隔离并打包其自己的依赖项,以在不影响整个系统的情况下进行更改。 |
3 - 配置 | 配置信息通过代码之外的配置管理工具移出微服务和实现外部化。 在应用了正确配置的情况下,相同部署可以在环境间传播。 |
4 - 支持服务 | 辅助资源(数据存储、缓存、消息中转站)应通过可寻址 URL 进行公开。 这样做可使资源与应用程序分离,使其可以互换。 |
5 - 生成、发布、运行 | 每个版本都必须在生成、发布和运行阶段执行严格的分离。 各自都应使用唯一 ID 进行标记,并支持回滚功能。 新式 CI/CD 系统有助于实现此原则。 |
6 - 进程 | 每个微服务应在其自己的进程中执行,与其他正在运行的服务隔离。 将所需状态外部化到支持服务,如分布式缓存或数据存储。 |
7 - 端口绑定 | 每个微服务都应是独立的,其接口和功能在自己的端口上公开。 这样做可与其他微服务隔离。 |
8 - 并发 | 当容量需要增加时,跨多个相同进程(副本)横向扩展服务,而不是在功能最强大的可用计算机上纵向扩展单个大型实例。 将应用程序开发为并发应用程序,从而无缝地在云环境中横向扩展。 |
9 - 可处置性 | 服务实例应是可处置的。 支持快速启动以增加可伸缩性机会,以及支持正常关闭以使系统保持正确状态。 Docker 容器以及业务流程协调程序本质上满足此要求。 |
10 - 开发/生产等同 | 使整个应用程序生命周期中的各个环境尽可能相似,避免使用成本高昂的快捷方式。 在这里,通过促进相同的执行环境,容器的采用可以做出很大贡献。 |
11 - 日志记录 | 将微服务生成的日志视为事件流。 使用事件聚合器处理它们。 将日志数据传播到数据挖掘/日志管理工具(如 Azure Monitor 或 Splunk)并最终传播到长期存档。 |
12 - 管理员进程 | 以一次性进程形式运行管理性/管理任务,例如数据清理或计算分析。 使用独立工具从生产环境调用这些任务,但独立于应用程序。 |
在超越十二要素应用一书中,作者 Kevin Hoffman 详细介绍了原始的所有 12 个要素(于 2011 年撰写)。 此外,他讨论了反映当今新式云应用程序设计的三个额外要素。
新要素 | 说明 |
---|---|
13 - API 优先 | 使一切成为服务。 假设前端客户端、网关或其他服务会使用你的代码。 |
14 - 遥测 | 在工作站上,你可深入了解应用程序及其行为。 在云中,你无法这样。 确保设计包括监视、特定于域和运行状况/系统数据的集合。 |
15 - 身份验证/授权 | 从开始便实现标识。 请考虑公有云中提供的 RBAC(基于角色的访问控制)功能。 |
4 最后
爱你