在2017在线技术峰会——首届阿里巴巴研发效能嘉年华上,来自研发效能事业部的杨再新分享了《打造支撑百万用户的分布式代码托管平台》。他主要介绍了GIT和SVN思想差异、开源的代码托管平台的挑战、云代码托管平台的架构设计以及云代码托管后续发展。其中,他主要分享了云代码托管平台的设计思路,稳定性、安全性的构建。

以下内容根据直播视频整理而成。

直播视频:https://yq.aliyun.com/edu/lesson/548

PDF下载:https://yq.aliyun.com/attachment/download/?id=1839

GIT和SVN思想差异

GIT和SVN是目前主流的代码托管工具,阿里巴巴目前的代码托管80%在GIT上,经历了从CBS到SVN到现在几乎全部应用转为GIT,其中,GIT和SVN的思想差异主要在以下几个方面:

  • GIT是分布式管理工具,是去中心却集中,所有服务可以有中心存在但是又可以去中心;
  • 直接记录快照,而非差异;
  • 不一样的分支概念,GIT分支是指向hash的指针而不是一个拷贝;
  • 三个工作区,三个文件状态,SVN只有一个本地worker和服务器worker,这两个worker是不一样的,而GIT有一个本地暂存的workspace、存到本地的GIT库、存到远端三种文件状态。好处是,GIT本地的代码是全库的。

去中心却集中

图中origin是中央仓库,周边代表四个团队,他们可以从中心获取代码,又相互之间独立。

数据完整性check

在保存到GIT之前,所有数据都要进行内容的校验和计算,并将此结果作为数据的唯一标识和索引。所以如果文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,GIT都能立即察觉。GIT使用SHA-1算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个SHA-1哈希值,作为指纹字符串。所有保存在GIT数据库中东西都是用此哈希值来作索引的,而不是靠文件名。

SVN怎么迁移GIT

(1)使用GIT SVN工具

  • Git svn clone http://code.taobao.org/svn/xxx/
  • Git remote add origin git@code.aliyun.com:xxx/xxx.git
  • Git push origin –all

(2)https://yq.aliyun.com/articles/6046 图文教学文档

开源的代码托管平台的挑战

阿里巴巴是在2011年开始转用GIT的,刚开始时调用了许多开源代码平台。

Gitlab CE架构

Gitlab自我管理仓库的功能非常强大,可以很大的解放效率,可以自己创建代码库、分配权限。Gitlab CE技术栈前端是由nginx提供http服务,open-ssh全局加密,性能更好,ruby上手非常快,提供API功能方面比较强悍。Git非常依赖于文件体系,所以有专门的文件系统,数据库选择MySQL redis存储缓存。此外还有一个简单的消息系统用来处理异步消息。

遇到的挑战

  • 可用性:数据量比较小的时候是单机,机器宕机之后稳定性无法保证,物理扩容比较困难,宕机之后的容灾也是问题。
  • 可靠性:数据安全方面,如果磁盘数据坏了之后数据的恢复也是非常大的挑战。
  • 高并发的效率:阿里巴巴在研发的投入是非常大的,各种各样的研发工具非常依赖于托管底层的平台,底层平台的数据调用量是非常大的,整个RDC调用数据的量非常大。
  • 用户规模。

云代码托管平台的架构设计

设计思路

首先,稳定性优于体验,体验优于成本,运维导向是面向failover。重监控,态势感知,可回溯;重管控,突破规模制约,代码量非常大,管控措施很重要。

上图是机房内的架构,有两个proxy,分为了http协议、SSHD协议。http协议根据http body信息来进行路由转发。SSHD协议解析了所有命令行的信息,包括想获取哪个代码库的数据下载,每个集群有多个节点,每个节点有三台以上的机器,机器有不同角色master、mirror、backup。实际中,读写比例比较悬殊,大约为20:1,所以进行读写分离提高效率。backup的作用是,如果master挂掉的话,监控上会有感应,此时会将backup切换成master。Sharding记录节点机器的状态以及namespace和node节点之间的对应关系,这样迁移的时候只需要先将数据迁移,那么里面的状态就会无缝迁移。

构建稳定性

对于单机房,采用主/备切换,根据监控指标自动切换。用VIP、DNS来切的话,时效性会比较慢。同城灾备,如果整个机房宕机,那么直接切换DNS。异地灾备策略上和同城灾备是一样的。

上图展示了两个机房之间的数据同步,MNS是阿里云的消息服务,机房中任何数据变更时会向MNS发送消息,消息类型比较多,比如仓库的生命周期,订阅消息通过system hook下发存入MNS里面。在容灾机房里面有消息消费,消息消费之后会调用RPC服务,把一些库创建出来。通过异步消息来做,在时效性上有点差,但是可以忍受,但最终数据是一致的。

引入了新的技术栈。以前采用Ruby+MySQL来做,现在采用Golang,性能好,易部署。此外,使用Grpc,其基于http2,是谷歌新开发出来的工具,支持服务端和服务端之间的加密,易扩展,跨语言。使用阿里云的自研消息系统MNS,支持主题/订阅。这样做解决了稳定性,从单机宕机到机房宕机,再到同城宕机都有一定的解决方案。

安全性

数据安全方面采用多重备份,异地灾备。流量控制根据IP做流控,此外还会做namespace流控,因为有些库里面namespace比较多,namespace宕机之后会导致节点的数据量变大,影响整个节点的稳定性,所以需要对namespace做多维度的流量控制。

具体的技术细节是:使用golang的sshd服务替换原生的open-sshd,解决ruby中gitlab-shell启动慢,并且解决authorized_keys的文件变大后,性能下降的问题;用更多的redis来解决webhooks的性能,大量外部系统依赖webhook,确保稳定性,解决webhook的时效性。

