12 factor in Cloud Native
什么是云原生
云原生(Cloud Native)最初是由 Pivotal公司的Matt Stine于2013年提出的。Pivotal公司先后开源了云原生的Java开发框架SpringBoot和Spring Cloud。随后,Google在2015年成立了CNCF(CloudNative Computing Foundation),使得云原生受到越来越多的关注。
从本质上来说,云原生是一种设计模式,它要求云原生应用具备可用性和伸缩性,以及自动化部署和管理的能力,可随处运行,并且能够通过持续集成、持续交付工具提升研发、测试与发布的效率。
云原生十二要素
《The Twelve-Factor App》是Heroku创始人 Adam Wiggins 在2012年提出的。十二要素中提到的特征并不特定于云提供者、平台或语言。这些要素代表了针对云环境中蓬勃发展的可移植弹性应用程序(特别是“软件即服务”应用程序)的一组准则或最佳实践。
Codebase: 一份基准代码(Codebase),多份部署(Deploy)
Dependencies: 显式声明依赖关系(Dependency)
Configuration: 在环境中存储配置
Backing services: 把后端服务(backing services)当作附加资源
Build, release, run: 严格分离构建、发布和运行
Processes: 以一个或多个无状态进程运行应用
Port binding: 通过端口绑定(Port binding)来提供服务
Concurrency: 通过进程模型进行扩展
Disposability: 快速启动和优雅终止可最大化健壮性
Dev/prod parity: 尽可能地保持开发、预发布和线上环境相同
Log: 把日志当作事件流
Admin processes: 后台管理任务当作一次性进程运行
十二要素进阶
在十二要素发布之后,就职于Pivotal公司的Kevin Hoffman出版了Beyond the Twelve-Factor App一书,书中不仅对原十二要素进行了更加详细的阐述,还增加了三个新要素
优先考虑API设计(API first): API如同契约,一旦生效,就应该尽可能少地被改动。若API在投入使用后再进行修改,其影响范围可能不易掌控,还会波及很多外部系统。
通过遥测感知系统状态(Telemetry): 对于部署在云环境上的应用,其系统环境是封闭且隔离的,在出现状况时不应该登录有问题的物理服务器去观察和收集应用的状态。
认证和授权(Authentication and Authorization): 将安全问题完全抛给云平台是很危险的,因此建议采用OAuth2认证和RBAC授权等比较完善的安全机制。
Reference
https://zhuanlan.zhihu.com/p/243404169
- 未来架构:从服务化到云原生
- 云原生架构进阶实战
- 可伸缩架构(第2版):云环境下的高可用与风险管理
https://12factor.net
Disclaimer
- License under
CC BY-NC 4.0
- Copyright issue feedback
me#imzye.me
, replace # with @ - Not all the commands and scripts are tested in production environment, use at your own risk
- No privacy information is collected here