应用程序十二要点解读

Posted on Sat 19 September 2020 in Journal

应用程序十二要点是Heroku 所提出的一种用于构建软件即服务应用程序的方法学,参见 https://12factor.net, 解读如下

  • 使用声明性格式进行设置自动化,以最小化新加入项目的开发者的时间和学习成本;
  • 与底层操作系统之间保持简洁的契约,在执行环境之间提供最大的可移植性;
  • 适合在现代云平台上部署,避免对服务器和系统管理的额外需求;
  • 最小化开发和生产之间的分歧,实现持续部署以实现最大灵活性;
  • 可以扩展而无需对工具,架构或开发实践进行重大更改。

具体12条目解读如下:

1) Codebase 代码库 One codebase tracked in revision control,many deploys 用一个代码库进行版本控制和应用程序的多次部署,代码,配置,初始化数据都应该纳入版本管理,在统一的代码库中为代码,配置,数据,测试和部署脚本都建立独立的项目和模块

2) Dependencies 依赖 Explicitly declare and isolate dependencies 显式声明和隔离依赖关系,通过maven ,gradle,scons 等构建工具明确声明所需要的够用的依赖项和版本号,避免版本冲突和循环依赖,象Java中臭名昭著的依赖黑洞就曾浪费了程序员大量的时间,SpringBoot 的 starter 依赖包就可以大大简化依赖配置。

3) Config 配置 Store config in the environment 配置和代码都是应用程序不可或缺的组成部分,可以存储配置在环境变量中或者与环境相关的配置文件,配置服务中,比如 application-dev.yml,application-lab.yml,application-bts.yml,application-prod.yml,这些配置文件不要和代码放在一起,建议放在不同的代码仓库中。

4) Backing services 支持服务 Treat backing services as attached resources 将支持服务作为附加资源,不管你的后端数据库是 Oracle,MySQL 还是 PostgreSQL,消息队列是ActiveMQ,RabbitMQ 或是Kafaka ,你的上层应用程序无需做特殊处理,底层适配也很容易地切换不同的支持服务资源。

5) Build,release,run 构建,发布和运行 Strictly separate build and run stages 严格区分构建,发布和运行阶段,开发人员的每次改动都会触发构建,但是发布是要经过严格的验收测试的,运行时的代码不允许任何随意修改,遵循构建发布和运行的流程。

6) Processes 进程 Execute the app as one or more stateless processes 以一个或多个无状态进程来运行应用程序,状态应该保存在共享的缓存或数据库中,这样微服务可以任意启停,轻松升级和替换,也利于水平扩展。

7) Port binding 端口绑定 Export services via port binding 通过端口绑定导出服务,也就是通过暴露独立的端口来提供服务,比如HTTP的80,HTTS的443,SIP的5060,不需要依赖于容器。

8) Concurrency 并发 Scale out via the process model 通过进程模型横向扩展。

9) Disposability 一次性 Maximize robustness with fast startup and graceful shutdown 通过快速启动和优雅退出来最大限度地提高健壮性。

10) Dev/prod parity 相似的开发和产品环境 Keep development,staging,and production as similar as possible 保持开发,测试和产品环境尽可能相似。

11) Logs 日志 Treat logs as event streams 将日志视为事件流。

12) Admin processes 管理过程 Run admin/management tasks as one-off processes 将管理/管理任务作为一次性进程运行。

Quote

转变要经历三个阶段:结束-迷茫-重生,转变总是从结束开始的,结束之后紧跟着一段时间的迷茫和痛苦,在经历了迷茫和痛苦之后,慢慢才会有新的开始,也就是重生。

  • 威廉.布瑞奇 “转变之书”

关于改变,每个人都有选择,这个选择,既需要勇气,也需要自省

  • 陈海贤“了不起的我-自我发展的心理学”