微服务12要素

少于 1 分钟读完

微服务要素:The Twelve Factors

软件通常会作为一种服务来交付,它们被称为网络应用程序,或“软件即服务”(SaaS)。“十二要素应用程序” 12-Factor App 是由 PaaS 先驱 Heroku 公司的 CTO Adam Wiggins 提出的,为构建如下的 SaaS 应用提供了方法论:

  • 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目;
  • 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性;
  • 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源;
  • 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发;
  • 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展;

十二要素

  1. 基准代码:一份基准代码,多份部署。
  2. 依赖:显式声明依赖关系。
  3. 配置:在环境中存储配置。推荐将应用的配置存储于环境变量中 (env vars, env)。环境变量可以非常方便地在不同的部署间做修改,却不动一行代码。

    环境配置采用非版本模式,采用附加文件方式加载到微服务应用程序中;避免使用和环境相关的硬编码

  4. 后端服务:把后端服务当作附加资源。

    如数据库、消息/队列,缓存,目录服务,邮件服务,数据存储服务;可以松散地整合外部资源

  5. 构建,发布,运行:严格分离构建和运行。
  6. 进程:以一个或多个无状态进程运行应用。任何需要持久化的数据都要存储在后端服务内,比如数据库。粘性 Session 是 twelve-factor 极力反对的。Session 中的数据应该保存在诸如 Memcached 或 Redis 这样的带有过期时间的缓存中。
  7. 端口绑定:通过端口绑定提供服务。

    尽量避免本地文件和进程的通讯方式;通过不同的端口绑定不同的请求协议

  8. 并发:通过进程模型进行扩展。
  9. 易处理:快速启动和优雅终止可最大化健壮性。进程应当追求最小启动时间;进程一旦接收终止信号(SIGTERM) 就会优雅的终止。进程还应当在面对突然死亡时保持健壮。

    懒加载、快速启动

  10. 开发环境与线上环境等价:尽可能的保持开发,预发布,线上环境相同。
  11. 日志:把日志当作事件流。不应该试图去写或者管理日志文件。相反,每一个运行的进程都会直接的标准输出(stdout)事件流。开发环境中,开发人员可以通过这些数据流,实时在终端看到应用的活动。

    通过日志对微服务进行监控

  12. 管理进程:后台管理任务当作一次性进程运行。

    微服务管理或维护系统是微服务应用维护的基础部分,要作为一次性程序运行

参考文献

  • http://www.361way.com/12factor/5608.html
  • https://www.cnblogs.com/guangmangchen/p/11180821.html

更新时间: