Конфигурация микросервисов - где хранить?
От: andsm Россия  
Дата: 11.10.21 09:24
Оценка:
Есть ряд микросервисов, размещены в облаке, с использованием своего кластера Kubernetos. Пока конфигурация для них прописывается вручную. Планируем перейти на сервисную сетку. Все сервисы на C#, размещены на Linux.
Есть нерешенный вопрос, где хранить конфигурацию. Есть идея использовать некоторый центральный сервис конфигурации. В файлах конфигурации сервисов достаточно будет хранить адрес сервиса конфигурации. Тогда, сервисы при старте будут обращаться к сервису конфигурации, читать свою конфигурации.
Что в такой схеме не очень хорошо – если сервис конфигурации лежит, то сервисы не смогут стартовать. Еще, непонятно как отслеживать изменения конфигурации.
Есть ли какие-нибудь хорошие практики для управления конфигурацией?
Какие-то существующие подходящие open source решения?
c# microservices configuration
Re: Конфигурация микросервисов - где хранить?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.10.21 10:23
Оценка: :)
Здравствуйте, andsm, Вы писали:

A>Есть ряд микросервисов, размещены в облаке, с использованием своего кластера Kubernetos. Пока конфигурация для них прописывается вручную. Планируем перейти на сервисную сетку. Все сервисы на C#, размещены на Linux.

A>Есть нерешенный вопрос, где хранить конфигурацию. Есть идея использовать некоторый центральный сервис конфигурации. В файлах конфигурации сервисов достаточно будет хранить адрес сервиса конфигурации. Тогда, сервисы при старте будут обращаться к сервису конфигурации, читать свою конфигурации.
A>Что в такой схеме не очень хорошо – если сервис конфигурации лежит, то сервисы не смогут стартовать. Еще, непонятно как отслеживать изменения конфигурации.
A>Есть ли какие-нибудь хорошие практики для управления конфигурацией?
A>Какие-то существующие подходящие open source решения?

Какая конфигурация имеется ввиду?
Если конфигурация самих сервисов, то кубере, передавать через ENV в докер.
Если настройки приложения, то в базе (отдельном сеттингс-сервисе).
Re: Конфигурация микросервисов - где хранить?
От: Дельгядо Филипп Россия  
Дата: 11.10.21 11:35
Оценка: 4 (1)
Здравствуйте, andsm, Вы писали:

A>Что в такой схеме не очень хорошо – если сервис конфигурации лежит, то сервисы не смогут стартовать. Еще, непонятно как отслеживать изменения конфигурации.


Ну, если у вас кубер, то если сервис лежит — то его тут же поднимут.


A>Есть ли какие-нибудь хорошие практики для управления конфигурацией?

Там много нетривиальных вызовов:
1) Согласование конфигурации между всеми сервисами
2) Согласованное изменение конфигурации между сервисами (чтобы не было, что разные сервисы используют разные версии настроек)
3) Права и процессы изменения конфигов (кто что может сделать)

Проще действительно сделать один общий сервис, который отдает конфигурацию (с версиями, датой начала действия и т.п.) для всех интересующихся.
Ну и топик в каком-нибудь MQ о том, что такой-то кусок конфигурации поменялся, пусть все подпишутся.

A>Какие-то существующие подходящие open source решения?

Можно смотреть на Consul, Zookeeper и прочие решения под эту задачу. Но что-то придется и самим доделывать, конечно.
Re: Конфигурация микросервисов - где хранить?
От: Anton Batenev Россия https://github.com/abbat
Дата: 11.10.21 12:16
Оценка: 5 (1)
Здравствуйте, andsm, Вы писали:

a> Какие-то существующие подходящие open source решения?


Полагаю, что под хранением конфигурации подразумевается service discovery. В общем-то много их разных, из наиболее распространенных наверное consul.
Re[2]: Конфигурация микросервисов - где хранить?
От: andsm Россия  
Дата: 11.10.21 13:22
Оценка:
AB>Полагаю, что под хранением конфигурации подразумевается service discovery. В общем-то много их разных, из наиболее распространенных наверное consul.

