狠狠撸

狠狠撸Share a Scribd company logo
柔性接口的设计与实现
微信CMDB
ottocho
2015.08.21
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
大纲
● 什么是 CMDB
● 设计要点
● 成果展示
● 设计与实现
● 经验总结
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
CMDB
● 什么是 CMDB
● 设计要点
● 成果展示
● 设计与实现
● 经验总结
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
CMDB
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
CMDB
百度给的定义:
CMDB 配置管理数据库
Configuration Management Database
CMDB 存储与管理公司IT架构中设备的各种
配置信息,它与所有服务支持和服务交付流
程都紧密相联,支持这些流程的运转、发挥配
置信息的价值,同时依赖于相关流程保证数
据的准确性。在实际的项目中,CMDB 常常
被认为是构建其它 ITIL 流程的基础而优先考
虑,ITIL 项目的成败与是否成功建立 CMDB
有非常大的关系。
这些都是废话!
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
CMDB
CMDB
Configuration Management Database
? 运营的工程管理角度
? 以管理对象为配置个体
? 统一归类、抽象、管理
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
CMDB
我来举个栗子…
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
CMDB
? 模块、模块程序
? 以运营配置对象管理
? 存储在 CMDB
? 与 CMDB 的交互
? 统一管理
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
CMDB
目标
如部署系统、新服务上线系统
与 CMDB 的配合,达成了系统间
合作、运营信息收集结合。
CMDB 支持这些流程的运转、发
挥配置信息的价值,同时依赖于相
关流程保证数据的准确性。
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
大纲
● 什么是 CMDB
● 设计要点
● 成果展示
● 设计与实现
● 经验总结
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
设计要点
设计要点
? 业务目标
? 配置粒度
? 维护方式
? 服务情况
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
大纲
● 什么是 CMDB
● 设计要点
● 成果展示
● 设计与实现
● 经验总结
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
成果展示
文档首页
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
成果展示
文档目录
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
成果展示
资源定义
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
成果展示
/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!
成果展示
信息详尽完备
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
大纲
● 什么是 CMDB
● 设计要点
● 成果展示
● 设计与实现
● 经验总结
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
设计实现
技术小结
? tornado
? peewee
? pypy
? sphinx
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
设计实现
请求内容
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!
设计实现
格式化请求处理
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!
设计实现
处理流程
# 从域列表获取到涉及到的 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!
设计实现
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
大纲
● 什么是 CMDB
● 设计要点
● 成果展示
● 设计与实现
● 经验总结
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
经验总结
维护
? 限制
? 规则
? 简单
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
业务价值
经验总结
技术创造价值
业务体现价值
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
经验总结
合作
? 对接
? 接口 ?
? 服务 ?
? 文档
? wiki ?
? html ?
? blog ?
以提高他人的效率
来提高自己的工作效率!
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
感谢大家
Q & A
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
感谢大家
谢谢您
北京/上海/广州 0xFF Life's pathetic, go Pythonic!
联系方式
卓振杰
ottocho
ottozhuo@tencent.com
北京/上海/广州 0xFF Life's pathetic, go Pythonic!

More Related Content

柔性数据接口的设计与实现

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