大容量支持

大容量上很好的支撑是提供5GB以上的下载流量,整个数据存储在100T以上,用户数可以支撑100w级别,仓库数也可以支撑100w级别。

平台能力

每天支撑阿里百万级别的GIT的操作,覆盖着阿里全部BU,对外能力输出阿里云code。阿里云code平台是2016年上线的,内部体系包括阿里云自己的内部体系以及基于阿里云的其他体系,其他能力一致。

云代码托管后续发展

从技术来说,目前存储和计算的分离做的不够好,node节点上的数据有大量的计算。分离的好处是选用不同的硬件设备来做更好的容量规划。未来希望更好的支持容器化,拆分更多微服务,对各种逻辑进行归类。

功能方面,正在打造更好的代码review平台。由于本地环境特殊复杂,一些工程在本地不是很好搭建,在线IDE使得所有环境都是固态化,减轻开发的负担。继续加强webhook,做到性能更加优化。

打造支撑百万用户的分布式代码托管平台相关推荐

  1. RDC如何打造支撑百万用户的分布式代码托管平台

    一.背景介绍 毋庸置疑,代码是DevOps流程的起点,是所有研发流程的基础:代码托管为代码"保驾护航",确保代码的安全性.可用性,同时提供围绕代码的一些基础服务,如MR.Issue ...

  2. 揭秘码云:全球第二大代码托管平台的核心架构

    嘉宾介绍 周凯,现任码云(https://gitee.com)负责人,负责码云相关的产品.开发.运维以及大客户服务等业务:擅长Ruby.Linux及DevOps:为招商银行.招商证券.比亚迪等企业提供 ...

  3. GitHub 与各代码托管平台比较

    文章目录 GitHub 一.优缺点 二.托管限制 三.介绍与使用 GitLab 一.优缺点 二.托管限制 三.介绍与使用 Bitbucket 一.优缺点 二.托管限制 三.介绍与使用 Gitee 一. ...

  4. 整理:国内外热门代码托管平台一览

    电子信息化的高速发展产生了越来越多的程序员.对于程序员来说,写代码是每日工作的主要内容,因此打造一个好的代码环境是改善程序员工作体验的重要环节.然而实际项目中众多的参与人员.繁复的代码版本都为代码管理 ...

  5. 阿里云代码托管平台,不限容量,免费使用

    阿里云代码托管平台,不限容量,免费使用,相比开源自建,阿里云 云效代码托管更(安全.稳定.高效)是适合企业的代码管理平台,阿里云代码托管平台Codeup,10 万企业都在用的代码管理平台,提供代码托管 ...

  6. CSDN 发布开源代码托管平台 GitCode

    2020 年 9 月 10 日,中国专业 IT 开发者社区 CSDN 正式推出全新升级的开源平台 GitCode(gitcode.net).面向国际化市场,具备使用 GitLab 最新高可靠部署方案. ...

  7. 相较国外代码托管平台 gitlab,咱们中国自己的代码托管平台有哪些优势?

    相较国外代码托管平台gitlab,咱们中国自己的代码托管平台有哪些优势?没有对比就没有伤害,相较于国外的gitlab,大家平时也接触Github.Gitee 这些开源场景的代码托管平台,他们对个人开发 ...

  8. Git及其代码托管平台GitHub、码云

    目录 1 Git简介 2 Git使用​ ​ 3 远程仓库 4 分支Branch 5 码云的静态页面托管 6 在IDEA中使用Git 1 Git简介 Version Control System,简称为 ...

  9. 国内类github代码托管平台

    国内代码托管平台在这两年突起,我最近听得最多的就是coding.net这个网站了,还有如csdn.oschina和京东倒是听说过,其它的就倒是第一次听说.下面一起来看看这些代码托管平台是怎么样的吧. ...

最新文章

  1. 结构体成员的引用方法
  2. 009_html标准属性
  3. python获取列表中元素的索引
  4. Python中join()方法和os.path.join()方法
  5. 线程池,这一篇或许就够了
  6. 根据中文修改英文翻译,重新生成英文翻译文件(保证原有文件的顺序不变)
  7. jquery学习之路jquery之一:jquery选择元素的方法,太神了 2012.8.2
  8. Java开发大厂面试资料,让你的面试不再困难!
  9. spring实现定时任务的两种方式
  10. php phdfs扩展,hadoop HDFS的PHP扩展—PHDFS
  11. 手机离线地图地图数据包教程
  12. Java 生成随机数并进行查找
  13. python数据分析 获取数组中非零元素的索引
  14. android 模拟器 驱动,【新手指导】模拟器报错列表及解决办法!
  15. web常见特效——floor电梯导航
  16. Mac终端terminal光标快速移动方法 emacs/vim模式 | bash vim 、zsh vim模式
  17. Android碎片化与兼容性问题的元凶
  18. 淘宝网2条新开发者规则,堪称黑虎掏心直接秒杀90%以上,个人淘宝客开发者
  19. 用正交变换将二次型化为标准形
  20. win10win11win7打印机连接共享错误0x00709打印失败错误修复工具

热门文章

  1. EM 期望最大化算法
  2. Geoff Hinton:我反对谷歌军事项目,论文评审机制正在阻碍创新
  3. Android——apk反编译
  4. Day2_CSS_CSS语法及HTML结合
  5. java实现md5加密示例
  6. HTML 5 input type 属性
  7. 专为设计师而写的GitHub快速入门教程
  8. Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
  9. 引导界面(三)仿微信引导界面以及动画效果
  10. 【Android开发】自定义ListView,使用通用适配器,并实现ListView上的每一项和每一项上的按钮等控件同时监听