11

Наша команда в настоящее время изучает идею обнаружения службы для приложения Symfony2 с использованием Consul. Находясь в относительной границе, на пути обсуждения очень мало. До сих пор мы обнаружили:Как обрабатывать временную конфигурацию Symfony2 с помощью службы поддержки Consul

  • Конфигурация времени выполнения has previously been shot down.
  • A bundle exists для обработки такого прецедента, но также не видел много активности в последнее время.
  • Один из contributors of said bundle suggested, который может быть ответом на проблему External Parameters.
  • Sensio создал own Consul SDK. Тем не менее, кажется, есть немного в пути документации/официальные статьи блога повторно: Symfony2 интеграция
  • Consol provides watches, которые могут быть вызваны на различные изменения

Текущие мысли исследовать используя наблюдателей Consul повторно инициировать сбор кеша вместе с внешними параметрами. Тем не менее, существует некоторая озабоченность по поводу накладных расходов на такую ​​операцию, если услуги часто меняются.

Основываясь на вышесказанном и знании внутренних дел Consul/Symfony, это было бы целесообразным подходом? Если нет, то почему и какие альтернативы доступны?

ответ

2

Простой наблюдатель KV, который помещает значение в parameters.yml, запускает кеш: clear - самый простой вариант, на мой взгляд, и также дает преимущество компиляции, так что ему не нужно каждый раз переходить в Consul проверьте, обновлены ли значения. Как вы сказали, некоторые накладные расходы, но, похоже, все в порядке, если вы не изменяете свои параметры каждые 5 минут.

Теперь мы изучаем этот вариант, но если вы достигли какого-либо прогресса в этом вопросе, будет оценено обновление.

[Обновить 2016-02-23] Мы реализовали идею, о которой я говорил выше, и она работает так, как ожидалось: хорошо. Имейте в виду, мы меняем наши параметры только при развертывании новой версии (потому что мы также используем сервисное обнаружение Консулом, поэтому нет необходимости обновлять списки услуг в параметрах). В основном мы это делали, потому что это избавляет нас от скучной работы по изменению параметров на нескольких серверах. Как обычно: это может не сработать для вас, но я думаю, что вы будете в безопасности, если, как я уже говорил, вы не меняете свои параметры каждые 5 минут :)

+1

Если у вас есть НОВЫЙ вопрос, пожалуйста, спросите его, нажав кнопку [Ask Question] (// stackoverflow.com/questions/ask). Если у вас есть достаточная репутация, [вы можете перенести] (// stackoverflow.com/privileges/vote-up) вопрос. Альтернативно, «звезда» это как фаворит, и вас будут уведомлять о любых новых ответах. – Tunaki

+0

Я мог бы неправильно понять, но для меня это вопрос, имеющий отношение к этой теме. Я прошу обновления по его собственному вопросу, а не для кого-либо еще, чтобы ответить на него perse (хотя это было бы хорошо) – Frank

+1

Итак, это комментарий, и комментарии могут не размещаться в качестве ответов на StackOverflow. Пользователи [получают привилегию комментирования] (// meta.stackexchange.com/questions/214173/), участвуя в вопросах, ответах и ​​редактировании. – Tunaki

4

В компании я работаю, мы выбрали другой маршрут ,

Вместо того, чтобы бороться с Symfony, чтобы принять конфигурацию во время выполнения (что-то, что должно было бы, например, Spring Data Consul), мы решили сделать конфигурацию Symphony в конфигурации Consul, по аналогии в концепции, по-разному в реализации, чем у Фрэнка.

Мы установили шаблон консула и консула. Мы создаем входную пару K/V, содержащую весь файл parameters.yml.Пример:

Ключ: eblock/config/parameters.yml

parameters: 
    router.request_context.host: dev.eblock.ca 
    router.request_context.scheme: http 
    router.request_context.base_url:/

Затем конфигурационный файл шаблон консула был добавлен в месте /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 & 

Зная, что оба консула и консул шаблонных услуг вверх, как только ваши изменения значений в указанном ключе для шаблона консула, он будет сбрасывать файл в сконфигурированное назначение и выполнить команду для параметров обновленных.

Это работает как шарм. =)