您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 招聘面试 > 腾讯QQ后台高级运维工程师 肖先敏 《Python在QQ后台运维中的应用》
Python在QQ后台运维中的应用主讲:肖先敏(encorexiao)肖先敏(encorexiao)腾讯QQ后台高级运维工程师2011年加入腾讯,一直从事QQ后台运维工作先后负责QQ核心通信,音视频、图片、文件、c2c消息漫游等后台相关业务的运维主导了十多个运营系统的规划设计和建设一项国家B级专利个人简介QQ后台运维的发展历程1Python在QQ后台运营系统建设的应用2基于python的后台任务执行系统介绍3大纲!QQ后台运维的发展历程1Python在QQ后台运营系统建设的应用2基于python的后台任务执行系统介绍3大纲!QQ后台运维发展【混沌时代】•开发自己运营•业务运维人员少【脚本时代】•DO分离,运维接管业务•规范化2008年2010年2012年2014年【云时代】•自动化部署•自动化调度【工具时代】•运维辅助系统•脚本+web【标准化时代】•omsadmin2013年【后标准化时代】•Imatrix研发运营框架QQ后台运维的发展历程1Python在QQ后台运营系统建设的应用2基于python的后台任务执行系统介绍3大纲!30418011988717165322213865542C++/CJavascriptJavaPythonPHPObjective C其他语言HTMLCSSPython在腾讯运维脚本自动化测试数据分析Web开发Python的优点系统默认安装代码简洁语法简单易学什么事都能干(第三方库多)腾讯内部的公共组件python占比接近10%Omsadmin一套集进程部署、启停、拉起、发布、回滚、一致性检查、自动升级等功能于一体的脚本工具包进程管理Python在QQ后台运维中的应用ServerMonitor用于采集服务器的基础特性,包括CPU、内存、网卡包量和流量、磁盘IO、Fd等的工具,在机器初始化时默认安装监控管理QQ容量管理系统对QQ几万台服务器进行容量计算聚类分析和展现、提供扩容参考QQ运营门户系统QQ的运营管理工具的集合,提供便捷的入口Web系统check_proc.sh+module.confomsadmin+admin.yamlShellPythonVS进程管理方式转变Web系统开发运营开发运营开发+业务运维业务运维+运营开发DoitPHPFlightDjangoJSP+servlet+JavaBeanExtjsBootstrap+hightchartBootstrap+hightchart织云运营门户学习成本低小型系统能快速开发适合运维“php是最好的编程语言”学习成本较高适合大型系统的开发适合专业的开发QQ后台运维的发展历程1Python在QQ后台运营系统建设的应用2基于python的后台任务执行系统介绍3大纲!业务服务器集群运维的体系后台任务执行其他系统接口业务扩容业务部署程序更新业务上线配置更新业务测试监控告警故障处理质量优化业务规划预算核算架构优化成本优化运营建设配置系统部署系统发布系统容量系统调度系统监控系统任务执行系统该如何设计?通用DRY可定制可视化任务系统的设计Web交互层CGIScript任务管理器RabbitMQRedisMongoDBSQLAlchemyDjangoORMTaskStore1N1brokerCeleryWorkersTask①②Celery:DistributedTaskQueueCelery任务执行$pipinstallceleryfromceleryimportCeleryapp=Celery('tasks',broker='redis://localhost:6379/1')@app.taskdefadd(x,y):returnx+y$celery-Atasksworker--loglevel=infofromtasksimportaddadd.delay(4,4)Step01:InstallCeleryStep02:GetCeleryInstanceStep03:RunningCeleryWorkStep04:CallingTaskTask简单任务•做一件事情•SimpleTask.shSimpleTask.py复杂任务•Step1•Step2•Step3•Step4•……….第三方接口DB操作机器操作逻辑计算ComplexTask.py任务系统的设计•Step1•Step2•Step3•Step4•……….第三方接口DB操作机器操作逻辑计算ComplexTask.pyInterfaceScript.pyClassAfuncXfuncYfuncZClassBfuncPfuncQ监控类接口权限类接口查询接口设置接口更新接口查询权限申请权限原子任务FuncAFuncBFuncCFuncD流程模版任务系统的设计1.如何动态的组装调用这些原子任务?2.原子任务之间如何传递参数和结果??使用getattr函数,可以得到一个直到运行时才知道名称的函数的引用getattr(object,name)•Step1•Step2•Step3•Step4•……….第三方接口DB操作机器操作ComplexTask.py逻辑计算InterfaceScript.pyClassAfuncXfuncYfuncZClassBfuncPfuncQ监控类接口权限类接口查询接口设置接口更新接口查询权限申请权限原子任务任务系统的设计1.如何动态的组装调用这些原子任务??---test.py---importdatetimeclassTestTask():def__init_(self):passdefprint_now_time():printdatetime.datetime.now---call.py---scriptName=test.pyclassName=TestTaskmethodName=print_now_timescriptObj=__import__(scriptName)classObj=getattr(scriptObj,className)classInst=classObj()testFunc=getattr(classInst,methodName)testFunc()提供接口函数打印日志logObj.debug()logObj.info()logObj.waining()logObj.error()提供接口函数获取步骤的参数和结果getTaskParameter(apply_id,task_step)setTaskParameter(apply_id,task_step,para_dict)getTaskResult(apply_id,task_step)setTaskResult(apply_id,task_step,para_dict)每个任务func都接收两个参数funcA(apply_id,task_step)2.原子任务之间如何传递参数和结果??FuncAFuncBFuncCFuncD流程模版输入实参流程实例输入参数输出结果输入参数输出结果输入参数输出结果输入参数输出结果参数和结果标识:apply_id+task_step任务系统的设计任务系统的设计每个原子任务接收的参数和结果的格式是不同的?输入实参流程实例MFuncAFuncBFuncCFuncD流程模版M流程实例NFuncXFuncBFuncYFuncZ流程模版N输入实参规范化参数参数和结果全部用dict,转化为json存储命名规范(eg:ip_list)编写中间任务做上下游任务的参数和结果格式的转换funcForword(apply_id,task_step)reDict=getTaskResult(apply_id,task_step-1)chDict=ChangeParameter(reDict)setTaskParameter(apply_id,task_step+1,chDict)任务如何执行?扩容模版部署模版部署模版发布模版下线模版输入流程模版实例参数订单任务引擎任务系统的可视化原子任务管理流程模版管理流程订单管理后续优化可以直接通过页面编辑脚本每个步骤的执行耗时统计
本文标题:腾讯QQ后台高级运维工程师 肖先敏 《Python在QQ后台运维中的应用》
链接地址:https://www.777doc.com/doc-5380864 .html