新网Logo
首页>主机-资讯>

腾讯科技(深圳)有限公司运营开发leader王镇:基础网络DevOps的最佳实践

登录 注册

腾讯科技(深圳)有限公司运营开发leader王镇:基础网络DevOps的最佳实践

  • 来源:网络
  • 更新日期:2020-09-16

摘要:中国IDC圈讯,开放数据中心峰会(ODCC2020)在北京召开,峰会围绕数据中心新基建为主题,有数据中心领域及相关行业的众多专家与会。在9月16日智能监控与管理分论坛上,腾讯科技(深圳)有限

中国IDC圈讯,开放数据中心峰会(ODCC2020)在北京召开,峰会围绕数据中心新基建为主题,有数据中心领域及相关行业的众多专家与会。在9月16日智能监控与管理分论坛上,腾讯科技(深圳)有限公司运营开发leader王镇做了以《基础网络DevOps的最佳实践》为主题的精彩演讲。

我是来自腾讯的王镇,给大家的主题是《基础网络DevOps的最佳实践》,我讲的内容跟前两位同事分享的有点不一样。我们对于基础架构的运营系统一般都会分南向和北向两块,前面两位讲的更多是南向跟设备相关的这些内容,我下面的分享主要是北向跟上层业务,基础架构是干什么的?上面跑了很多应用也是运营系统需要对接起来的,今天主要跟大家分享基础网络的运营系统怎么去做DevOps。

一、首先有一个问题:为何需要DevOps?

DevOps并不是一个很新的概念,腾讯基础架构运营系统发展过程经历了刚开始时候的人工、脚本、工具化、自动化,现在逐步迈入到数据化阶段,在DevOps发展过程中根据自身的运营经验和实践去决定了DevOps可能是解决当前突出矛盾的一个比较好的方式。

总结过去有哪些比较突出的矛盾?

1、运营需求总是层出不穷,但每个运营需求提出之后,后面专业的开发总是要花比较多时间,因为开发过程有自己固有的规律,不可能今天提这个需求,明天就把开发功能放到线上去了,它后面要经过需求分析、代码编写、测试、持续维护的过程,过程时间非常长,肯定是没法去满足层出不穷的上层需求。

2、运营和开发是两个团队,他们之间的专业背景、知识以及所面临的问题是不一样的,有这样的矛盾存在。

3、腾讯过去几年在云业务或云网络业务已经快速发展,我们除了内部海量用户外,还有些腾讯云公有云业务,2年开始对外开放,私有云客户逐步加入进来,我们对应基础架构运营系统服务的对象逐步丰富了,需要运营系统具备二次开发能力,这样DevOps的需求也慢慢展现出来了。

二、如何理解DevOps?

DevOps并不是一个新技术,这是国内一个前辈根据过去多年经验所总结出来的一个DevOps标准分级模型,有1-5级,通过了国际化标准认证。DevOps没有带来新技术,所有技术都可以在DevOps开发模式里应用出来,主要目的是为了提升应用开发效率,解决上页所提到的三个主要矛盾,解决的方式是以人为本,解决运营和开发供需的矛盾,从人性出发去解决深层次挑战。

这是DevOps应用开发的现状,是DevOps开发现有的成果,分两方面:第一,DevOps的应用,是去运营服务器、运营网络、运营基础数据中心的这些运维人员自己在DevOps平台上所开发的上层应用。第二,基础应用,原有专业开发基于同一套平台上做的应用开发。这样传统的运营跟开发都基于同一套DevOps平台互相做融合,践行了一句话——“吃自己的狗粮”,怎么理解这句话?它有两方面含义:对于运营同学来说,把自己的需求落实到DevOps平台里,DevOps平台出来上层有什么问题,他首先会从自身层面出发会反思这些需求或者业务逻辑是不是有问题,对专业开发人员会看同一个DevOps平台开发应用出了问题之后,是不是哪些功能没有完善、哪些地方出了BUG,双方会从自身角度去完善已知问题,双方关系会越来越融洽,说明了怎样以人为本。

