某宝配置中心diamond的改版
目标
源码待后续整理后加入github
首要的目标是统一,diamond采用的是gbk编码,这与其他系统的编码格式utf-8的编码风格不协调。
再有,diamond自身内置功能很丰富,目前未能很好把它作为配置中心的角色发挥出来。
改版将对系统中的环境配置类信息等要求统一放置于diamond中,强化diamond作为配置中心的地位。
通过diamond的改版,对diamond的实现机制,以及将来可能存在的多机房情况下,如何使用diamond
有了清晰的认识。
diamond-client
功能修改
client改版主要集中于以下几个方面,此处描述的功能改动是从影响使用方的角度列出的,自身的改动未涉及。
- 去掉了log4j的引入,改为slf4j,避免jar污染;
- 重写diamond的加载方式,使其可以指定server地址,也可使用默认地址;
- 将内部域名jmevn.tbsite.net的内置域名修改为diamond.****.net;
- 整体改变UTF-8编码,因此无法适用于老diamond-server;
- 加入了DiamondProperties类,用于业务系统的配置信息外部存放;
使用
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="properties" ref="diamondProperties" />
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
</bean>
<bean id="diamondProperties" class="com.le.diamond.spring.DiamondProperties"
init-method="init">
<property name="dataIds">
<list>
<value>common.zookeeper</value>
<value>common.redis</value>
</list>
</property>
</bean>
说明
说明:
dataIds是需要加载的在diamond配置的dataId(组名固定为environment),鉴于目的的不同,采取多个dataId存放。
diamondProperties默认获取的组为environment,dataId为common,如果未设置将使用以上组进行获取值。
如果没有需要从diamond中获取的占位符的配置信息,不需要配置
以上配置是以本地配置为主,diamond配置为次,如果需要以diamond为主配置,需要增加以下内容:
覆盖本地配置
<property name="localOverride" value="true" />
不同优先级的加载方式
1.第一种
<!-- 引入配置文件 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="properties" ref="diamondProperties" />
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
</bean>
<bean id="diamondProperties" class="com.le.diamond.spring.DiamondProperties"
init-method="init">
<!-- 默认组 environment 不使用可以不要 -->
<property name="dataIds">
<list>
<value>common.zookeeper</value>
<value>common.redis</value>
</list>
</property>
<!-- order 优先级,数字越大优先级越高 -->
<property name="diamondFlags">
<util:list>
<bean class="com.le.diamond.spring.DiamondFlag">
<property name="dataIds">
<list>
<value>common.zookeeper</value>
</list>
</property>
<property name="group" value="foud"/>
<property name="order" value="1"/>
</bean>
<bean class="com.le.diamond.spring.DiamondFlag">
<property name="dataIds">
<list>
<value>test</value>
</list>
</property>
<property name="group" value="diamond"/>
<property name="order" value="2"/>
</bean>
</util:list>
</property>
</bean>
2.第二种
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="properties" ref="diamondProperties" />
<property name="locations">
<list>
<value>classpath:config.properties</value>
</list>
</property>
</bean>
<!-- 获取默认组 environment -->
<util:list id="dataIds" >
<value>common.zookeeper</value>
<value>common.rocketmq</value>
</util:list>
<!-- key为dataIds value为group 优先按照配置顺序 -->
<util:map id="customDataIds" map-class="java.util.LinkedHashMap">
<entry key="common.zookeeper" value="environment"></entry>
<entry key="test1" value="diamond"></entry>
</util:map>
<!-- 如果只用默认组environment,只需配置dataIds,否则需要配置customDataIds-->
<bean id="diamondProperties" class="com.le.diamond.spring.DiamondProperties"
init-method="init">
<property name="dataIds" ref="dataIds"></property>
<property name="customDataIds" ref="customDataIds"></property>
</bean>
自定义域名
在一些场景下,频繁的变更host配置,令人头疼,加入了一项可以在配置中设定diamond服务器的方式,设定后,将不再使用diamond.ltsite.net的host配置。
<bean id="diamondProperties" class="com.le.diamond.spring.DiamondProperties" init-method="init">
<property name="dataIds">
<list>
<value>common</value>
<value>biz</value>
<value>redis</value>
<value>mq</value>
</list>
<property name="addr">
<list>
<value>10.75.248.117</value>
</list>
</property>
</property>
</bean>
client准入机制
开启了client准入机制。
准入采用IP限制的方式,配置在dataId为com.le.diamond.meta.acl.trustips上,每行一个IP地址
diamond-server
授权登录
加入了用户登录功能,分角色授权,用户可以使用采用邮箱名及密码的登录方式进行登录。
性能统计
性能统计,展示了diamond-client每次拉取数据的耗时情况,可以监控系统的性能。