Нет, это мы решаем через использование сервисной сетки.
Re[2]: Конфигурация микросервисов - где хранить?
От: andsm Россия  
Дата: 11.10.21 13:34
Оценка:
G>Какая конфигурация имеется ввиду?
G>Если конфигурация самих сервисов, то кубере, передавать через ENV в докер.
G>Если настройки приложения, то в базе (отдельном сеттингс-сервисе).

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

Отдельный сервис конфигурации — на самом деле уже есть, используем для этого consul.
Но это же только часть решения. Полно других вопросов, связанных с конфигурацией.

Пример. Какая-то команда добавила новый параметр в существующем сервисе. Настроен continuous delivery.
И тут возникают сложности. Если отдельный сервис конфигурации, как туда попадет значение? Возможное решение вполне понятное, через описание изменений и ручным применением. У нас этих сервисов планируется несколько десятков, и несколько сотен инстансов работающих сервисов. Хочется минимизировать ручные операции, упростить сопровождение системы.
Re[2]: Конфигурация микросервисов - где хранить?
От: andsm Россия  
Дата: 11.10.21 13:37
Оценка:
Здравствуйте, Дельгядо Филипп, Вы писали:

Да, примерно где-то такое я и думаю спроектировать. К этому еще придется расписать соответствующие процессы для разработчиков и devops.
Re: Конфигурация микросервисов - где хранить?
От: scf  
Дата: 12.10.21 10:30
Оценка: +1
Здравствуйте, andsm, Вы писали:

A>Есть ли какие-нибудь хорошие практики для управления конфигурацией?

A>Какие-то существующие подходящие open source решения?

Я бы сформулировал практики так:
— настройки делятся на секретные и несекретные, секретные должны находиться в отдельном специализированном хранилище
— все изменения настроек должны версионироваться и иметь автора
— настройки должны применяться к хостам явно и осознанно

И по реализации:
— несекретные настройки храним в гите
— секретные настройки храним или в отдельном гите, или в защищенном облачном хранилище
— настройки применяются при деплое приложения, не при старте, т.к. рестарт — слабоконтролируемое событие и может случаться спонтанно
— для эстетов — настройки компилируются в бандл с версией и имеют свой релизный цикл, включая тестирование.
Re: Конфигурация микросервисов - где хранить?
От: Nikita Lyapin Россия https://architecture-cleaning.ru/
Дата: 20.10.21 18:59
Оценка:
Здравствуйте, andsm, Вы писали:

A>Есть ряд микросервисов, размещены в облаке, с использованием своего кластера Kubernetos. Пока конфигурация для них прописывается вручную. Планируем перейти на сервисную сетку. Все сервисы на C#, размещены на Linux.

A>Есть нерешенный вопрос, где хранить конфигурацию. Есть идея использовать некоторый центральный сервис конфигурации. В файлах конфигурации сервисов достаточно будет хранить адрес сервиса конфигурации. Тогда, сервисы при старте будут обращаться к сервису конфигурации, читать свою конфигурации.
A>Что в такой схеме не очень хорошо – если сервис конфигурации лежит, то сервисы не смогут стартовать. Еще, непонятно как отслеживать изменения конфигурации.
A>Есть ли какие-нибудь хорошие практики для управления конфигурацией?
A>Какие-то существующие подходящие open source решения?

Тут коллеги уже сказали про Consul. Добавлю к нему еще один хешикорповский продукт для хранения секретов — Vault.

На самом деле конфигурировать в дотнете крайне просто, т.к. из коробки сервисы умеют читать конфиги прямо из переменных окружения:
— см. раздел с Enviroment Variables

Ну и плюс есть сам кубик. ConfigMap тот же... все зависит от задачи, думаю упомятуе средства подскажут как действовать в вашем случае.
Re: Конфигурация микросервисов - где хранить?
От: hlt Россия  
Дата: 10.12.21 11:46
Оценка:
Здравствуйте, andsm, Вы писали:
A>Есть ряд микросервисов, размещены в облаке, с использованием своего кластера Kubernetos.

Чем ConfigMaps не устраивает?
Re: Конфигурация микросервисов - где хранить?
От: Ночной Смотрящий Россия  
Дата: 16.12.21 13:56
Оценка:
Здравствуйте, andsm, Вы писали:

A>Есть нерешенный вопрос, где хранить конфигурацию.