DevOps最关键的前提是要把我们的运营事务流程化,过去去腾讯内部工具化、自动化、数据化绕不开的一个前提是把所有的运营事务流程化,我们把过去腾讯那么多年的经验做了总结,整理成这样5个级别,我们现在大概处在LEVEL3级别,LEVEL3的重要参考依据是:1、体系化,所有运营事务都有对应流程跟它一一匹配,做到“无流程不运营”状态,杜绝很多线下操作的环节,如果大家对资产这块线下操作,现场更换硬盘或设备板块,如果没有线上流程对接,很可能换的这个板卡跟型号对接不起来,带来比较多的问题。

2、部分流程完成生命周期管理,为什么要讲生命周期?流程上线之后如果没有持续维护,久而久之,流程可用性和稳定性就得不到保证了。

3、完善OLA/SLA的管理,每个流程有自己的可执行时间,每个任务节点需要有预定完成时间,这里从数据化层面把流程做到可运维。

4、工具快速敏捷迭代,这涉及到二次开发能力,我们运营系统不单是服务内部,很有可能有非常多外部客户,特别是小型私有云客户也需要用到。右手边是展示了我们把运营事务集中,业务逻辑落地到流程图的方式展现出来,这是其中一个例子。

三、如何建设DevOps系统?

我们应用了一个DDD模式自上而下去设计DevOps平台基础模块,重点关注DDD领域层。建立DevOps平台,主要有四个大模块需要建立起来:

第一块,流程可编排。右手边有个流程图,运营人员根据自己日常运营需求把业务逻辑用流程图的方式编排出来,编排过程需要提供流程画布,让大家通过上层业务逻辑通过流程图展现出来。

第二块,每个流程图有很多任务节点,每个任务节点只是摆在那里而已,它的工作是什么呢?它底层有个任务管理、应用管理模块去实现这里面具体的任务节点。

第三块,数据运营。每个流程建立起来之后,怎么知道这个流程执行的效果如何?历史流程执行效率怎样?运营事务当前能力成熟度怎样?都需要在我们流程里提取数据做事后分析,意思是我们可以做个数据化的运营。这里面依赖重要一点,运营节点里面需要有非常细的打点信息,打点信息回来之后形成历史数据积累,后面做数据化运营工作就非常便利了。

第四块,异常管理。异常管理是做DevOps监控的,DevOps平台可以用来监控基础设施,但是DevOps平台本身也需要一个监控,我怎么知道这个平台当前运营的状态怎样、它的健康度有没有受损?所以这里有个异常管理模块。

四、我们如何建设DevOps系统?

DevOps平台也分南向和北向,从南到北分三个层次:

第一层,面向设备命令模板。把很多设备的硬件建模、配置都做成一个模板的形式,这样就可以减少网络运营人员对于不同厂商设备需要去定制很不一样的命令参数,这些很不一样的命令参数都以模板形式封装起来了。

第二层,业务函数。

第三层,业务流程。业务函数和业务流程都是跟上层应用相关的,这里我们不是用模板形式把它封装起来,而是从软件开发角度用SDK方式把它包装起来。如果很多业务函数、业务流程如果具有是复用性的,都做成SDK的方式封装起来,并且通过标准化接口在SDK里暴露出来,而且这个SDK里具备服务发现的功能。

总体一个原则,设备和业务逻辑都需要经过抽象和标准,尽可能减少开发代码的写入,这里有个标题叫“无代码化开发”,并不是说一行代码都不写,而是说尽量以可配置、可复用模式减少写代码的工作量,因为毕竟运维人员不是专业的开发,他们想用拖拽或者可配置的方式把业务逻辑通过这个流程接起来。

