Imagine a system that has a large number of servers. Each of them has a number of settings:
- Some specific to the server
- Some specific to the region
- Some common across all of them
- Maybe you can have some custom groupings, like this group of servers is for reading only
- etc.
Current practice I have in mind is a simple property structure with overriding abilities.
Lets take Google servers for the purpose of the example. Each one of them has a list of settings to load.
For example, the London server may have:
rootsettings.properties
, europesettings.properties
, londonsettings.properties
, searchengine.properties
, etc.
Where each file contains a set of properties and the loading sequence allows you to override properties, the further you go.
For example: rootsettings.properties
may have accessible=false
as a default, but is overriden in searchengine.properties
with accessible=true
The problem I am having with this structure is it is very easy to get out of control. It is not structured at all, meaning you can define any property at any level and many items can become obsolete.
Furthermore changing a middle level becomes impossible as the network grows, as you now affect a very large number of servers.
Last but not least, each individual instance may need 1 special property, meaning your tree ends up with with a config for each server anyways, making it not very optimal solution.
I would greatly appreciate if you have any suggestions/ideas of a better configuration management architecture.