回顾十年运维路 深思只为更好前行——腾讯赵建春
jasm1698
8年前
<p>赵建春表示,04年加入腾讯至今已是十年的运维老兵,和团队随着时间的推移共同成长。回顾这十年,如有一次重来的机会,什么才是真正最重要的?什么是团队优先做好的一件事情?进行思考,再去深思,这样做只为支撑我们更好的前行。</p> <h2><strong>关于赵建春及所处的团队</strong></h2> <p><strong>赵建春,</strong>目前负责社交网络负责大数据和运维工作。04年加入腾讯,加入之后做贺卡开发,05年加入QQ空间开发团队,负责留言版模块。06年底开始随着公司组织架构变化,开始接触运维工作,到现在有10年时间。</p> <p><strong>运维团队,</strong>主要是负责以QQ延伸出来的各种社群的运维和维护,包括QQ空间、QQ音乐、QQ会员、QQ秀等一系列的QQ产品。真实员工89个人,加起来外包同事,维护了10万家服务器,维护的能力和谷歌比起来还是有差距,但是对很多传统企业来讲,可算佼佼者。</p> <p><strong>团队经历,</strong>如红米空间首发,红米QQ空间90秒卖出10万台设备,获得1亿点赞。天津大爆炸事件,把天津2亿多活跃用户,从天津快速调到深圳以及上海,在中国互联网史算得上是一次非常大规模的调动。春节红包准备工作,今年比去年的红包访问量增加了10倍以上,快速的扩充了5000台设备,前段统一机构部署,最高访问量达到477万次每秒。</p> <p>赵建春表示,作为运维团队来讲,最最重要的事是先保证自己做的系统可靠、不会轻易出错,不要让自己变成一个救火队员。可靠之后,就要用更多时间去解决效率问题,让工作变得更加高效,最后是追求更高的目标。 </p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/98149de7b988d8a7539890886b65984f.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/665ca9b3b5fcfc55cc5eed15888eb67c.jpg" width="651" height="410"></a></p> <p style="text-align: center;"><strong>对我们高效、可靠帮助最大的是什么</strong></p> <p><strong>对团队工作帮助最大的是什么?</strong>如上图,资源管理是要把写出来的程序和代码,进行一个清晰划分和分类,对每个资源有不同形状,进行搭建。容错方案是在维护海量服务时,运维过程中出现故障是确保不能影响项目服务,服务器要做到及时处理。 统一架构CMDBA是把一个业务模块上所有依赖资源全部登记进去。同时如果做快速决策和调度,还需要有效的监控。DLP是内部定义的一个非常关键的监控,这个点发生后,可以知道哪里出现故障。入口监控是告知出现故障的根源在哪。容错方案的L5是用来解决容错、灰度,路由等。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/36140818d4f8efb6bb55d803c83c09dd.jpg"><strong><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/4fd9900191cae842c63f5e6fc6a65cf1.jpg" width="623" height="451"></strong></a></p> <p style="text-align: center;"><strong>世界上管理服务器最多的系统</strong></p> <h2><strong>L5系统</strong></h2> <p>赵建春表示,运营管理系统管理了上亿服务器,脉络非常清晰,根本不会出现混乱。L5系统(上图)也类似于DNS系统,有一排能提供的服务模块,从而解决的单点问题。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/d8738f0c0953273feb090bb0f9f61176.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/021950074c751220095c38d05ac228ed.jpg" width="600" height="384"></a></p> <p style="text-align: center;"><strong>L5-主机/接口级的容错原理</strong></p> <p><strong>L5如何做容错?</strong>如上图,L5有由L5、DNS和L5、agent两部分构成。CGI通过给模块提ID,根据模块下设备的成功率和延迟情况,通过IP+PROT给CGI一个反馈,访问之后,通过成功率和延迟情况,把数据上报给了L5agent,然后做统计数据。当发现失败率特别低的时踢掉。当发现成功率和失败率有一定下降,会把访问权重降低,从而达到容错和负载均衡的作用。可以注册一个模块,加多台设备,形成容错效果。如发现一台机器失败率很高,就把它踢掉。它成功率恢复过来,还可以再加回来。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/a1e07b6188ccbc85fd77965adbe6123b.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/e7abdbddc3b750e1744b6742721cc379.jpg" width="600" height="278"></a></p> <p style="text-align: center;"><strong>L5的灰度、容错、路由、负载均衡能力</strong></p> <p>新加一台服务器设计它的权重为1,假如之前的是100,可以逐渐上线。还可以给它一个得分,得分下降的时候,快速把它踢掉。L5具有灰度、容错、路由、负载均衡的能力。</p> <p><strong>L5对运维团队有哪些帮助? </strong>减少了80~90%的日常故障、不再需要频繁的变更ip+port(也是故障源)、同过名字便利的服务上下线、通过权重灰度上线、模块访问关系可帮助定位根源故障、接口的延迟和失败率可用来监控、集容错、负载均衡、路由、灰度、监控能力于一身</p> <h2><strong>统一框架和架构</strong></h2> <p>赵建春表示,团队里有上千号开发同事,每年会有大量毕业生加入,也会有社交同事。进来以后,都希望为平台做更更多的代码贡献或展现自己特有的技术实力也或提高自己。 </p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/e46d05d5c78a9fb281532fde6b0204d0.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/d2bb82b39eff795131b7e459205aab91.jpg" width="600" height="401"></a></p> <p style="text-align: center;"><strong>统一框架</strong></p> <p>那问题来了,在开发过程中,如上图,有管道、消息队列、信息文件锁、记录锁、文件影射内存、还有迭代服务器Select poll Io等,这些是用各种各样技术组合生产出来的代码,交给团队维护,数以万计不同性格的服务器,要掌握得非常好,能了解它的工作机制和原理,更好的维护它基本上是不可能的事情。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/f53d44ee9f33e91bbf0d38e72ebd4bd4.jpg"><strong><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/a448791b3f245fc1a803db765404c059.jpg" width="600" height="369"></strong></a></p> <p style="text-align: center;"><strong>统一框架</strong></p> <p>那就如上图,把网络通讯部分列成一个标准框架,提高它的通讯效率,统一维护。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/879a450c82d3efd4c3553c70c1669d4f.jpg"><strong><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/10bd17522c005bf6089b8e09c02a5c1e.jpg" width="600" height="274"></strong></a></p> <p style="text-align: center;"><strong>统一框架:接入和逻辑</strong></p> <p>业务逻辑部分用SO动态库方式编写与框架分离部署,类似WEB服务器上的CGI。接入层用QZHTTP,逻辑层是SPP和SF的框架。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/65e5bd6182cb795f2ba38f9f5d661a3f.jpg"><strong><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/d749348c87c3f8d2601b7e8eb3d30000.jpg" width="600" height="319"></strong></a></p> <p style="text-align: center;"><strong>统一框架:存储</strong></p> <p>作为社区类服务,虽然用户的热点并不是很集中,但数据量、访问量还是很大。大量用CKV存储,同时针对访问量非常大的问题,如说用户没有开通空间,游戏用户,会员等标记,之后均做一个定位,形成一个高访问量的模块即可。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/2873f9ea8657c086df18ef8bb2e3a27c.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/aa1f133bdba41fcfcaf57aedfde70c05.jpg" width="600" height="373"></a></p> <p style="text-align: center;"><strong>统一框架:标准架构视图,管理管理节点</strong></p> <p>如上图,是一个架构体系,接入层是TGW,流量从它进、从它出。对于中间层,利用L5进行调度。在存储层,因为每一个存储模块要分耗段,故加入Access,从上到下把技术架构进行了统一规范,同时在组织上也通过接入逻辑运维层,进行标准化的维护。</p> <p><strong>统一框架对运维有什么帮助?</strong> 网络框架和业务逻辑SO分离管理、运维人员学习成本大大降低、框架稳定性极大提高、可跨业务统一维护、运维效率提升最高可达10倍。</p> <h2><strong>资源打包管理</strong></h2> <p style="text-align: center;"><a href="https://simg.open-open.com/show/277264017462d35613262e8187ba02f2.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/f6b56e0dc23b1c4a2ea5b5ebdaaa1233.jpg" width="600" height="376"></a></p> <p style="text-align: center;"><strong>所有程序统一打包</strong></p> <p>如上图,资源打包管理是对开发出的程序包进行标准打包操作,一个程序开发出来有不同特征,有需要加银行参数,有需要依赖目录,还有需要前面准备工作和后续善后工作,把它全部放在一个类似于包里面,装进一个盒子里。之后提供标准的操作接口,如安装、卸载、启动、停止操作等这些操作让它们变成有关联的。</p> <p><strong>资源打包管理对运维有什么帮助?</strong>部署规范统一,再也不担心找不到、标准化了操作界面,极易学习掌握、支持前后置脚本做准备和善、进程级运转的所有资源的完整镜像。</p> <h2><strong>资源登记——CMDB虚拟镜像</strong></h2> <p>资源登记到二级CMDB形成服务的虚拟镜像,除了传统基础配置信息,把一个模块依赖的资源,全部记录进2级CMDB,形成一个模块的虚拟镜像。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/ae091780ffc8d2620fec501982b0f62a.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/8721bcb2c37d29d01c05d4e5dc0e7dbb.jpg" width="600" height="283"></a></p> <p style="text-align: center;"><strong>CMDB+资源=虚拟镜像</strong></p> <p><strong>CMDB虚拟镜像对运维有什么帮助?</strong>一个模块运转的所有资源的“完整镜像”、记录了模块运转所依赖的所有资源、不再需要文档说明。</p> <h2><strong>决策调度——织云自动化部署平台</strong></h2> <p style="text-align: center;"><a href="https://simg.open-open.com/show/5bfbdbe1776458ab31b98d632f3232dc.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/aabe98a7147e77a27f1281f2b2408e1a.jpg" width="600" height="315"></a></p> <p style="text-align: center;"><strong>织云自动部署流程23步</strong></p> <p>赵建春表示,如上图,在团队内部有织云自动化部署平台,从申请设备获取资源、发布部署、检测,进行测试,上线。在每个环节还有些细节步骤,如申请设备的时屏蔽告警事件,如发布时同步传输文件、如发布后检测程序的包进程是否启动,启动之后进行业务测试。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/93b08f70c05f013bc166fedf526114cf.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/a7cf3a7ebf90650ef574e1bd4efaabdc.jpg" width="600" height="401"></a></p> <p style="text-align: center;"><strong>腾讯织云自动化运维体系</strong></p> <p>如上图,是织云内部自动化部署的平台。相当于把这个进程开发出来以后,依赖的资源全部打包放在盒子里,把盒子里的东西放资源仓库中,有一些模块全部登记在CMDB。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/3d4be1ad2737efc3e72204f4f9d8ca73.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/e417dbd929ac45585d7f30c223e75972.jpg" width="600" height="377"></a></p> <p style="text-align: center;"><strong>织云全自动扩缩容</strong></p> <p>如果要部署一个模块A或进行扩容,可是人工触发或自动系统触发,控制人工系统进行操作,把模块边上三个资源,由资源仓储部署在模块1上,通过L5系统进行一个注册,这个模块就可自动上线。之后会把一个模块登记回来,对它进行自动化操作,每一个方块是一个步骤,这个步骤执行过去之后是绿色的,执行失败是红色,没有执行是灰色。执行成功就可以看到,可以做自动化的扩容,可以做日常演习,还可以回收等工作。</p> <p style="text-align: center;"><a href="https://simg.open-open.com/show/a92c39e1644d7b9183094009a7850a06.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/5167f1c8cafb891c68cc64536b56959d.jpg" width="600" height="315"></a></p> <p style="text-align: center;"><strong>运维规范的推进历程</strong></p> <p>赵建春表示,上图是运维规范的推进历程,看起来还是比较自然而然的过来。但是实际上这个事并没有这么容易做。</p> <h2><strong>运维最难解决的问题是什么?</strong></h2> <p>赵建春表示,运维最大的困难是历史问题。每个团队都会遇到自己的历史问题,解决一个,就又会出现一个。 虽然运维团队不能重来一次,但现在有很多创业团队,有很多新项目,能不能在最初的时候,就有运维和开发共同参与制订未来运维工作有预见性的规范规则,之后由开发把它根基打好。如果开发对用户的帮助非常大,那一定需要运维和开发深度配合合作,才能打造高效运维基础,达到一个高效的效果。回顾运维这十年的路程,深思熟虑的思考,只为了在未来可以更好前行。</p> <p>本文整理自,由51CTO传媒主办的《WOT2016互联网运维与开发者大会》上来自腾讯社交网络运营部助理总经理、技术运营通道会长赵建春主题为《如果运维可以重来一次》的精彩演讲。</p> <p><strong>演讲视频:</strong>http://edu.51cto.com/lesson/id-100765.html</p> <p><strong>讲师简介:</strong></p> <p><a href="https://simg.open-open.com/show/7997057b117c820d74f1bdfe5326ef46.jpg"><img alt="回顾十年运维路 深思只为更好前行——腾讯赵建春" src="https://simg.open-open.com/show/410367ba9ea453d0074afa6020cb0286.jpg" width="248" height="248"></a></p> <p>赵春生,腾讯社交网络运营部助理总经理、技术运营通道会长、专家工程师。04年加入腾讯,先后从事过研发、运维、数据方面的建设和管理工作,在海量技术运营方面积累了丰富的实战经验。</p> <p>via: http://developer.51cto.com/art/201605/511089.htm?utm_source=tuicool&utm_medium=referral</p>