Если конфигурация не меняется после деплоймента очередной версии — в файлах в образе сервисов.
Если конфигурация относительно несложная и не предполагается прод без кубера — ConfigMap.
Если конфигурация довольно сложная и/или какие то особые требования к инфраструктуре — Consul
Если еще и безопасники наседают — тогда Vault (в качестве бека тот же Consul или Postgre).
Если облако это Ажур и только он — AppConfiguration/KeyVault.
Еще можешь покурить steeltoe, это идеология из жабного мира.

A>Что в такой схеме не очень хорошо – если сервис конфигурации лежит, то сервисы не смогут стартовать.


Так его тоже надо либо с fault tolerance разворачивать, либо использовать SaaS, где за SLA голова болит у других людей.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Конфигурация микросервисов - где хранить?
От: Ночной Смотрящий Россия  
Дата: 16.12.21 14:29
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Полагаю, что под хранением конфигурации подразумевается service discovery.


С чего бы? Это разные вещи. И если уж у них Кубер, то там оно есть искаропки и его вполне можно использовать, если нет каких то фич которые он не умеет типа прописывания туда сервисов вне кластера.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Конфигурация микросервисов - где хранить?
От: Ночной Смотрящий Россия  
Дата: 16.12.21 14:29
Оценка:
Здравствуйте, scf, Вы писали:

scf>- настройки делятся на секретные и несекретные, секретные должны находиться в отдельном специализированном хранилище


Необязательно, если они шифруются.

scf>- настройки применяются при деплое приложения, не при старте, т.к. рестарт — слабоконтролируемое событие и может случаться спонтанно


И тут приходят продакты и просят сделать применение настроек не просто после рестарта, а и вообще без рестарта подов. А ты им — ну вот идите в гит, передеплоивайте сервис, рестартуйте все его поды ... Догадываешься что они тебе скажут?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Конфигурация микросервисов - где хранить?
От: SkyDance Земля  
Дата: 16.12.21 22:28
Оценка:
G>Какая конфигурация имеется ввиду?

Я когда вижу слово "конфигурация", сразу вспоминаю вот это: http://mikehadlow.blogspot.com/2012/05/configuration-complexity-clock.html

А вообще, конфигурация — это код, интерпретатором которого является конфигурируемое приложение.
Re[2]: Конфигурация микросервисов - где хранить?
От: SkyDance Земля  
Дата: 16.12.21 22:32
Оценка: 5 (1)
scf>- для эстетов — настройки компилируются в бандл с версией и имеют свой релизный цикл, включая тестирование.

Истинно так. Причем это тестирование должно осуществляться в соответствии с матрицей совместимости кода приложения. Скажем, приложение v1.2 может работать толко с v1.2.1-v1.2.5 конфигурации. Все остальные комбинации не поддерживаются.


Если у разработчиков есть контроль и за кодом приложения, и за конфигурацией, тогда зачастую проще и вовсе не выделять отдельно "код" и "конфигурацию", а гнать все через ту же самую систему CI/CD. Стало быть, хранить конфигурацию прямо там же, в том же репо, что и исходный код. Ибо это он и есть.
Re[3]: Конфигурация микросервисов - где хранить?
От: scf  
Дата: 17.12.21 06:22
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Необязательно, если они шифруются.


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

НС>И тут приходят продакты и просят сделать применение настроек не просто после рестарта, а и вообще без рестарта подов. А ты им — ну вот идите в гит, передеплоивайте сервис, рестартуйте все его поды ... Догадываешься что они тебе скажут?


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

Конечно, с ними нужно обращаться по-разному.
Re[4]: Конфигурация микросервисов - где хранить?
От: Ночной Смотрящий Россия  
Дата: 17.12.21 19:45
Оценка: -1
Здравствуйте, scf, Вы писали:

scf>У нас CTO, которого я бесконечно уважаю, запрещал использовать шифрованные настройки. Их проблема в том, что одна ошибка в управлении ключом шифрования настроек — и все секреты становятся доступными всем.


Я это комментировать даже не буду.

scf>Я бы поделил настройки на три типа

scf>Конечно, с ними нужно обращаться по-разному.

Ты, вместо внесения ясности, все окончательно запутал.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.