微服务要素:The Twelve Factors
软件通常会作为一种服务来交付,它们被称为网络应用程序,或“软件即服务”(SaaS)。“十二要素应用程序” 12-Factor App 是由 PaaS 先驱 Heroku 公司的 CTO Adam Wiggins 提出的,为构建如下的 SaaS 应用提供了方法论:
- 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目;
- 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性;
- 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源;
- 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发;
- 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展;
十二要素
- 基准代码:一份基准代码,多份部署。
- 依赖:显式声明依赖关系。
- 配置:在环境中存储配置。推荐将应用的配置存储于环境变量中 (env vars, env)。环境变量可以非常方便地在不同的部署间做修改,却不动一行代码。
环境配置采用非版本模式,采用附加文件方式加载到微服务应用程序中;避免使用和环境相关的硬编码
- 后端服务:把后端服务当作附加资源。
如数据库、消息/队列,缓存,目录服务,邮件服务,数据存储服务;可以松散地整合外部资源
- 构建,发布,运行:严格分离构建和运行。
- 进程:以一个或多个无状态进程运行应用。任何需要持久化的数据都要存储在后端服务内,比如数据库。粘性 Session 是 twelve-factor 极力反对的。Session 中的数据应该保存在诸如 Memcached 或 Redis 这样的带有过期时间的缓存中。
- 端口绑定:通过端口绑定提供服务。
尽量避免本地文件和进程的通讯方式;通过不同的端口绑定不同的请求协议
- 并发:通过进程模型进行扩展。
- 易处理:快速启动和优雅终止可最大化健壮性。进程应当追求最小启动时间;进程一旦接收终止信号(SIGTERM) 就会优雅的终止。进程还应当在面对突然死亡时保持健壮。
懒加载、快速启动
- 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同。
- 日志:把日志当作事件流。不应该试图去写或者管理日志文件。相反,每一个运行的进程都会直接的标准输出(stdout)事件流。开发环境中,开发人员可以通过这些数据流,实时在终端看到应用的活动。
通过日志对微服务进行监控
- 管理进程:后台管理任务当作一次性进程运行。
微服务管理或维护系统是微服务应用维护的基础部分,要作为一次性程序运行
参考文献
- http://www.361way.com/12factor/5608.html
- https://www.cnblogs.com/guangmangchen/p/11180821.html