12因子:动态后端配置

时间:2013-10-01 13:48:56

标签: 12factor

Twelve-Factor App后端的默认配置是将其(网络)位置放在环境变量中,例如DB=mysql://user:pw@host/db_name

但是如果你的后端配置更具动态性,推荐的方法是什么?在我的情况下,应用程序可以使用1到n个后端,具体取决于环境。我的想法是使用像JSON这样的序列化格式,并将它放在像

这样的单个变量中
DB="{1: 'host:port', 2: 'host:port'}"

这是处理这种情况的最佳方式还是更好的选择?

1 个答案:

答案 0 :(得分:2)

我不知道这是否是“首选”方法,但我认为它会起作用。

您将希望为将来的开发人员记录此特性,并且可能会在这个不寻常的设置中添加一些指向错误配置的详细错误/日志记录。例如,如果您只想指定一个数据库,则应该清楚它需要以准JSON样式指定。


我认为更多的12因素y是在服务器之间设置一个中间负载均衡器。这样,您的应用可以连接到负载均衡器或单个服务器,而对底层服务的性质几乎没有透明度。

所以而不是:

SetEnv DB {mysql://something@somewhere, mysql://something@somewhereelse}

你会有

SetEnv DB mysql://something@load-balancer

并且负载均衡器处理幕后的多个数据库。


您还可以拥有一个2-db系统,一个用于读取,另一个用于写入。读取可以进行负载平衡并复制master-server

SetEnv READ_DB  mysql://something@load-balancer
SetEnv WRITE_DB mysql://something@master-server

然后在测试情况下,他们会使用相同的连接字符串:

SetEnv READ_DB  mysql://something@load-balancer
SetEnv WRITE_DB $READ_DB  # not sure about syntax here