Wyobraź sobie system, który ma dużą liczbę serwerów. Każde z nich ma wiele ustawień:
- Niektóre specyficzne dla serwera
- Niektóre specyficzne dla regionu
- Niektóre wspólne dla wszystkich
- Być może możesz mieć niestandardowe grupy, na przykład ta grupa serwerów służy tylko do odczytu
- itp.
Obecna praktyka, o której myślę, to prosta struktura własności z nadrzędnymi zdolnościami.
Weźmy serwery Google na potrzeby tego przykładu. Każdy z nich ma listę ustawień do załadowania.
Na przykład serwer w Londynie może mieć:
rootsettings.properties
, europesettings.properties
, londonsettings.properties
, searchengine.properties
, Itd.
Gdzie każdy plik zawiera zestaw właściwości, a sekwencja ładowania pozwala na przesłonięcie właściwości, tym dalej.
Na przykład: rootsettings.properties
może mieć accessible=false
domyślnie, ale jest zastępowane searchengine.properties
przezaccessible=true
Problem z tą strukturą polega na tym, że bardzo łatwo jest wymknąć się spod kontroli. W ogóle nie ma struktury, co oznacza, że możesz zdefiniować dowolną właściwość na dowolnym poziomie, a wiele przedmiotów może stać się nieaktualnych.
Co więcej, zmiana poziomu średniego staje się niemożliwa w miarę rozwoju sieci, ponieważ wpływasz teraz na bardzo dużą liczbę serwerów.
Na koniec, każda pojedyncza instancja może potrzebować 1 specjalnej właściwości, co oznacza, że twoje drzewo i tak kończy się konfiguracją dla każdego serwera, co czyni go niezbyt optymalnym rozwiązaniem.
Byłbym bardzo wdzięczny, jeśli masz jakieś sugestie / pomysły dotyczące lepszej architektury zarządzania konfiguracją.