建设DevOps系统有一个开发生命周期的管理,开发工作要经历几个步骤?第一,做需求管理,第二,写代码开发,第三,做流程管理、任务调度管理、异常管理,这里内容比较多,我就开发管理模块具体来讲,因为这块是跟运维同学打交道最多的地方。接到一个开发需求之后提供一个便捷的IDE,就是在哪里写这个代码,刚开始C++有一个,现在写Python也有,但这些比较专业的ID工具都有上手的门槛,使用ID工具以培训课程的方式推荐给大家做些宣导。代码写完之后做代码管理、单元测试、持续集成、持续部署,这些配套的过程都需要建立起来,这些在我们内部已经有很成熟的管理体系了,我们借用业界成熟的通用组件和内部高效的组件,可以快速把DevOps平台这几个模块搭建起来。

DevOps系统建立起来怎么部署?刚开始只有一套部署方式是内部docker化部署,但是这几年DevOps平台在腾讯云外部私有云用户里也有部署,所以我们也做了单机部署的方式,总体原则是希望DevOps平台做到简单可依赖,而且接口可以开放出来提供底层能力,这当然要根据用户具体需求,到底它是需要底层设备的掌控能力?还是需要底层设备的流量+数据?我们开放出来,基础信息已经抽象提炼好放到统一的存储空间里,有标准化的HTTP接口对外提供出来,都是可以按需去提取的。DevOps平台没有任何一个界面,界面方式是由各个终端用户自己去定制的,我们提供的是标准化的API接口。

再讲讲运维DevOps平台相关的产品化控制台。除了要面向多用户,刚开始运营系统是面向开发人员,但是后面除了开发人员外,还有运营人员也需要开放这个能力。第二块,底层能力,流程图流程跑的情况怎样、任务调度管理线程怎样、权限管理,这些都需要开放出来,让上层运营人员可定制的方式进行迭代,尽量减少专业开发人力的投入。

这里我们设计了一个培训认证体系。DevOps平台具备一定的门槛,不是新人进来花一两周时间就能接触到DevOps平台或者基于DevOps平台开发上层应用,所以我们会有培训体系,完成开发知识基础课程、DevOps功能开发、demo流程实战之后会给他上岗证,根据不同层次、不同级别颁发证书。例如有些同学只是写写硬件模板、设备模板、配置模板,有不同级别分别去颁发。还有些高阶的同学从南到北,从上层应用到设备的命令模板都可以处理好,这种给他颁发级别比较高的证书。

五、DevOps平台最差实践

既然DevOps有最佳实践,也有最差实践,过程中并不是一帆风顺的,总结过程中的两方面:

第一,我们做得不够的地方。例如研发效率低下,例如有些同学介入开发之后在本地开发时由于网络策略问题导致接口调不通了,这都是我们平时做得不够的地方,因为DevOps平台需要做的事情太多了,专业开发人力有限,前期平台功能非常多,需要我们准确识别哪些功能是必备的、哪些功能是可以放一放的。

第二,我们做得太多的地方。就是之前我们想多了,因为这个东西没有前人积累、没有对标产品可以借鉴,都是我们摸着石头过河,通过大家一步步相互磨合,边用边优化方式把DevOps平台完善起来。

六、DevOps体系度始终

我们不希望DevOps在腾讯内部是很闭塞的系统,我们利用各方力量完善DevOps平台,这有两方面:

第一,运营商接口打通,跟设备供应商打通,例如设备板卡有问题了,跟硬件相关的线上需求,都通过标准接口打通。

第二,DevOps通过DCOS系统对外服务,目前DCOS通过腾讯云这个平台在全国各地部署了100多个局点,大家使用DCOS平台后会反馈使用过程中的不足,或者使用过程中还有哪些功能点需要优化,不断反馈回来。我们希望DevOps平台推出去之后,大家可以多使用、多提优化意见,大家一起去共建DevOps平台,让DevOps平台的功能越来越多,问题越来越少。

谢谢大家!

新网箭头云服务器