十二因子应用(三)

黑客帝国
• 阅读 1332

原文:https://12factor.net/zh_cn/

III. 配置

将配置保存在环境中

应用的配置是指在各种部署(预发,线上,开发环境等)时的信息。这包括:

  • 处理数据库,缓存或其他后端服务的资源
  • 亚马逊s3或Twitter等外部服务的验证信息
  • 像部署用的主机名这种预部署的值信息

应用有时将部署信息放在代码的常量中。这违反了12因子规则,规则要求将配置从代码中隔离。配置可以在各种差异极大的部署中传递,代码不能。

一种检验应用是否配置正确成为开箱即用的方式是,应用可以在任何时刻开源,不需要对一些凭证信息妥协。

记住这里对“配置”的定义不包括应用内部配置,比如Rails的config/routes.rb, 或者代码模块是如何连接到Spring的。这种类型的配置在部署时不会差异极大,所以最好还是写在代码里。

另一种做配置的方式是使用不会提交到版本控制里的配置文件(config files),如Rails的config/database.yml。这相比会提交到代码库中的常量是一种巨大的进步,但仍有弱点:在将配置文件提交到仓库时很容易出错;配置文件有一种以各种格式并放在各种地方的趋势,使得在一处管理所有配置很难。而且,这些格式会与使用的语言和框架有关。

12因子应用将配置信息存储在环境变量中(一般是env vars或env)。Env vars可以在部署时很简单的做变更并且不需要更改任何代码;不像配置文件,它们几乎没有机会被意外的提交到代码库;也不像自定义配置文件,或其他像Java System Properties的配置机制,它们是与语言和操作系统无关的。

配置管理的另一个层面是分组。有时应用被批量配置到一个已经被特定部署命名过的分组(一般叫做“环境”),比如Rails中的 开发(development),测试(test),生产(production) 环境。这样的方式不太适合伸缩: 当应用有新的环境部署时,就需要一个新环境的命名,比如预发和测试。当项目发展起来,开发可能会添加他们特定的环境,比如 joes-staging,会造成管理应用部署的配置爆炸。

在12因子应用中,env 变量是粗粒度控制。它们从不被分组成“环境”,但每个部署集群会被独立管理。这种方式可以更平滑的对应用做伸缩,在其生命周期中部署到更多的集群。

本文来自微信公众号「麦芽面包」,id「darkjune_think」
转载请注明。
交流Email: zhukunrong@yeah.net

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
C++ OpenCV视频操作之KLT稀疏光流对象跟踪(二)
前言上一篇《COpenCV视频操作之KLT稀疏光流对象跟踪(一)(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzA4Nzk0NTU0Nw%3D%3D%26mid%3D2247486213%26idx%
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
Carhart四因子模型A股实证(附源码)
01说明接上一篇《FamaFrench三因子回归A股实证(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzU5NDY0NDM2NA%3D%3D%26mid%3D2247486057%26
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
黑客帝国
黑客帝国
Lv1
你就在旁边却感觉隔了一个世纪.
文章
3
粉丝
0
获赞
0