如何使用领事服务发现处理Symfony2的运行时配置
我们的团队目前正在探索使用Concur为Symfony2应用程序进行服务发现的想法。由于处于相对前沿,讨论的方式很少。到目前为止,我们发现:如何使用领事服务发现处理Symfony2的运行时配置,symfony,service-discovery,consul,12factor,runtime-configuration,Symfony,Service Discovery,Consul,12factor,Runtime Configuration,我们的团队目前正在探索使用Concur为Symfony2应用程序进行服务发现的想法。由于处于相对前沿,讨论的方式很少。到目前为止,我们发现: 运行时配置 一个开发人员需要处理这样一个用例,但到目前为止还没有看到太多的活动 其中一个可能就是这个问题的答案 Sensio已经创造了自己的品牌。然而,在文档/官方博客文章的整合方面似乎很少 控制台,可在各种更改时触发 当前的想法是探索利用concur观察器与外部参数一起重新触发缓存构建。也就是说,如果服务半频繁地更改,那么这种操作的开销会引起一些关注
- 运行时配置李>
- 一个开发人员需要处理这样一个用例,但到目前为止还没有看到太多的活动李>
- 其中一个可能就是这个问题的答案
- Sensio已经创造了自己的品牌。然而,在文档/官方博客文章的整合方面似乎很少
- 控制台,可在各种更改时触发
基于上述情况,以及对Concur/Symfony内部结构的了解,这是一种可取的方法吗?如果没有,原因是什么,还有什么替代方案可用?一个简单的KV观察程序,它将值放入parameters.yml,触发一个缓存:clear在我看来是最简单的选项,并且还提供了编译的好处,这样它就不必每次都去Consour检查值是否更新。正如您所说,有些开销,但如果您不每5分钟更改一次参数,似乎就可以了 我们正在探索这一选择,但如果您在这方面取得任何进展,将不胜感激
[更新2016-02-23]我们已经实施了我上面提到的想法,并且按照预期效果运行:很好。请注意,我们仅在部署新版本时更改参数(因为我们还使用Consor的服务发现,所以无需更新参数中的服务列表)。我们之所以这么做,主要是因为它省去了在多台服务器上更改参数的枯燥工作。像往常一样:这可能对你不起作用,但我认为如果你像我之前说的那样,不每隔5分钟更改一次参数,你会很安全:)在我工作的公司,我们采取了不同的路线 我们没有反对Symfony接受运行时配置(它应该这样做,比如SpringDataConcur),而是决定让Concur更新Symfony配置,在概念上与Frank类似,在实现上与Frank不同 我们安装了concur和concur模板。我们创建一个包含整个parameters.yml文件的K/V条目对。例如: 键:
eblock/config/parameters.yml
parameters:
router.request_context.host: dev.eblock.ca
router.request_context.scheme: http
router.request_context.base_url: /
然后在位置/opt/consu template/config/eblock.cfg
添加了一个领事模板配置文件:
template {
source = "/opt/consul-template/templates/eblock-parameters.yml.ctmpl"
destination = "/var/www/eblock/app/config/parameters.yml"
command = "/opt/eblock/scripts/parameters_updated.sh"
}
ctmpl文件的内容包括:
{{key "eblock/config/parameters.yml"}}
最后,我们的参数\u updated.sh
脚本执行以下操作:
#!/bin/bash
readonly PROGNAME=$(basename "$0")
readonly LOCKFILE_DIR=/tmp
readonly LOCK_FD=201
lock() {
local prefix=$1
local fd=${2:-$LOCK_FD}
local lock_file=$LOCKFILE_DIR/$prefix.lock
# create lock file
eval "exec $fd>$lock_file"
# acquire the lock
flock -n $fd \
&& return 0 \
|| return 1
}
lock $PROGNAME || exit 0
export HOME=/root
logger "Starting composer install" && \
/usr/local/bin/composer install -d=/var/www/eblock/ --no-interaction && \
logger "Running composer dump-autoload" && \
/usr/local/bin/composer dump-autoload -d=/var/www/eblock/--optimize && \
logger "Running app/console c:c/c:w" && \
/usr/bin/php /var/www/eblock/app/console c:c -e=prod --no-warmup && \
/usr/bin/php /var/www/eblock/app/console c:w -e=prod && \
logger "Running doctrine commands" && \
/usr/bin/php /var/www/eblock/app/console doctrine:database:create --env=prod --if-not-exists && \
/usr/bin/php /var/www/eblock/app/console doctrine:migrations:migrate -n --env=prod && \
logger "Restarting php-fpm" && \
/bin/systemctl restart php-fpm &
知道concur和concur template服务都已启动,只要您的值在concur template的指定键中发生更改,它就会将文件转储到配置的目标中,并运行命令以更新参数
它就像一个符咒 如果您有新问题,请单击按钮提问。如果你有足够的声誉,问题就来了。或者,“星”它作为一个最喜欢的,你会被告知任何新的答案。我可能会误解,但这对我来说是一个与这个主题相关的问题。我要求更新他自己的问题,而不是让任何其他人回答(尽管那会很好),所以这是一个评论,评论可能不会作为答案发布在StackOverflow上。用户通过提问、回答和编辑活动参与。请阅读我之前评论中的链接。“这解释了为什么。”弗兰克评论道,这有点像是一个鸡蛋的场景。我自己也有一点挑战。关于你的问题,我们到目前为止还没有继续探讨这个问题。它被放在后台,因为我们的concur值目前保持相当稳定。如果你最终选择了建议的路线,并根据你的发现更新了这个答案,我认为这将是一个很好的答案,更符合Tunaki所提到的内容。我认为删除第一段并清理第二段,因为更多的是陈述,而不是问题,这是一个很好的方法。