11

私たちのチームは現在、Consul を使用した Symfony2 アプリケーションのサービス検出のアイデアを検討しています。相対的な最前線にいるため、議論の邪魔になるものはほとんどありません。これまでのところ、次のことを発見しました。

現在の考えでは、Consul ウォッチャーを利用して、外部パラメーターと共にキャッシュ ビルドを再トリガーすることを検討しています。とはいえ、サービスが頻繁に変更される場合、そのような操作のオーバーヘッドについて懸念があります。

上記と Consul/Symfony 内部の知識に基づいて、それは賢明なアプローチでしょうか? そうでない場合、その理由と、利用可能な代替手段は何ですか?

4

2 に答える 2

4

私が働いている会社では、私たちは別のルートを取りました。

ランタイム構成を受け入れるために Symfony と戦う代わりに (たとえば、Spring Data Consul のようにすべきこと)、Consul が Symfony の構成を更新するようにすることにしました。これは、Frank が行ったのとは概念が似ていて、実装が異なります。

Consul と Consul Template をインストールしました。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: /

次に、consul テンプレート構成ファイルが/opt/consul-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"}}

最後に、parameters_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 &

consul と consul-template サービスの両方が起動していることがわかれば、consul テンプレートの指定されたキーで値が変更されるとすぐに、構成された宛先にファイルがダンプされ、更新されたパラメーターのコマンドが実行されます。

それは魅力のように機能します。=)

于 2016-07-26T20:08:41.967 に答える