Представьте себе систему с большим количеством серверов. Каждый из них имеет ряд настроек:
- Некоторые специфичные для сервера
- Некоторые специфические для региона
- Некоторые общие для всех них
- Может быть, вы можете иметь несколько пользовательских групп, как эта группа серверов только для чтения
- и т.п.
Текущая практика, которую я имею в виду, - это простая структура свойств с преобладающими способностями.
Для примера рассмотрим серверы Google. У каждого из них есть список настроек для загрузки.
Например, лондонский сервер может иметь:
rootsettings.properties
, europesettings.properties
, londonsettings.properties
, searchengine.properties
И т.д.
Где каждый файл содержит набор свойств и последовательность загрузки позволяет вам переопределять свойства, тем дальше вы идете.
Например: rootsettings.properties
может иметь accessible=false
по умолчанию, но переопределяется searchengine.properties
сaccessible=true
Проблема, которую я имею с этой структурой, состоит в том, что очень легко выйти из-под контроля. Он вообще не структурирован, то есть вы можете определить любое свойство на любом уровне, и многие элементы могут устареть.
Кроме того, изменение среднего уровня становится невозможным по мере роста сети, поскольку теперь вы затрагиваете очень большое количество серверов.
И последнее, но не менее важное: для каждого отдельного экземпляра может потребоваться 1 специальное свойство. Это означает, что ваше дерево в любом случае заканчивается конфигурацией для каждого сервера, что делает его не очень оптимальным решением.
Буду очень признателен, если у вас есть предложения / идеи по улучшению архитектуры управления конфигурациями.