暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CMDB探索之路

运维军团 2020-08-24
2258

作者:枫树


这天,老大又找到了埋头写bug的小伟。


老大:小伟,我们的CMDB已经堆了很多bug和需求,你看下怎么弄,必要的话可以重构。


小伟:好的,但是什么是CMDB?


老大:……


小伟熟练地打开404(谷歌),输入CMDB,维基百科上是这么解释的。

A configuration management database (CMDB) is an ITIL database used by an organization to store information about hardware and software assets (commonly referred to as Configuration Items [CI])……

大致意思是,CMDB是IT系统所有组件相关的信息库,它包含IT基础架构配置项的详细信息……


看完之后,小伟还是云里雾里的,只得去请教同事小叶。


小叶:我给你演示下我们现在的CMDB,首先是对象管理页面,能够创建对象,所有的资源都可以是一个对象,比如机房、机柜、交换机、服务器、cpu等等,都可以是一个对象。



一个对象映射到数据库也就是一个表。既然是表,那么表就有字段,这是服务器对象的字段。


对象之间的关联关系,我们用外键表示。比如服务器和机房、服务器和机柜、服务器和项目,都是通过服务器这个对象上添加外键字段来表示。表和字段添加好了,接下来是表数据。服务器的各种配置都是在这里调整,映射到数据库就是数据的update,变更历史都是可追溯的。



一句话总结CMDB的功能,就是把基础资源、业务资源等信息入库到数据库,协助系统运维人员对资源进行快速变更和管理。怎么样,现在知道什么是CMDB了吗


小伟:懂了懂了,谢谢大佬。


小伟找到老大接任务,老大大笔一挥写下了几点需求。


第一,性能。原本使用python开发的CMDB,由于天生 GIL锁,同一时间是单进程阻塞运行。使用gevent库给程序打上猴子补丁,将标准库中的thread/socket替换掉,将python实现的io操作(比如网络io)变成非阻塞。但是数据库使用的是mysql-db,该库是c语言实现,无法用猴子补丁方法将其变成非阻塞。(mysql-db实测性能远优于其他python实现的mysql驱动)


第二,功能。旧CMDB不支持多层外键,不支持外键关联自身,不支持多个字段组成组合唯一键,不支持拓扑功能……


小伟拿着需求,先是找了业界成熟的开源CMDB-腾讯蓝鲸CMDB研究一番,看是否能在该CMDB基础上进行二次开发。该CMDB的开发语言是golang,从底层就支持异步,数据库是mongodb,对于索引和非索引字段的查询都很快。


深入代码后小伟发现,蓝鲸CMDB的外键绑定不灵活,比如服务器的云区域是代码写死,不能用户配置,而我们的痛点多数都是和外键相关的,所以无法满足我们的需求。


数据库选型上,小伟在一番比较之后,还是选择了mysql。mongodb对事务的支持不好,虽然4.0以上版本对事务支持有所改善,但还是比不上mysql这样的关系型数据库来的完善。mongodb联表查询不好实现,而mysql的联表查询很容易上手,方便日后维护。


语言选型上,golang性能确实比python好不少,追求性能确实可以用golang重构。


一番考察之后,小伟很快写好了一份方案,兴冲冲地将结果交给老大。

老大:换语言重构成本有点大,部门golang方面的技术沉淀不多。但是CMDB的性能非常重要,golang开发确实不错,你有把握吗?


小伟:没问题,我大学时候学过golang,包在我身上。


经过一个月紧赶慢赶的开发,小伟提交了测试demo。


老大:做得不错,性能有了很大提升。我这里还有个需求,现在线上CMDB和业务系统耦合度太高,版本管理有点混乱,考虑把新版CMDB微服务化,同一套系统下的子app调用CMDB是rpc调用,和api接口区分开。


小伟:容我想想!


小伟看着需求,心想,旧系统是用python开发,新CMDB是golang开发 ,那它们之间的rpc调用也应该支持跨语言才行。小伟比较了诸多开源rpc框架的优劣性,最终选定rpcx,性能优越,还支持跨语言调用,支持服务发现、服务治理等等。


一周后,小伟再次提交了测试demo。


老大:不错,还考虑到了跨语言调用的问题,现在后端没有什么大问题,我把小红派给你,前端页面做好看一点,还有工期也抓紧点。


小伟:好的!


两个月后,新的CMDB系统完成了前后端联调测试,成功上线。

 




后记:

运维自动化之风盛行,自动化流程、配置变更、审计、成本、监控等促使我们建设CMDB,它是整个运维自动化的基石。每家公司对CMDB的定位都有所不同,你会发现市面上的CMDB产品总不能满足自己的需求。复杂逻辑需要去做定制开发,但是会受到产品本身的语言或者框架的局限性,导致使用困难,数据难维护,折腾了半天后发现还不如自己造一个。没有最好的CMDB,只有最合适的CMDB。





近期文章


  1. 教你轻松解决 rsync、scp “tab” 卡顿问题

  2. 一次百万长连接压测 Nginx OOM 的问题排查分析

  3. salt远程执行漏洞详解

  4. 那些服务器卡顿往事

  5. 了解Https SNI 以及 winxp对https支持情况测试



END




全中国只有不到1% 的人关注了运维军团


你是个有眼光的人!


(由于交流群人数已超100人,需要进群的小伙伴可以添加运维小编的微信:)




如果你喜欢我们的文章,请转发到朋友圈

 

 
 
公众号
ywjtshare
运维军团
 

专注运维技术与传承,分享丰富原创干货




文章转载自运维军团,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论