,---. ,---. _______ ,-----. ,---. .--. ________
| \ / | / __ \ .' .-, '. | \ | | | |
| , \/ , | | ,_/ \__) / ,-.| \ _ \ | , \ | | | .----'
| |\_ /| | ,-./ ) ; \ '_ / | : | |\_ \| | | _|____
| _( )_/ | | \ '_ '`) | _`,/ \ _/ | | _( )_\ | |_( )_ |
| (_ o _) | | > (_) ) __ : ( '\_/ \ ; | (_ o _) | (_ o._)__|
| (_,_) | | ( . .-'_/ ) \ `"/ \ ) / | (_,_)\ | |(_,_)
| | | | `-'`-' / '. \_/``".' | | | | | |
'--' '--' `._____.' '-----' '--' '--' '---' QQ:191958521
- 配置中心(mconf)
- 微核心(micro)
- 微服务神经元(neural)
- 微序列(sequence)
在分布式微服务架构中,当应用数量和各个应用部署实例的数量较多时,如果还是手动去实现配置信息的修改或数据的迁移等,其效率是很低的。且认为手动操作的也有可能出现错误的情况,从而引发应用发布错地方、启动不了、发不通等情况。
为了解决以上问题,开发了基于Zookeeper的配置中心(微服务配置中心:mconf),用于解决以上问题。同时新引入了微服务配置中心也为架构带来了运维成本和故障风险。因此建议不要强制依赖mconf,即没有mconf也能正常使用,当然有了mconf更好,可以为我们解决很多繁琐的事情。mconf依赖的Zookeeper可以靠集群来实现高可用,但mconf本身的问题也是可能存在的,所以使用请慎重。
核心支持功能:
- 支持精简版mconf:管理精简版的“app-conf”结构型配置
- 支持多数据中心配置管理
- 支持多环境配置原理
- 支持配置文件分组管理
- 支持配置文件多版本管理
- 支持单个配置文件多数据项结构(List型)
- 支持配置文件存储的高可靠(由Zookeeper和Redis保证)
void connect(URL url);//Connect configuration center
boolean available();//Configuration center status
void addConf(Cmd cmd, Object obj);//The Add Configuration Data.
void delConf(Cmd cmd);//The Delete Configuration Data.
void upConf(Cmd cmd, Object obj);//The Update Configuration Data.
<T> T pull(Cmd cmd, Class<T> cls);//The Pull Configuration Data.
<T> List<T> pulls(Cmd cmd, Class<T> cls);//The Pulls Configuration Data.
<T> void push(Cmd cmd, Class<T> cls, Notify<T> notify);//The Push Configuration Data.
void unpush(Cmd cmd);//The UnPush Configuration Data.
List<DataConf> getApps();//The Get Apps.
List<DataConf> getConfs();//The Get Confs.
List<DataConf> getDataBodys();//The Get Data Body.
连接配置中心的URL格式:
[zookeeper/redis] ://127.0.0.1:2181/mconf?node=[node]&app=[app]&env=[env]&conf=[conf]&category=[category]&version=[version]&data=[data]&……
####3.1.1 Zookeeper
- timeout:连接超时时间,单位为ms,默认值60000ms
- session:数据过期清理时间,单位为ms,默认值6000ms
####3.1.2 Redis
- retryPeriod:数据变更探测周期,单位为ms,默认值10000ms
用curator来实现Zookeeper的操作。使用PATH节点来表示配置所属的相关信息,使用最后一层PATH的DATA区来存储JSON结构的配置数据。
第1层PATH:/mconf?……
第2层PATH:/[app]?node=[node]&……
第3层PATH:/[conf]?env=[env]&group=[group]&version=[version]&……
第4层PATH:/[data]?……
第4层DATA:{JSON Data String}
完整PATH格式:
/mconf?……/[app]?node=[node]&……/[conf]?env=[env]&group=[group]&version=[version]&……/[data]?……
Redis使用Map结构来存储配置信息。
Key:/mconf?……/[app]?node=[node]&……/[conf]?env=[env]&group=[group]&version=[version]&……
Field:[data]?……
Value:{JSON Data String}
- mconf暂不支持本地缓存配置未离线文件,后期会考虑将拉下来的配置信息缓存到离线文件,解决对Zookeeper的强依赖问题。