Организация большого количества настроек приложения в Spring Cloud Config Server

Теперь, когда Spring Cloud Config является GA, мы планируем использовать его в качестве внешнего источника конфигурации для наших приложений Spring Boot. Поскольку задействованные технологии настолько новы для нашей организации, я получаю много вопросов о том, как Cloud Config будет работать в производственной среде, особенно в сценариях развертывания и аварийных ситуаций.

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

Проблема здесь в том, что я неправильно читал документацию. У меня создалось впечатление, что я могу сделать что-то вроде этого:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-config:
         uri: ssh://git@stash:7999/scc/
         pattern: app*-config.git    

С идеей, что часть app-config будет собирать все репозитории Git, соответствующие шаблону. По мере развертывания новых приложений мы перезапускали серверы, чтобы сохранить конфигурацию в новых репозиториях. Чего я не понимал, так это того, что шаблон относится к файлам в указанном репозитории, а не к самим файлам git. Так что мне действительно нужно было сделать что-то вроде этого:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-foo-config:
         uri: ssh://git@stash:7999/scc/app-foo-config.git
         pattern: app-foo*    

Моя проблема с этим подходом заключается в том, что каждый раз, когда я развертываю другое приложение, мне понадобится процесс для обновления файлов bootstrap.yml серверов Cloud Config, в дополнение к их перезапуску, чтобы добавить репо другого приложения, например:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      app-foo-config:
         uri: ssh://git@stash:7999/scc/app-foo-config.git
         pattern: app-foo*    
      app-bar-config:
         uri: ssh://git@stash:7999/scc/app-bar-config.git
         pattern: app-bar*    

Это не совсем идеально. Мне кажется, что мне придется разбить мою конфигурацию на несколько репозиториев по доменам, что дает мне что-то вроде этого:

git:
   uri: ssh://git@stash:7999/scc/common-config.git
   repos:
      domain-foo-config:
         uri: ssh://git@stash:7999/scc/domain-foo-config.git
         pattern: domain-foo*    
      domain-bar-config:
         uri: ssh://git@stash:7999/scc/domain-bar-config.git
         pattern: domain-bar*    
      domain-baz-config:
         uri: ssh://git@stash:7999/scc/domain-baz-config.git
         pattern: domain-baz*    

Это должно удерживать мою конфигурацию от выхода из-под контроля до тех пор, пока я могу поддерживать логику доменов. Итак, какие у меня вопросы? Их два:

  1. Является ли мой последний подход разумным или я упускаю лучший способ?

  2. Документы подразумевают, что конфигурация может находиться в папках, и это поможет сохранить конфигурацию организованной. Кому-нибудь повезло с этим?

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

Без шаблона сервер не передает конфигурацию ни из одного файла в репо. Вдобавок к этому, хотя шаблон: «*» работает, он работает только для первого репо. После этого Cloud Config Server не может загружать какую-либо конфигурацию из любого файла в любом другом репо, независимо от того, какой шаблон задан. Это включает репо по умолчанию.


person Alex Corvino    schedule 26.03.2015    source источник
comment
Сведения об ошибках, пожалуйста, перейдите сюда: github.com/spring-cloud/spring-cloud-config (но я не думаю, что это ошибка)   -  person Dave Syer    schedule 27.03.2015


Ответы (1)


Без шаблона сервер не передает конфигурацию ни из одного файла в репо. Вдобавок к этому, хотя шаблон: «*» работает, он работает только для первого репо. После этого Cloud Config Server не может загружать какую-либо конфигурацию из любого файла в любом другом репо, независимо от того, какой шаблон задан. Это включает репо по умолчанию.

Если шаблон вам не нужен, вы можете просто использовать

git:
   uri: ssh://git@stash:7999/scc/common-config.git

Если вам нужно использовать репо с шаблоном, убедитесь, что ваше приложение spring.application.name в bootstrap.yml имеет тот же шаблон. Например,

spring:
   application:
      name: domain-foo-app-a
person iceycake    schedule 27.03.2015