第1页
柔性接口的设计与实现
微信CMDB
ottocho 2015.08.21
第2页
● 什么是 CMDB ● 设计要点 ● 成果展示 ● 设计与实现 ● 经验总结
大纲
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第3页
● 什么是 CMDB ● 设计要点 ● 成果展示 ● 设计与实现 ● 经验总结
CMDB
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第4页
CMDB
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第5页
百度给的定义: CMDB 配置管理数据库 Configuration Management Database CMDB 存储与管理企业IT架构中设备的各种 配置信息,它与所有服务支持和服务交付流
这些都是废话!程都紧密相联,支持这些流程的运转、发挥配
置信息的价值,同时依赖于相关流程保证数 据的准确性。在实际的项目中,CMDB 常常 被认为是构建其它 ITIL 流程的基础而优先考 虑,ITIL 项目的成败与是否成功建立 CMDB 有非常大的关系。
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
CMDB
第6页
CMDB Configuration Management Database
• 运营的工程管理角度 • 以管理对象为配置个体 • 统一归类、抽象、管理
CMDB
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第7页
我来举个栗子…
CMDB
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第8页
CMDB
• 模块、模块程序 • 以运营配置对象管理 • 存储在 CMDB • 与 CMDB 的交互 • 统一管理
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第9页
目标
如部署系统、新服务上线系统 与 CMDB 的配合,达成了系统间 合作、运营信息收集结合。
CMDB 支持这些流程的运转、发 挥配置信息的价值,同时依赖于相 关流程保证数据的准确性。
CMDB
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第10页
● 什么是 CMDB ● 设计要点 ● 成果展示 ● 设计与实现 ● 经验总结
大纲
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第11页
设计要点 • 业务目标 • 配置粒度 • 维护方式 • 服务情况
设计要点
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第12页
● 什么是 CMDB ● 设计要点 ● 成果展示 ● 设计与实现 ● 经验总结
大纲
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第13页
文档首页
成果展示
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第14页
文档目录
成果展示
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第15页
资源定义
成果展示
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第16页
所见即所得、简单快速接入
成果展示
/api/GetDevices? fields=id,system_name,inner_ip& where_inner_ip=10.20.30.40
cmdbclient.GetDevices( fields = ['id', 'system_name', 'inner_ip'], where = { 'inner_ip': '10.20.30.40' },
)
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第17页
信息详尽完备
成果展示
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第18页
● 什么是 CMDB ● 设计要点 ● 成果展示 ● 设计与实现 ● 经验总结
大纲
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第19页
技术小结 • tornado • peewee • pypy • sphinx
设计实现
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第20页
设计实现
请求内容
client 请求: cmdbclient.GetDevices( fields = ['id', 'system_name', 'inner_ip'], where = { 'inner_ip': '10.20.30.40' }, )
HTTP 请求: /api/GetDevices? fields=id,system_name,inner_ip& where_inner_ip=10.20.30.40
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第21页
设计实现
格式化请求处理
HTTP param: fields=id,system_name,inner_ip&where_inner_ip=10.20.30.40
dict data: dict( fields = ['id', 'system_name', 'inner_ip'], where = { 'inner_ip': '10.20.30.40' }, )
Peewee Query: fields = (Device.id, System.name, Device.inner_ip) where = Device.inner_ip << ('10.20.30.40',) result = Device.select(*fields).where(where)
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第22页
设计实现
处理流程
# 从域列表获取到涉及到的 model related_models = get_related_models(model_fields) # 生成 query_obj query_obj = model_class.select(*model_fields) # 加上 where 的条件检索 query_obj = where_condition_query(query_obj, where_logic,
where, model_field_map) # 自动 join 表 query_obj = join_table(query_obj, related_models, addition_fields) # 返回结果 return fetch_query_result(query_obj, args)
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第23页
设计实现
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第24页
● 什么是 CMDB ● 设计要点 ● 成果展示 ● 设计与实现 ● 经验总结
大纲
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第25页
维护
• 限制 • 规则 • 简单
经验总结
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第26页
业务价值
技术创造价值 业务体现价值
经验总结
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第27页
合作
• 对接 • 接口 ? • 服务 ?
• 文档 • wiki ? • html ? • blog ?
经验总结
以提高他人的效率 来提高自己的工作效率!
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第28页
感谢大家
Q&A
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第29页
感谢大家
谢谢您
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第30页
联系方式
卓振杰 ottocho ottozhuo@tencent.com
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
第31页
北京/上海/广州 0xFF Life's pathetic, go Pythonic!