近日,2018 DevOps China 沙龙在深圳腾讯大厦举办。本次沙龙邀请了多位嘉宾,分享了关于DevOps的实践与心得。会上,腾讯高级工程师、工蜂系统架构负责人罗奇带来“揭秘腾讯代码管理核心:工蜂 Git 系统架构”的经验分享,为你们阐述了腾讯工蜂的起源、发展以及将来规划。数据库
腾讯工蜂是腾讯通过10年的积累和摸索打造的企业代码管理协做解决方案。具有代码检视、分支管理、会话式开发、集成定制、审查和监控等企业级研发管理系统特性,秉承了前沿的研发思想和先进的研发理念,助力企业贯穿研发流程,让开发和研发管理更加敏捷高效。后端
从2012年开始,Git逐渐成熟。由于Git的去中心化、快速拉取分支和便捷使用等特性,被众多开发者所青睐,Git的使用在国内逐渐流行起来。此时腾讯也正着手准备搭建Git代码托管系统,计划将原来的SVN逐步切换到Git上。缓存
咱们采用自研的方式,是由于它既可以知足整个腾讯的日益增加的代码托管需求,又可以很好地适应公司企业管理、安全和内部开源文化。在架构方面,面对腾讯这样的体量,咱们须要分布式集群的能力和高可用的解决方案,也须要强化后台管理、监控、运维能力。再者,自研有很好的可控性,能够作不少企业定制化的功能。安全
在系统架构的选择上,为应对腾讯上百T的代码库总量,和不断产生的平台方接入需求,好比自动构建、自动代码扫描等,咱们选择了微服务。微服务结合容器部署方案,具有快速水平扩展、可插拔和增量发布等特性,这些特性可以很好的知足高可用高并发场景。服务器
路由是全部服务的核心,全部对代码仓库操做的请求都要经过路由进行寻址,而且经过切面的方式,最终实现对业务调用的透明和较低的侵入。网络
图中右边的代码库Server采用的是两地三中心的容灾解决方案。架构
水平扩展能力,因为服务都采用容器部署,再加上无状态的底层服务,水平扩展将更加方便。即便忽然有大量业务接入时,系统也能随时经过调整实例数量的方式进行轻松扩展,作到快速响应。 服务间的独立性,单链路出现异常时,其它链路依然保持正常工做。例如数据库所在的网络受到影响,web服务出现短暂异常,但因为HTTP代理有缓存路由数据,因此用户最基本的Pull/Push等客户端操做依然可以正常运行,开发人员的基本代码操做不会受到任何影响。 提供熔断、有损服务,防止瞬时负载太高引起的雪崩效应。 服务的高可用,咱们经过运用两地三中心和主写双活的方式,而且采用跨机房,按期增量备份等措施,提供高标准的可用性和容灾备份能力。并发
随着工蜂系统用户量的增加,系统在运行中也逐渐涌现出新的问题,例如出现了异地项目访问慢、大库项目逐渐增多和大库Merge操做超时等问题。为了可以尽快解决这些眼前的问题,咱们决定对工蜂系统进行一次新版本的进化。运维
下面是新版本的架构流程图,黄色部分是系统增长的新特性。咱们引入IDC选择器来解决异地部署的问题,引入LFS用来解决大库问题,从而分别实现异地项目快速访问和大库操做快速响应。
下面是LFS部署的架构流程图。咱们部署了LFS代理和专门的LFS服务器。当用户有LFS操做时,Git智能协议会将代码、图片、视频等文件的文本指针,经过HTTP代理推送到代码仓库,再将文件资源推送到LFS代理,LFS代理会先查找路由,进行权限认证,最终把文件资源推送到LFS服务器。此外,为了可以让用户在后台进行统一的控制,咱们还在HTTP代理中添加了后台配置,对单个文件、单次提交进行拦截,拦截后会通知用户使用LFS进行转换。
假设IDC1是深圳,IDC2是北京。咱们只需在深圳的一套完整系统中增长IDC协调器,而后在北京部署最基本的HTTP代理、路由、IDC选择器和用于读写的新的Server集群,就能够解决上述问题。当北京的同事在使用客户端操做时,访问请求会由IDC选择器分配到对应的地方,从而实现就近访问。协同开发方面,因为北京和深圳的Web和数据库采用同一套系统,因此数据之间是相互可见的,同事之间能够经过Fork公共项目来进行协同开发。
大库方案 在上一个版本中,咱们已经经过将存储数据分片和微服务,让总体存储容量能够自由地水平扩展,最终实现总体存储容量无上限。如今经过LFS,单个库也能实现理论上容量无限制。如今不只可以轻松应对游戏部门总体项目迁移的需求,还能作到后台统一配置和管理拦截大文件的规则。
异地协同开发能力 经过IDC选择器,如今工蜂系统能作到就近访问和协同开发,在保证数据统一和系统易维护的基础之上,为分公司同事提供了较好的使用体验。
计算和存储分离 MySQL的分片支持,让数据容量和API调用也能实现分片操做,从而提供海量数据的支持。
提供Open API和OAuth功能,更好地跟第三方应用集成
工蜂系统做为代码托管系统,是DevOps研发工具链中重要的一个环节。目前工蜂系统已经经过Web Hooks、API和OAuth实现了和其它系统的对接,共同打通需求、代码托管和构建等整个环节。从此,咱们将更多地专一于企业的需求,让工蜂系统开放更多的能力和更加紧密地集成DevOps上的服务,最终造成研发工具链的闭环。