• 1. Diamond—持久配置管理中心锋寒 2010-12
  • 2. Why?已经有了ConfigServer,为什么还需要Diamond ConfigServer将专注于非持久数据的推送 HSF服务地址列表 Notify Server地址列表 随着ConfigServer集群内机器的增加,主动推送持久配置不够稳定 涉及集群间持久配置数据的同步 需要实现和使用都很简单的方式 关键时刻,人工可以介入
  • 3. Diamond的特点简单 数据库集中存储,没有集群间同步,保证数据一致 以Web server + static file方式提供服务 只能通过OPS&SDK发布数据 可靠 支持主动和定时方式,保证能拿到最新数据 正常情况延迟<1S,异常情况延迟<10S 多级保护和容灾支持 数据库、 Diamond挂了都不会影响应用 允许人工介入 支持本地配置,可以脱离server运行
  • 4. Diamond Vs. ConfigServerDiamondConfig Server产品定位持久配置信息非持久数据内部实现简单,web server + static file复杂,服务端维持客户端长连接同步获取方式每次调用都能获得最新数据依靠服务端的推送,可能会一直wait异步通知方式客户端轮询服务端推送变化通知的实时性延迟 <1S *延迟 < 1S支持数据格式String, PropertiesList数据的发布OPS,SDKOPS,客户端API人工可控√×客户端容灾√×*最新版本的客户端已经支持准实时的通知。
  • 5. Diamond核心功能集中保存应用的持久配置信息 使用OPS和SDK发布持久配置 支持多种方式获取持久数据 主动获取 定时获取
  • 6. NginxNginxWeb AppWeb App流量控制ClientSDKMySQLFileFile更新更新时&定时dump读取数据的请求OPSMySQLMySQLMySQLreplicationcommonconfig.config-host.taobao.com主动/定时获取配置发布配置系统架构
  • 7. Server端的保护通过Nginx对请求做流量控制 通过连接池限制对数据库的并发更新操作 MySQL做一主三备 读取配置走本地静态文件,MySQL挂掉不影响读取服务
  • 8. 客户端容灾保护手工放置到本地的配置优先生效 缺省位置~/diamond/data 可以手工把server上的 map-file.js和config-data目录 copy到这里 客户端会自动dump配置 缺省位置~/diamond/snapshot 自动生成,server挂掉时应用可以依靠这个dump启动 优先级:本地配置>网络读取>自动dump ~/ diamond/data/map-file.js config-data ┠ group ┠ ┠dataId ┠ ┗dataId ┗ group …
  • 9. 客户端使用maven antX   com.taobao.diamond   diamond-client   2.0.0 taobao/diamond/diamond-client?version=2.0.0
  • 10. 客户端使用(String)异步通知 同步获取 支持本地容灾(建议使用) 普通方式DefaultDiamondManager diamondManager = new DefaultDiamondManager(group, dataId, new ManagerListenerAdapter() { public void receiveConfigInfo(String config) { //processing } });String configInfo = diamondManager.getConfigureInfomation(timeout)String configInfo = diamondManager.getAvailableConfigureInfomation(timeout)
  • 11. 客户端使用(Properties)异步通知 同步获取 DefaultDiamondManager diamondManager = new DefaultDiamondManager(group, dataId, new PropertiesListener() { public void innerReceive (Properties properties) { //processing } });Properties configInfo= diamondManager.getAvailablePropertiesConfigureInfomation(timeout)
  • 12. 客户端使用配置延迟生效 实现DelayLoadListener接口 配置中包含特定的文本信息 diamond-config-effective-time=“2010-07-28 10:29:01”
  • 13. SDK使用Maven com.taobao.diamond diamond-sdk 2.0.0
  • 14. SDK使用可以同时管理多个Diamond集群 功能 发布、更新数据 支持按照dataId,groupId和内容模糊查询 删除数据
  • 15. 从Config Server迁移迁移成本很低 异步方式 SubscriberDataObserver. handleData  ManagerListener. receiveConfigInfo 同步方式 Subscription. waitNext  DiamondManager. getAvailableConfigureInfomation 处理逻辑几乎不用改变
  • 16. 从Config Server迁移特殊情况 需要通过SDK发布数据 例如秒杀应用 持久数据不是String或Properties dataId对应的配置多于一个 List.size() > 1 不管是正常还是特殊情况,我们都会协助应用一起迁移