现代云原生设计理念
前文传送门
Modern design
您将如何设计云原生应用程序? 您将遵循哪些原则、模式和最佳实践?哪些基础和操作需要特别关注?
The Twelve-Factor Application
目前被普遍接受的基于云的方法论是"十二要素应用程序"。它给出了开发人员遵循的一组原则和实践,以构建针对现代云环境优化的应用程序。
尽管适用于任何基于Web的应用程序,但许多从业者都将“十二要素”视为构建云原生应用程序的坚实基础。基于这些原则构建的系统可以快速部署和扩展,并可以添加功能以对市场变化做出快速反应。
重申“十二要素”方法论:
要素 | 描述 |
---|---|
Code Base | 代码仓库中一套代码,多处部署 |
Dependencies | 每个微服务显式声明并打包自己的依赖项、变更项 |
Configurations | 在环境中外挂配置 |
Backing Services | 将支撑性服务(数据存储,缓存,消息代理)看做附加资源,通过可寻址的URL公开,解耦资源与应用 |
Build, Release, Run | 严格区分构建和运行阶段,现代CI/CD技术实现了这一原则。 |
Processes | 将应用程序作为一个或多个无状态进程执行 |
Port Binding | 通过端口绑定暴露服务 |
Concurrency | 对进程模型进行横向扩展 |
Disposability | 快速启动和正常关闭可最大程度地提高鲁棒性 |
Dev/Prod Parity | 保持开发、生产尽可能相似 |
Logging | 将日志视为事件流。使用事件聚合器将事件传递到数据挖掘/日志管理工具 |
Admin Processes | 用一次性动作 执行管理任务 |
凯文·霍夫曼(Kevin Hoffman)详细介绍了最初的12个要素(写于2011年)。此外,他针对现代云应用程序提出另外三个因素。
新要素 | 描述 |
---|---|
API First | 使一切成为服务(如果你的代码将被前端、网关或其他服务使用) |
Telemetry | 在程序设计中包含遥测、健康检查 |
Authentication/Authorization | 一开始就实现身份认证和鉴权 |
关键的设计考量
除了十二要素方法提供的指导之外,还必须注意几个关键的设计考量。
Communication 通信
-
前端如何与后端服务通信?是直接沟通吗?或者提炼出后端网关,提供灵活性、管控力和安全性?
-
后端服务之间如何通信? 直接Http调用,可能导致耦合并影响性能和敏捷性?还是考虑使用queue/Topic技术解耦消息?
第4章“云原生通信模式”详细介绍了通信。
Resiliency 弹性
微服务架构将系统从进程内网络通信转移到进程外网络通信。在分布式体系结构中,当服务B不响应来自服务A的网络请求会发生什么?或者,当服务C暂时不可用,其他调用C的服务被阻塞时该怎么办?
第6章“云原生弹性”详细介绍了弹性。
Distributed Data 分布式数据 分布式事务
按照设计,每个微服务都封装自己的数据,通过公开接口暴露。
如果是这样,您如何实现跨多个服务的数据查询/事务?
分布式数据将在第5章“云原生数据模式”中详细介绍。
Identity 身份
您的服务将如何识别谁在访问它以及他们拥有哪些权限?
身份将在第8章“身份”中详细介绍。
Ref
- https://tanzu.vmware.com/content/blog/beyond-the-twelve-factor-app
- https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/definition
- 👉公众号后台回复 cloud-native, 获取微软出品《Architecting Cloud Native .NET Apps》PDF
本文来自博客园,作者:{有态度的马甲},转载请注明原文链接:https://www.cnblogs.com/JulianHuang/p/14377177.html
欢迎关注我的原创技术、职场公众号, 加好友谈天说地,一起进化