集中配置管理(IMAGO)

发表于:2018-1-17 14:14

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:桃子    来源:51Testing软件测试网原创

  概述
  常规项目会有很多配置文件,比如数据库链接信息, 缓存信息等. 我们通常的做法是通过配置文件进行管理可以达到只需要修改一个地方,整个项目都可以生效的目的.目前我们的开发项目繁多, 程序为了保持高可用,会进行集群部署. 这样我们要对某一个或者某几个项目进行配置文件变更时,需要逐个进行修改.这样大量的人为操作可能会增加程序升级或发布的风险.与此同时修改配置文件之后会涉及到应用的重启.为了减小发布风险,我们需要一个地方对各个系统配置进行统一的管理,这时统一配置管理系统诞生的背景,我们暂且取名为 “IMAGO”没有特殊的含义,只是一个代号.
  架构
 
imago架构图
  Imago分为两部分:
  1、配置管理控制台(imago-admin)
  配置管理后台提供配置管理, 简单权限管理, 详细配置变更日志管理等, 所有的配置数据最终以Mysql数据库中存储的配置为最终正确配置.
  2、配置客户端(imago-client)
  上图中的箭头方向表示数据的流向. 当应用启动时, imago-client从Zookeeper获取相关配置项到本地, 并存储一份文件快照, 一份缓存快照, 应用直接从本地缓存中读取相关配置. 当Zookeeper中的配置项发生变动时, imago-client会监听到变动并更新本地文件快照和本地缓存. 在使用过程中如果Zookeeper不可用, 应用还可以从本地文件快照中获取配置进行启动. 应用始终都是从imago-client的本地缓存中获取缓存, 提高效率.
  存储在Zookeeper中的数据结构
  1、配置管理后台负责配置数据的维护,如增、删、改、查,配置数据存放于zookeeper节点之上,每个APP都有一个唯一的ID,如order的节点path为/imago/order,该节点下又可以有多个配置节点,如/imago/order/key1, /imago/order/key2… 管理后台必须校验节点PATH的唯一性.
  2、应用可以有两种类型
  (1). 公共应用, 该种应用会将一些公共资源的配置放在这种应用下面, 比如mysql的配置, redis的配置等, 这么做的目的是为了将来这些配置ip或者其他信息变更了,我们只需要修改一个地方.我们将来可以通过在imago-admin里面可以看到哪些应用引用了这些公共应用.
  比如,和交易相关的公共配置统一放在appkey为trade_public目录下, 具体参考如下:
  /imago/trade_public_mysql/1.1
  /imago/trade_public_redis/1.1
  (2). 普通应用, 该种应用下的配置项可以设置一些该应用特有的一些配置.
  容灾设计
  我们可以总结一下imago整个系统完全不可用的条件,下面是可能发生的情况:
  1、数据库不可用。
  2、所有zookeeper均不可用。
  3、imago-client主动删除了File Snapshot, Local cache.
  在上面2, 3都不可用时才会发生不可用的情况.这在生产环境中出现的几率是极小的.
  测试用例
  功能测试(在没有任何异常的情况下进行)
  1、创建测试数据
  /imago/app1/xxx1
  /imago/app1/xxx2
  /imago/app1/xxx3
  2、app启动时client可以顺利从zookeeper加载相关配置到file snapshot 和 local cache.
  3、验证是否可以生成文件快照
  ~/.imago/imago_snapshot/app1.properties
  4、验证本地缓存是否可以取到这些值.
  5、当zookeeper其中某一个数据发生变动时, 相应的文件快照和本地缓存是否也相应变更.
  容灾测试
  1、zookeeper集群中其中一台机器不可用, client是否可以正常从zookeeper获取数据.
  2、client(非首次)启动时无法从zookeeper获取数据, 则可以从之前的文件快照获取配置数据, 并加载到本地缓存中.
  配置不可用的情况
  client第一次启动时, zookeeper就不可用, 则无法从中获取数据, 并生成文件快照和本地缓存.
  Imago-admin 功能说明
  
  首页
  1、集中配置管理主要提供如下功能点:
  · 应用管理
  · 配置项管理(具体的配置项数据在该节点设置)
  · 用户管理
  · 资源管理(菜单和功能url的动态管理)
  · 用户组管理(进行用户的分组功能,可以给用户组分配具体的功能权限和数据权限)
  · 日志查看(终于数据的增删改的详细记录)
  2、首页关系图可以查看某个ip上具体的pid引用了什么公共应用, 也可以查看哪些公共应用被什么程序引用了.
  应用管理
  
App管理
  1、可以通过应用类型, 应用key, 应用value进行简单检索
  2、点击应用key上的超链接, 将会进入该应用下的配置项列表.
  3、在进行数据迁移时, 只需要将mysql数据进行迁移, 然后点击”同步全量数据到Zookeeper”按钮,会将mysql中所有数据同步到zookeeper节点上,如果已经有数据在zookeeper上,并且已经有程序watch了这些节点, 那么该操作将会触发大量的watch操作. 所有,该按钮建议只在初始化时使用.
  4、可以针对某个应用进行配置项的导入, 导入文件可是遵循 *.properties属性文件格式.
  5、可以将某个应用下的配置项导出为 *.properties属性文件.
  6、可以只针对某个应用从mysql中同步数据到Zookeeper.
  7、删除某个应用, 该操作是逻辑删除, 同时会逻辑删除该应用下所有的配置项, 同时也会物理删除zookeepr上对应的数据.
  
App新增,修改
  进行应用的新增和修改时,需要设置应用的类型:
  · 公共应用
  该类型的应用,会是多个项目中使用, 比如mysql,redis,kafka等配置放在公共应用中. 同时首页上会显示公共应用被哪些程序使用的关系图.
  · 普通应用
  普通应用是区分公共应用而存在的, 一般应用下的独有的一下配置项放在普通应用下.
  配置项管理
  
配置项管理

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号