【问题标题】:12-Factor: dynamic backend configuration12 因素:动态后端配置
【发布时间】:2013-10-01 13:48:55
【问题描述】:

十二要素应用程序后端的默认配置是将其(网络)位置放在环境变量中,例如DB=mysql://user:pw@host/db_name.

但是,如果您的后端配置更加动态,那么推荐的方式是什么?在我的情况下,该应用程序可以根据环境使用 1 到 n 个后端。我的想法是使用像 JSON 这样的序列化格式,并将其放在单个变量中,如

DB="{1: 'host:port', 2: 'host:port'}"

这是处理这种情况的更好方法还是更好的选择?

【问题讨论】:

  • 这个问题是不久前被问到的 - 您是否提出了适合您的解决方案?

标签: 12factor


【解决方案1】:

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

您将希望为未来的开发人员记录此特质,并可能添加一些详细的错误/日志记录,以指出此异常设置中的错误配置。例如,如果你只想指定一个数据库,应该清楚无论如何都需要以准JSON的方式指定。


不过,我认为更多 12-factor-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

【讨论】:

  • 虽然这不完全符合我的要求(因为有时客户端需要连接到一个服务器,有时需要连接到多个服务器),但它仍然是一个很好的灵感。我倾向于使用某种注册表/主服务器(类似于负载平衡器),每个普通服务器都会在其中注册自己,以便客户端可以使用这个主服务器来查询系统配置。
  • 听起来是一回事。这个想法只是将最小量的配置负担放在 Web 应用程序上,并尽可能多地为支持服务分配自己的配置。
  • 哦,如果您需要多个连接,因为它们是不同的数据集或数据库类型,那么它们每个都应该成为具有自己配置行的支持服务。跨度>
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多