腾讯云海量社交网络业务下的DevOps架构应用实践
kyle_fang
7年前
<p>在DevOps的理念中,企业的IT价值链流转的速度越快,意味着企业的互联网产品的交付能力越强,这也意味着在同行业的竞争中,企业凭借IT能力的优势,能够收获更大的竞争优势。也因此,DevOps框架的落地与实践,成为时下非常热门的话题。</p> <p>以海量用户规模和社交网络业务著称腾讯公司,在多年前便开始着手的部署DevOps。在前不久腾讯云+未来开发者专场,腾讯的资深工程师和架构师,通过 DevOps敏捷开发工具集、DevOps流水线应用实践、云端架构与部署、无服务器架构等主题内容介绍,详细讲解了腾讯海量业务下的DevOps架构探索与实践,InfoQ将其中精彩内容做了整理,希望给更多人提供参考和借鉴。</p> <h2>腾讯云 DevOps 敏捷开发工具集</h2> <p>一般的软件产品开发,包含用户需求分析、架构设计、设计模型、编码、测试几个过程。而DevOps,就是这些过程实现的纽带,通过开发运营的一体化,可以将软件开发流程无缝的衔接在一起。</p> <p><img src="https://simg.open-open.com/show/96ed6dddf20aee5c98e639dfad9e6679.png"></p> <p>为了顺利完成项目的实施,腾讯云开放了TAPD(腾讯敏捷研发平台)、TGit(腾讯Git源代码管理)、CCI(持续集成服务)、SODA(游戏持续集成)、织云(云端运维)等DevOps系列工具集,通过这些平台,开发者可快速完成产品的交付与运维。</p> <ul> <li>TAPD是长期服务于腾讯自有业务的敏捷开发平台。自2006年腾讯推行敏捷开发开始,TAPD在十年时间内服务了腾讯内部上千团队的敏捷研发,并梳理出迭代模型、大象模型、极速模型等三种典型研发模型。</li> <li>TGit是一款基于Git的代码管理工具。支撑了腾讯各个业务的代码的编写和代码的存储、积存、部署流程。TGit支持多客户端支持,并能提供类Github的操作体验,支持在线代码检测与评论等。</li> <li>CCI持续集成服务是一款针对Web部的前端后台的数据集成的产品。目前,CCI可以支持JAVA,C++、PHP等语言的构建,并能和TGit、织云原生兼容。开发者可以将代码写在TGit,又能非常方便的把代码拉到CCI上面去做构建,同时,CCI还支持定时构建,以及代码提交时间触发构建功能。</li> <li>织云是源自于腾讯的企业级运维管理平台。亦被称为一站式新态企业运维平台,它支持公有云、私有云、混合云管理,能一键式运维操作,灵活高效。通过智能构建,织云已能实现无人工值守、多触发器支持和代码自动扫描等持续集成功能,整合开发与运维过程。</li> </ul> <p>以上这些产品将陆续开放,感兴趣的读者可以登录腾讯云官网注册试用。同时,腾讯云Devops产品总监秦俊现场透露,腾讯云将在近期与微信团队合作推出一个新的功能,该功能依托腾讯云DevOps的体系建设,可帮助小程序开发者实现腾讯云帐号的开通、代码部署、代码的上传部署全流程。这项功能将于近期跟随新版小程序开发工具对开发者免费开放。</p> <h2>腾讯云DevOps流水线平台应用实践</h2> <p>前面说到了腾讯的DevOps工具集,那么,这些工具集在具体的开发流程上都起着怎样的作用呢?腾讯织云负责人梁定安从腾讯DevOpsy应用实践、应用架构的可运维性以及织云产品的部署实践三个角度做了详细的阐述。</p> <h3>腾讯云DevOps应用实践</h3> <p>如图以下为腾讯的DevOps流水线,开发人员录入需求,经过TAPD项目评审,分解成一个个的直接开发实现的特殊功能,存放在腾讯内部,进入到持续集成的阶段,做自动化的编译、集成、自动化测试、代码的近态扫描,如果有一些不合规范的代码,主干测试无法通过。这时候需要CIS解决问题,问题解决以后会形成一个制品库,和织云系统进行对接,织云系统拿到制品库,按照腾讯标准的发布、管理的方案,把制品、软件发布到生产环境,进而去做灰度测试,再上线的一个过程。腾讯的海量业务使用这套流水线系统可以轻松完成从需求设计、代码管理、开发测试、发布&运维的各阶段工作。</p> <p><img src="https://simg.open-open.com/show/1db3d2dbdfe75d76f3fd0ea0dc1853aa.png"></p> <p>这其中,TAPD支持敏捷项目管理,实现产品需求与开发分支关联;TGit支持代码管理,通过webhook钩子触发持续集成系统的能力;CIS负责自动化完成编译、测试等任务,以输出制品库:软件包或docker镜像;织云对接CIS获取制品,以自动化的方式完成业务的发布/变更任务。</p> <p><img src="https://simg.open-open.com/show/13a439de946bb162ab3c49c3d343593d.png"></p> <h3>应用架构的可运维性</h3> <p>对于互联网产品而言,发布仅仅只是开始,在持续为用户输出价值的运营过程,由运维团队和系统来保障服务的稳定可靠。梁定安认为要实现可运维性的过程可分为4个阶段:统一架构、运维规范、标准操作、运维自动化。</p> <ul> <li>统一框架:将互联网的业务架构抽象成为三层:接入层、逻辑层、数据层,框架化的引入,可以有效的降低开发的工作量,通过有限的编码即可实现快速业务功能需求。</li> <li>运维规范:组件可以将共性的服务统一化,如腾讯内部大量应用的软件路由服务,可以帮助实现负载均衡、名字服务、容错、过载保护、流量调度的功能特性。除了为业务解决了路由的难题,也使日常的运维管理变得更加简单高效。</li> <li>标准操作:将工作人员的操作标准化,避免因为岗位人员的流动而导致产品重构,造成重复造车现象的发生。</li> <li>运维自动化:自动化运维的方案,就是统一规划、标准化、配置化、自动化、监控,这里不能漏了监控。</li> </ul> <p>通过虽以上可运维内容的统一规划与标准化,可以保障了业务架构有序的发展,架构的演变从千人千面进化成千人一面。然后结合框架与组件的非功能规范,使运维保障业务质量与效率的规划落实。</p> <h3>腾讯云织云的持续部署实践</h3> <p>随后,梁定安着重介绍了腾讯织云平台的部署实践。下图为腾讯织云功能的一览图,在织云平台中,将标准化的运维对象配置化,每个微服务集群在织云CMDB中被定义成不同的模块名。从统一规划、标准化、配置化、自动化到联动监控,用持续部署的流水线工具串行起来,用户将得到一个体系化的运维能力模型,基于此模型,运维团队能够全局规划持续部署的能力与工具系统。</p> <p><img src="https://simg.open-open.com/show/103e1977b3290f0ba8a3c057864b97c0.png"></p> <p>以织云的自动化扩容流程为例,将原子运维工具或系统接口以运维的最优操作流程组织起来,自动化的完成扩容操作,并且保证每个步骤都会被严格执行到位,不会受个人的经验深浅或文档的新旧影响。从而解决运维团队“文档即过期,离职即消失”的难题。</p> <p><img src="https://simg.open-open.com/show/bb0b4b53fea6842ebe721c19fca4958c.png"></p> <h3>云端架构规划与应用案例</h3> <p>如果说Devops是保障产品开发顺畅的通行证,那么,云端架构的规划就是产品顺利进行的指南针。一个好的架构规划,往往能够使产品在开发的过程中少踩很多“坑”。腾讯云架构师张兴华认为,企业在云端架构设计时一般面临以下几大架构痛点,并且根据这些痛点提出解决方案:</p> <ul> <li>第一,高可用挑战。如果产品在架构设计上或者在容灾方面考虑不周,将面临高可用的挑战。解决方案上可以利用云的资源做多地域的容灾,在架构层面可以进行不同层级的拆分,比如讲将核心服务和非核心服务进行分级,同时还可以一些做灰度或者迭代的改进。</li> <li>第二,性能瓶颈。在数据库的调用过程中,高并发的交互可能会导致数据库完全无法及时响应。解决方案可以根据需要推出不同的数据库版本或者针对不同的场景或业务类型,选择不同的云服务进行不同的优化。</li> <li>第三,数据库设计。自建或者自己维护自有的数据库是比较难的,企业需要提前做好业务上长期规划,提前做好业务分库、分表的设计。</li> <li>第四,安全。目前DDos攻击流量最新数据超过了600G,抗DDos需要借助云服务未雨绸缪;同时在操作、容灾、数据、权限等安全层面都需要在架构上提前规划。</li> </ul> <h3>腾讯云架构规划案例实践</h3> <p>现场,张兴华以摩拜单车为例,详细解读了腾讯是如何帮助用户做架构规划的。摩拜今年年初从其他云迁到腾讯云,开始摩拜的架构包括流量相对比较小,架构也相对简单。但是这里有一个问题是在逻辑层没有做拆分,只做了单一Region的部署。随着业务的发展,这样的架构已经无法满足需求。</p> <p><img src="https://simg.open-open.com/show/8803d1be6e7d051e25d9d7f5e1eb6b1a.png"></p> <p>腾讯云对摩拜单车进行了整体架构优化,将整体安全接入摩拜架构体系,并在路由层及业务逻辑层进行了核心功能业务拆分,做到微服务化;在数据层面,实现了Mongo定制化优化,Mysql性能定制优化,同时深度整合了腾讯云的云API,构建了摩拜的Devops系统,快速稳步发展。在运营管理上,腾讯云给摩拜推出黑石+大数据的方案,黑石+Docker的解决方案,能够快速的去构建、部署和扩展,形成了一个比较通用的高可用架构设计。张兴华表示,对于快速成长企业来说,随着技术架构的演进,企业需要提前做业务的拆分与规划,支持高可用、可扩展,做到多地域双活与多活部署。</p> <h2>让云端开发更简单的无服务架构</h2> <p>在微服务还方兴未艾的时候,无服务架构就以其弹性伸缩、按需付费以及无维护等特点得到了很多开发者的青睐。腾讯架构平台部技术专家陈杰表示,无服务架构的核心理念就是给整个服务提供一种公共的架构,针对性解决服务的接入、安全、扩容、容灾、分布等一系列问题。</p> <p>腾讯的无服务器架构包含两个部分组成,第一个是FAAS(函数即服务),提供可计算的云服务,这是无服务器的核心部分。第二个是BAAS(后端即服务),包括云对象存储、云数据库、云消息队列等。企业可以在云函数里面执行还可以访问各类的云服务,这样的话,云函数不仅是一种定制的计算,还可以作为整个云平台的融合器,大家可以把云函数加上后台服务当成一个有机的整体。</p> <p><img src="https://simg.open-open.com/show/91c81309b3f6c6316567c3b1db715f05.png"></p> <p>云函数价值主要体现在四个方面。1)简化架构,云函数是以函数粒度来组织的服务,是一种天生的微服务架构;2)简化开发,无需关注底层硬件配置、OS等,只需撰写最核心业务逻辑,实现代码及服务;3)简化运维,对于云函数而言,无须关心服务器的运维和服务本身的配置,它又是一种天然的Devops;4)是减少支出,云函数可以解决云主机80%以上的成本闲置的问题,因为它只有了请求才分配资源。</p> <h3>无服务架构VS传统开发模式</h3> <p>那么,无服务架构和传统开发模式项目,有哪些优劣呢?下图从架构设计、代码开发、代码调试等六个角度分析了这二者的收益或不足。</p> <p><img src="https://simg.open-open.com/show/8d1e1a06b4561ee52afc285625ef1648.png"></p> <p>从以上对比不难看出,云函数的特点包括按需实时分配函数实例、函数实例扩缩容速度很快、按实际使用计费等,比较适合用于构建无状态微服务,对于有明显波峰波谷效应的服务,有明显的成本优势。但不太适合延时非常敏感(<20ms)或持续计算时间非常长(>5分钟)的场景。目前,腾讯推出了SCF无服务器云函数,云函数会为大家准备一个免费额度包,如果是低频调用的服务,很大可能无须支付任何费用,感兴趣的开发者可以前往体验。</p> <h2>写在最后</h2> <p>DevOps虽然火热,但它的落地却也并非是一蹴而就的,需要通过全局思考、统一规划,在反复实践中逐步改进和完善,最终才能根据不同的业务特性,提供一套完整体系化的运维解决方案。在腾讯多年的运营经验中,DevOps虽是贯穿整个应用软件生命周期的,现在的发布完成依然并非终点。</p> <p> </p> <p>来自:http://www.infoq.com/cn/news/2017/08/tengxun-DevOps-Arch</p> <p> </p>