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

\u003cp\u003e\u003cvideo poster=\"https://static001.infoq.cn/resource/image/9d/7f/9db6181ab6242818e5d6d882bb33687f.jpg\" preload=\"none\" controls\u003e\u003csource src=\"https://static001.infoq.cn/resource/video/fa/22/fa5fc206674ad50d185b1d8ce818f222.mp4\" type=\"video/mp4\" /\u003e\u003csource src=\"https://res001.geekbang.org/media/video/fa/22/fa5fc206674ad50d185b1d8ce818f222/sd/sd.m3u8\" type=\"application/x-mpegURL\" /\u003e\u003csource src=\"https://res001.geekbang.org/media/video/fa/22/fa5fc206674ad50d185b1d8ce818f222/hd/hd.m3u8\" type=\"application/x-mpegURL\" /\u003e\u003c/video\u003e\u003c/p\u003e\n\u003ch3\u003e嘉宾介绍\u003c/h3\u003e\n\u003cp\u003e周凯,现任码云(\u003ca href=\"https://gitee.com\"\u003ehttps://gitee.com\u003c/a\u003e)负责人,负责码云相关的产品、开发、运维以及大客户服务等业务;擅长Ruby、Linux及DevOps;为招商银行、招商证券、比亚迪等企业提供代码托管及项目管理的培训和咨询服务。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:对您来说,目前码云在系统架构上面临的最大挑战是什么?未来重点的突破口是什么?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e我们码云从2013年上线到现在经过了将近6年的发展,用户数现在已经超过了300万,项目数已经超过了500万,这么大量的用户量带给我们的压力,一是存储上的压力,二是计算资源上的压力。因为像在工作日的高峰期,大家都会非常非常多地去推送和拉取代码,这样带给我们的就是计算资源和存储资源的压力。\u003cbr /\u003e\n目前我们所造成的问题也是因为这些数据的增长,给我们线上的系统造成的一些压力。我们现在线上其实已经是一个分布式的架构,目前我们也是在优化和提升底层架构的性能,从性能上提升来去(00:57 掉帧)。对系统的改造,主要也是对系统的一个改造。在技术上面,我们通过去研究git底层的一些协议去减少甚至于说避免一些没有必要的操作,去提升我们应用的一些性能和架构(01:17 掉帧)。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:据我们目前所知,其实很多企业他们自己可以去搭建一个版本的管理系统 ,那他们为什么没有自己来搭建这个版本管理系统,反而选择了跟码云合作?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e这个问题挺好的,有很多种原因。首先,据我了解,有很多企业,他们自己搭建,肯定你自己也得投入服务器的资源,你买云服务器也好,你自己买个服务器放到自己公司也好,都是要投入这些硬件资源的,此外你还要投入人力资源。这些资源加起来跟你购买一些线上的SaaS服务差不了多少,甚至于说你买线上的SaaS服务会更省心。企业在这一块投入了这些资源,比如说投资了硬件资源,你还要投入人力资源,这个人你得有人去维护,维护这个人,如果有运维的话还好,如果没有运维的话就需要我们开发者去做这样的运维工作,难免开发这会有一些小情绪,或者说开发者如果人离职之后,这个系统该由谁来维护,很容易造成一种没人维护的局面。\u003c/p\u003e\n\u003cp\u003e另外就是,如果这个系统托管在我们自己公司内部,那大厦断电、物业维护,断了电之后,这个系统如果是在节假日就没法起来了,而且断电频繁很容易造成磁盘的损坏,也容易造成代码的丢失。\u003c/p\u003e\n\u003cp\u003e还有一点,自建系统功能单一,你只能用我们开源的那些项目,很多情况下无法满足企业的需要,而码云则是根据大量的企业用户的反馈,不断的提升和打磨,推出了一系列助力提神企业研发效率的功能,比如周报、代码量统计等,因为这些东西都涉及到我们开发者的绩效考核。这些在自建的代码托管系统里是没有的,而且我们也会进一步根据企业的反馈做出对应的调整,使得码云能够更加符合企业的使用习惯。\u003c/p\u003e\n\u003cp\u003e再者,我们一直坚信代码是企业的唯一核心资产,但是我发现稍微大点的公司的IT部门这块管理比较混乱,不同子部门之间选择自行搭建,这就造成了公司的代码管理不统一,甚至于我遇到的一种情况是,某一个部门做了一个产品,这个产品上线了两年,一直运行的挺好,但是是程序总有Bug,当出现Bug想回头找源码进行修复的时候,已经找不到了,原来的版本管理服务器可能已经被重装做了其他用处,这个就比较麻烦了。\u003c/p\u003e\n\u003cp\u003e再比如说安全相关的东西,开发者代码是放在我们码云上的,开发者不可能说删代码或者删库跑路,当然这个是我们作为开发者自嘲的一种方式,但是这种事也时有发生,用我们码云的话,就能够避免这种情况。首先我们有很完善的安全保障措施,安全权限的管控,你要删项目必须得通过老板的同意,手机短信的验证码,另外我们还有很完善的快照机制,我们保留了你近半年来每一周的仓库的快照,极大地降低这种问题的发生。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:这样看来,码云可以为开发者和企业解决很多不必要的一些问题。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e对,至少是一些不必要的麻烦,我们首先预知到或者说我们在线上遇到过,我们给它解决调,后面的人其实就不会再遇到了。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:今年据我们所知是码云上线的第五年,您能否给我们介绍一下码云目前的基本情况?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e周凯:码云从2013年上线,到明年就已经是6年了,2013年到2019年已经6年了,整个码云从刚开始上线到现在,用户数每年都是在翻倍增长的,可以毫不夸张的说已成为全球第二大的代码托管平台,因为我们目前已经积累了300多万用户,500多万的项目,除了Github之外我们码云的数据量是最多的,此外码云上的开源生态也越来越好,越来越多的开源作者把他们的开源项目放到码云上,在数据上大概是这个样子。还有从2016年我们开始探索商业化的道路,毕竟硬件资源以及人力资源的投入都需要大量的资金,所以我们推出了码云公有云的SaaS服务以及私有化部署服务,目前公有云的SaaS服务已经有超过5万家的企业在使用,私有化部署产品也有像招商银行、招商证券、比亚迪、临商银行等在使用。另外在功能上,我们因为本身也是基于开源的gitlab进行二次改造的,所以在功能上我们也做了很多的优化和提升。因为本身我们是服务于国内开发者的,我们立足于在国内要做的就是本土化的代码托管和研发协作的产品。所以在功能上我们也是做了很多的改进,为了方便我们国内的开发者去使用,我们也做了很多的改进和提升,比如说在语言上,国外的很多都是那种英文的,但是我们有中文的操作界面。在功能上,有很多功能,国内开发者不太习惯使用国外的那种操作方式和流程,但我们就把产品打包成我们本土开发者容易接受的方式。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:适合中国开发者使用的。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e对。另外还推了很多服务于开发者、助力于开发者的一些服务,比如像代码克隆检测、质量分析,我们在国内也跟很多大厂商进行了一些合作,比如说阿里云、百度、腾讯,我们都有(05:57 英)CI、CD的程序上的对接,因为我们作为一个代码仓库、一个代码中心,很容易融入这些产品,去做对接,来提升开发者、赋能开发者。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:从2013年码云上线以来,在功能和产品上有什么重大改进和迭代?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯\u003c/strong\u003e:在功能上,因为我们做了很多利好于本土开发者的一些功能和用户体验,此外像质量分析,这个东西本身就算是我们提供的一个三方的服务,这种服务就可以让开发者很方便地能够一键分析自己的代码,你的代码里面有什么样的漏洞,比如常见的(06:50 英)漏洞,这些东西都可以通过这种方式检测出来,进而提升我们开发者的代码质量。\u003cbr /\u003e\n还有就是上线以来我们对整个产品的底层做了彻底的重构,因为我们初期上线是基于Gitlab进行改造的,我们做了大量的底层优化来处理线上百万级用户的使用量,此外我们还推出了很多助力开发者的服务,比如今年推出的Gitee IDE,让用户可以更加方便的在Web端进行代码的编写\u003c/p\u003e\n\u003cp\u003e另外就是Copycat,它就是一个代码克隆检测的服务,因为我们现在国内有很多开源项目在一定程度上存在抄袭的现象,你抄我的,我怎么才能知道你抄我的,因为代码太多了,我不可能说一个一个去看,我们提供Copycat这种代码克隆检测服务,你可以把两个仓库的URL输进去,我们帮你检测代码的相似度,这样的话可以从一定程度上发现抄袭的现象,你甚至于可以预防或者解决这种抄袭的问题。我们在这一块主要就是这种助力开发者服务的研发,大概是这样。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:您认为这些功能上和产品上的改进和迭代,它背后的驱动因素是什么?为什么要这样做?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e这个我们在线上一直都有在做大量的用户调研这么一件事,我们会去收集很多用户的信息,通过这些用户信息可以改建和提升我们自己产品的功能和用户体验。\u003c/p\u003e\n\u003cp\u003e此外,我们还有大量的反馈渠道,比如说我们有QQ群、微信群、邮件,我们社区有一个产品叫动弹(同音),大家可以在里面反馈问题,我们自己的网站也有一个反馈的渠道。这些大量的、多方面、多通道的反馈渠道让我们能够接收到很多用户的反馈信息。这些用户的反馈信息恰恰是我们能够提升自己产品的一个基本,通过这些反馈提升产品,产品提升后给用户去使用,还有我们的最终目标也是希望,我们的产品在未来可以覆盖更多开发者,满足开发者的更多需求,让我们的产品可以更加深入人心。进而把码云打造成一个国内的本土化的代码托管产品。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:码云为什么被称为中国的GitHub?为什么它可以在众多竞品里面脱颖而出?您认为码云对国内的开发者可以提供什么样的价值?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e刚刚也有聊到,为什么说码云被称为中国的GitHub,因为我们在立足于国内市场的时候,我们刚开始所说的提供的一些功能,其实全都是根据用户反馈或者我们自己去调研所得出的一些结果,通过这些结果的收集和整理,我们自己内部在做一些产品研讨会之类的事情,把这些功能能够开发,放到线上,能够让开发者去使用,能够真正符合国内开发者的使用习惯。\u003c/p\u003e\n\u003cp\u003e另外就是,我们在国内用户量也越来越大,这种越来越大的用户量并不是说我们自己的推广做得多好,其实码云从2013年上线到现在,我们在推广上一直没有花特别大的力气和投入特别大的资金和人力,当然这些东西都是通过开发者口口相传的。比如说有一些功能开发者觉得好用,他就过来用了,比如上我们的私有库免费,他觉得这个私有库免费,我不用掏钱就可以用,我就过来用了。当我们达到一定用户量的时候,开源作者也会觉得,这个平台不错,他会把自己的开源项目放上来。开源项目放上来之后能够吸引到用户,本身开源项目社区的一些用户也到码云上面来,所以这是一个双向利好的关系,开源项目放到码云上来,码云能为他提供用户,开源项目的用户,本身不知道码云的用户也都能到码云上面来。所以码云就要靠这种口口相传的口碑,才在国内能够取得这么大的市场和这么大的用户量和项目量。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:达到双赢的效果。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e对,是这样。\u003c/p\u003e\n\u003cp\u003e关于给开发者带来什么价值,我觉得更多的,首先是这个工具的使用能够让开发者免费地达到他们自己所想要达到的一些效果。另外一个是开发者能够把自己的代码放到码云上,能够把代码开源出去,能够向整个码云站线他们的技术实力,进而如果自己的开源项目能够被更多人去用,他就能够达到一定的价值,因为开源项目的价值就在于你被很多用户去用,用户有问题,比如像付费咨询、二开这种东西,肯定是找开源作者、原作者是做得最好的,所以在这块上,可以通过码云发挥开发者自身的技术价值,是这样。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:我们了解到,码云在为招商银行、招商证券、比亚迪这类传统企业提供代码托管服务,在您看来,这些企业他们的痛点是什么?他们为什么会选择跟码云合作?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e我2016年开始第一次出去做这种大客户的授权工作的时候,其实就是招商证券,后来我们又做了很多像招商银行、比亚迪、临商银行,这些都是比较大型的企业,像招行在整个股份制的银行里面算是标杆了,他们企业的痛点就在于内部管理代码的问题,内部管理代码不统一、很分散。因为我们一直认为,整个企业唯一的核心资产就是代码,我们招了很多的开发者进来,他们所产生的大部分的只是源代码而已。所以大企业在这块的痛点,一是代码管控不严格,每个部门都自建一个服务器,都在自己的版本管理系统上去进行自己产品的研发。这样造成的一种问题就是,比如说有一个部门做了一个产品,这个产品跑得好好的,但是两年后突然出现了一个BUG,当我回头想去找这个代码的时候,我发现找不着了,为什么?这个服务器可能已经被人革掉用作其他用处了,这个小组的负责人,负责这个机器运维的人都已经不在了,这就非常麻烦。关键是你的这个东西还是编译出来的二进制包,还还不是源码,所以这就很麻烦。\u003c/p\u003e\n\u003cp\u003e另外一点是,整个企业没法很方便地衡量自己企业到底有多少代码、到底有多少项目,每一个程序员、每一个开发者每天提到了多少行代码,这些我都是不知道的,但是使用我们码云就可以解决这样的问题。\u003c/p\u003e\n\u003cp\u003e还有一个问题是“代码孤岛”,怎么叫代码孤岛,就是没有形成一个良好的内部开源的情况,因为我们现在全世界,甚至于我们国内今年开源这种现象非常非常热烈。但是对于公司内部,很多时候不同部门间他们还是在重复造轮子。比如说这个部门做了一个组件,那个部门用这个组件的时候还在自己做,但它们俩之间本身这个组件是可以复用的,就是因为代码管理不统一导致了代码孤岛的问题,让他们部门之间没有很好地进行知识的共享,没有进行内部开源的机制,所以才导致开发效率低,其实这间接也导致了开发效率的低下,因为本身这个东西可以避免掉去开发量的,但是我还是又去重复造轮子。\u003c/p\u003e\n\u003cp\u003e大企业种种类似的问题,我们码云能够完美解决,所以他们才选择跟我们码云进行合作。市面上又有很多产品,很多竞品,他们甚至可以自建,他们可以专门拉一组自建,但是为什么选择了我们?因为我们上线这五六年的时间,一直以来我们都以用户的需求作为核心,所以在外界我们积累了良好的口碑,同时也树立了良好的品牌形象,并且我们线上百万级的并发能够扛住,说明我们系统的稳定性和健壮性都是非常好的,另外很多大佬级别的开源项目也在用我们的产品,更多这种开源作者本身就是在那个公司的,所以他们也会口口相传,去说我们的码云还是挺好的,这种口碑相应也是能够促使大企业跟码云达成合作的一个重要的点。当然我觉得最重要的肯定还是他们对于我们码云服务于用户的态度,以及我们真真正正能够解决用户的问题,是这样子。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:最后一个问题是关于码云的未来,未来3-5年之内,码云有什么规划?其中IT部门会对实现这个目标提供一些什么样的支持?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e这个问题,近期我们肯定还是以提升用户量为主,另外对线上的SaaS服务以及私有化的服务,也会去做大力的推广和铺展。因为我们从2016年才开始,其实今年才开始有一个特别好的发展势头,所以近期我们肯定是在这两个方面做。\u003c/p\u003e\n\u003cp\u003e未来3-5年的目标,这个说起来有点远了,我自己来看的话,我们是想说在未来这几年的时间里面能够让更多的开发者了解到码云,能够让开发者说我们俩来合作写一个项目,项目放在哪儿?他们第一时间能够想到把项目放在码云上,“写代码找码云”,我们在开发者群体里面能够形成这样一种效果的话,我觉得这是未来3-5年我们的目标。\u003c/p\u003e\n\u003cp\u003e另外关于企业服务这块,我们想做到,企业在想我们研发协作或者代码托管的场景,这么一种服务,我们要买一下,我们不能自己搞,在他们想买的时候,他们能够第一时间想到码云,这就是我们未来3-5年想要达到的一个目标,其实就是影响力和口碑的进一步提升。\u003c/p\u003e\n\u003cp\u003e另外一点,关于IT部门如何支撑,这个得分三部分来讲,因为我们这边分工还是比较明确的。\u003c/p\u003e\n\u003cp\u003e第一个部门是应用开发部们,应用开发部门的主要一个目标还是以提升用户体验、提升产品功能、细化产品的使用流程为目标,在功能体验上让用户觉得用得非常舒服、非常流畅。\u003c/p\u003e\n\u003cp\u003e第二个部门是底层架构部,主要是分布式架构研发的提升工作,这一块也是希望能够在架构上面进一步做提升,来适应线上这么大的用户量增长以及访问量的提升。这块也是希望能够做到让用户用起来非常流畅、非常快,不会出现我用着用着突然哪一块性能不好、卡顿之类的情况。\u003c/p\u003e\n\u003cp\u003e另外比较重要的是运维部门,运维部门我们所解决的问题就是想在未来的时间里面更好更快地让码云能够安全稳定可靠地运行。因为码云在上线这几年来也遭受到了很多攻击,各种不同CC的攻击以及不同的DDoS的攻击,这些东西都是需要我们运维部门去解决和预防的,甚至于说搭建自己的一些日志系统去预警,我们运维部门所做的就是进一步提高运维自动化的能力,保障码云能够高效、安全、可靠地运行,让用户能够无感知、流畅地去使用。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eInfoQ:非常详尽的一个计划,可以看到码云是非常认真地在考虑它的未来。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e周凯:\u003c/strong\u003e是。码云这个产品从刚开始一直是以开发者服务为目标。我们刚开始做这种服务的时候,所有的需求和反馈都是从一线的使用者来的,因为使用者也是开发者,我们自己的人也是开发者,所以我们是一起把这个产品打磨得越来越好的,我们是秉着“以用户为先”的理念和策略,才能够让码云现在成为国内最大的、全球第二大的代码托管平台。\u003c/p\u003e\n

你可能感兴趣的:(揭秘码云:全球第二大代码托管平台的核心架构)