MetaConfig is a service for configuration management in an large scaled distrbuted system.
Currently we use ctrip appllo for config managment, but it is build for a paticular scenario. it has fixed schema application,environment,cluster and namespace. Each key belong to that schema. But it is not enough for operator to manage a complicated infrasctructure or application cluster. So here is the proposal to build a brand new config management service, *Features: * *key with rich metadata: *user can define metadata for a key , that distinguish from key to another key. a key will not be stringed by fixed schema. metadata is like "env=test, service=cart, version=1.0" or "cluster=xxx" or "env=test, service=cart, version=1.0, ip=x.x.x.x" *validator: *value can be checked by user defined python script, so in runtine if someone want to change this value, the script will check if this value is properate. *encryption webhook: *. value can by ecrypt by your custom encryption service. *event producer: *producer will send key changes event to a target service(kafka,rabbitmq, customed). *config view: *by setting metadata criteria, MetaConfig will aggregate a view to return all key values which match those metadata, so that operator can mange key in their own understading to a distributed system in seperated views. *config batch action: * with metadate, you can batch update, delete key values. for example: update all "service=cart version=1.0" configuration log level to "DEBUG" or just update "service=cart version=1.0, ip=x.x.x.x" . *rich value type: *not ony plain text any more, but support to be aware of ini, json,yaml,xml and java properties *heterogenous configuration system: *able to manage configuration in k8s and consul or even more, you can update, delete, and use config view for those systems, and you can integrate with your own config system to MetaConfig by following standardized API and model