在运行时配置Symfony 2

时间:2014-05-18 22:27:08

标签: php symfony apache-zookeeper

我正在使用Symfony2为我的公司创建Web服务。我们公司使用集中配置服务(Zookeeper / etcd)来管理我们服务的配置信息。例如MySQL,Redis,Memcached等的连接/主机信息。配置可能会在当天随机变化。例如,在我们的数据库集群中添加或删除MySQL服务器时。因此,无法在yml / xml中对配置进行硬编码。

所以我正在寻找一种在应用程序启动时修改config.yml值的方法。配置中的某些值将是静态的。例如Twig和Switfmailer配置,但需要动态设置Doctrine和Redis的其他值。

在Symfony应用程序引导之前无法确定配置值,并且无法缓存或编译这些值。我已经尝试了一些事情来挂钩启动过程并修改配置,但没有任何作用。

其他信息

我正在处理的架构示例如下所述:http://aredko.blogspot.com/2013/10/coordination-and-service-discovery-with.html除了MySQL和Redis等服务外,我们还需要发现自己的RESTful服务。 Zookeeper被用作服务发现代理。在运行时/启动之前,不知道服务的位置(主机名)和确切配置。

2 个答案:

答案 0 :(得分:2)

我建议你看看OpenSkyRuntimeConfigBundle

bundle允许您用一些逻辑替换传统的容器参数(通常用parameters.yml写入)。这为您提供了一种向Zookeeper进行查询的方法,以检查最新的配置变量并将其注入Symfony2服务,而无需重建容器。

由于您可以以任何可能的方式编写逻辑,您还可以为参数实现本地缓存。 ZK读取性能很高但总是需要网络往返。如果性能对您很重要,也可以在此处使用缓存。

答案 1 :(得分:-1)

如果您关心性能,我甚至不会考虑在没有缓存的情况下运行Symfony 2.

听起来你并没有完全确定构建基础设施的最佳方式,同时扩大/缩小规模。如果不了解更多关于更大的图片,那么很难具体,但如何将Symfony 2 db配置指向代理服务器,并在网络级别管理路由。然后,该应用程序仍然无视数据库服务器的流失......