Github诞生于2008年,现在已经是全球最大的代码托管平台。然而鲜为人知的是,他们使用的技术栈非常简易,Ruby、Shell和C。并且6成员工远程工作,通过Hubot协作。

澳门新葡萄京官网注册 1

Sam Lambert 在 2013 年加入 Github
公司,当时的身份是公司的第一名数据库管理员,现在已经是 Github
的技术总监。在去年他曾接受 Derrick Harris
的采访,解释作为一家全球性网站,是如何通过简单便捷的技术栈,成功支撑起超过
1000 万用户,超过 2500 万项目的。

有时候处理规模问题最好的办法就是让事情变得简单并尽你可能去避免出现这种情况。这是
GitHub 所采用的方法,林纳斯·托瓦兹(Linus
Torvalds)在十年前开发了Git源代码控制工具,GitHub
为该工具提供资料库服务(repository
service),目前已经有了爆炸性的发展,并成为开源软件开发工作的重心之一。

Github
  • 成立于2008年 。基于Git,提供协作式代码版本控制服务
  • 总部在旧金山,员工238人。

Git是一种良好的、支持分支管理的代码管理方式,能很好地解决团队之间协作的问题。每个工程师在自己本地分支上开发,完成功能之后再将所有人的代码合并。

澳门新葡萄京官网注册 2

他还谈到 Github 大型的远程工作团队,大概有 60%
的员工通过远程工作,利用一个叫做 Hubot 的自动化工具协作。

澳门新葡萄京官网注册 3

吉祥物
  • 名称:Octocat。

Github吉祥物(图片来源:Github.com)

可以理解为什么程序员们会精挑细选他们创作代码用的工具并与他人分享,反过来,他们也会去调整和改进这些工具。一种非常现实的感觉就是,软件开发者们“住进”这些系统中后,源代码版本控制系统的工作方式会对合作者们的创作过程提供积极或消极的影响。

起源
  • 最早从Rails开发社区兴起,Github本身也是用RoR框架写的。
  • 早期的Rails多人协作开发团队,在代码提交和协作时遇到了很多的麻烦。为了解决团队之间开发协作困难的这一个问题,创始人Scott和其他3个程序员朋友,决定完善一个基于Git的代码分支管理工具,用来帮助Rails项目本身的开发。
  • 这个项目做完之后,很多程序员发现,这个工具不但很好用,而且有着非常友好的用户界面,容易上手和操作。于是Scott等几个人干脆建立了一个网站,名叫”Github”来专门提供类似的服务

SAM LAMBERT 介绍,在内部开发产品和各种服务时,Github 特别推崇 Unix
哲学,采用最简单的技术,实现众多基础性功能,对于复杂臃肿的过度工程化深恶痛绝。对于技术和项目的选择,更讲究实用主义。

GitHub
的成立可以追溯到2007年,它的建立者包括目前公司的首席运营官(COO,Chief
Operating Officer)PJ Hyett,首席执行官(CEO,Chief Executive
Officer)Chris Wanstrath,前首席执行官Tom
Preston-Werner,首席信息官(CIO,Chief Information Officer)Scott
Chacon。这些人当时都在 Rails 框架下开发 Ruby
应用程序,并希望通过一个更好的方式合作编码,为此他们开始搭建了预计在2008年开始运行的
GitHub。与其说这是一个商业计划,他们的开发更多是为了能有一个工具帮助他们自动化地协助自己的软件开发工作。

创始人:5人骨干小组。
  • Scott
    Chacon:GithubGit布道师,Pro
    Git作者等。此外,还经常参加各种会议和活动,包括在全球范围内为企业提供Git培训。
  • Tekkub:客户关系。
  • Melissa Severini:行政。
  • Kyle Neath:设计。
  • Ryan Tomayko:开发。

很久以来,网站许多关键基础设施,都用的是 Shell
脚本,它们很有效,多年来用着很顺利。

事实证明,GitHub 是世界上最大的 Ruby on Rails 应用程序,GitHub 系统主管
reckons Sam Lambert 曾和 The Platform(译者:一家网站

不方便公开讨论 GitHub 有多少行代码构成,没有公司公布有多少行代码托管在
GitHub 仓库,但 Lambert 确实给了我们一些指标数据,这些数据是关于 GitHub
的使用增长情况,以及系统如何支撑为大约 60000 个机构或个人工作的 1000
万个程序员维护 2600 万个开源项目。

公司经历
  • 2011.10.26:Github开源Camfire机器人Hubot。
  • 2012.2.28:YC孵化项目Coderwall聚合你在Github等网站上的项目,打造属于Geek的”技术名片”。
  • 2012.5.22:获得Andreessen Horowitz投资,1亿美金投资,估值达8亿。
  • 2012.10.6:推出单独教学页面,通过网络及面对面实体模式教授协同编程。
  • 2013.2.1:创投界奥斯卡 “Crunchies 2012″最佳创业公司称号。
  • 2013.2.16:发布Boxen套件,帮助你一键备份和部署新电脑。
  • 2014.1.10:收购基于Web的页面设计工具Easel。

网站创建于 2008 年,至今已经 8 年,最初网站使用 Ruby on Rails
构建,最初的版本是由创始人自己写的,当然 Git 部分用的是 C 语言,处理 Git
请求,数据合并等事项。

“基本上它就是一个简单的栈,对我们来说它真的很重要,“Lambert
说。“我们试图采用尽可能少的东西来保持这个栈的简单”。

客户
  • KPI:注册用户突破400万,托管项目超过800万个。
  • 商业模式:Freemium模式。免费用户能够进行项目代码托管,但是只能使用公共仓库。付费用户能够在Github上托管私人的库。

当初所有的数据都通过 MySQL 存储,对于临时性质的数据,也会采用 Redis
或者是 memcache 做缓存。

澳门新葡萄京官网注册 4

Github基本功能

Github 刚成立时,技术栈就这么简单:C,Shell,以及
Ruby。并且在做新项目地时候,也不会盲目尝试新的工具和语言。

另一方面,2008 年是创业公司的一个分界线(两年后 Amason Web Service 发布了
EC2 计算云),GitHub
可以使用云,第一次不需要在基础建设上做投资。但是,没有那么做,公司创始人和他们聘请的工程师已经绘制了技术栈草图,通过聊天工具见猎购买了一系列创造性的系统管理,软件布署工具,基本的
IT 操作都在 GitHub 上运行。

Repository

分为公共仓库和私人仓库。仓库包含了所有的:版本、分支、标记信息。

随着网站规模的壮大,Github 的开发团队成功吸引到多名 Ruby
的核心开发者,在日后的开发过程中,继续保持技术栈的精简和实用。

当然,公司在 GitHub 上有自己的私有仓库来开发 GitHub。虽然 Lambert
没有透露这个构成 GitHub 的 Ruby 应用的具体大小,但是他告诉我们这个平台在
GitHub 的仓库里有25万个 commit,有上百人贡献了他们的代码和提交这些变动的
commit,尽管不是所有人都在 GitHub 工作。

Explore

发现、查看、研究Github上公共仓库中托管的代码项目。

对于新技术的态度,LAMBERT
表示其实工程师在工作中的自由度很高,可以试用各种新技术,只不过在实施项目时偏保守。

项目人

Gist

有版本控制的代码粘贴服务,由此可以方便地共享文本或代码。

有趣的是,虽然全世界一半的新项目都由 Github 托管,但事实上 Github
仅采用了为数不多的几个技术栈。

“GitHub
最初是为我们自己创建的,我们基本上都是软件工程师所以我们想要一个好的工具做开发。”,Lambert
如是说道,“我们使用 GitHub 去构建
GitHub,同时这也是我们每天去管理所有事物的东西。人力资源和法律团队在他们的工作流程上也在使用
GitHub。不仅仅只是程序员在使用
GitHub。我们非常幸运能够用其他公司不一定能做的方式完成了我们的代码。如果你招一些开发者为广告系统做开发,除非他们根本不在乎讨不讨厌广告,否则他们是不会愿意干的。而我们所有的开发人员都喜欢Git并且所有的工作都围绕着它,所以我们有为我们每天使用的工具而工作的特殊待遇。

Blog

个人博客,只要向Github提交Commit就能发布新文章。

随着时间的积累,Github
的用户量爆炸性增长,后面的技术上也面临诸多挑战。其中最复杂的是要处理 Git
的海量请求,LAMBERT
没有细说具体的技术细节,但表示依然是最简原则,不要重新发明轮子。

Github
栈的底端是硬件,它由几百台分布在各地数据中心的X86服务器组成。(Github
没有透露这些服务器位于何处,但 Lambert
确实说过,由于全球用户基数增长,Github
正在考虑在全球其他地区建立数据中心。)

Watch

将感兴趣的仓库加入关注列表,如果所关注的仓库有更新会动态的进行邮件通知。

一直以来,性能都是工程师不懈的追求,Github
技术团队也是。除非这个功能足够快,否则就不要部署。

“我们使用标准供应商的现成机器,” Lambert 说道,
但没有提及供应商的名字和配置。
“我们对软件运行做了很多优化,但针对硬件我们并没有做不合适的大规模定制化。随着规模变大,我们试图让软件容错性更好,并且将数据拷贝到一次性机器上,这样我们就用不着维修机器了。你只需要毁掉它,重新将数据放到另一台机器上。这会让购买机器变得便宜,同时扩展的成本也更低。”

Star

一种更新的方式管理你所感兴趣的仓库的记录,任何之前预览过的仓库都能在其页面中找到。

对于硬件奢设施,Github
没有使用任何云服务,而是自建数据中心,当然,为了满足庞大的使用量,Github
相当于构建了自己的私有云平台,Github
拥有自己的基础设施团队,人数不多,但可以保障 Github 的正常运行。

“我们确实需要构建定制化和非比寻常的东西,因为一旦我们做了,我们就失去了社区正在做的东西的好处。这也告诉了我们怎么选择数据库,因为
MySQL
是每个人都在用的数据库。如果你使用它时碰到问题,这个问题别人也会碰到过,你自然不会碰到谁都无法理解的故障。”

Fork

最重要的功能之一,克隆别人仓库的代码到自己的项目中。可以作为子模块的形式使用,或二次开发。

随着用户量的增长,团队规模也随着扩大。和众多创业公司一样,Github
也面临招聘新员工的挑战,既要具备足够的能力,而且要认同 Github
的文化和发展方向,为了招聘到满足需要的人手,Github
允许员工远程工作,这样可以招聘到其他国家和地区的员工。

硬件明显没有那么有趣 ——尤其对于软件工程师来说。但是 Lambert
尤其对自家开发的部署系统 GPanel 感到兴奋,它用 Ruby 开发,挂钩到 Puppet
配置工具,让公司里的任何人都可以准备机器并在上面发布软件。

Github项目前10名(根据Star数)

  • bootstrap:The
    most popular front-end framework for developing responsive, mobile
    first projects on the web,66640
  • jquery:JavaScript
    Library,30328
  • node:evented
    I/O for v8 javascript,28908
  • html5-boilerplate:A
    professional front-end template for building fast, robust, and
    adaptable web apps or sites,24871
  • d3:A
    JavaScript visualization library for HTML and SVG,24483
  • angular.js:http://angularjs.org,22589
  • Font-Awesome:The
    iconic font designed for Bootstrap,22060
  • rails:Ruby
    on Rails,21436
  • impress.js:It’s
    a presentation framework based on the power of CSS3 transforms and
    transitions in modern browsers and inspired by the idea behind
    prezi.com,19852
  • backbone:Give
    your JS App some Backbone with Models, Views, Collections, and
    Events,17611
  • homebrew:The
    missing package manager for OS X,16755

澳门新葡萄京官网注册 5

在 Github,大概 60% 的员工远程工作,比如 LAMBERT
就曾经周游世界,在不同的地方工作,Github
推崇的正是分布式远程工作的文化。

“这让我们像在公有云上一样部署软件,却又允许我们享受拥有自己的硬件的所有好处。”

吉祥物
  • Octocat:章鱼猫

Hubot机器人概念(图片来源:hubot.github.com)

Github 的软件基础当然是 Linux,Lambert
也说过公司当然有足够的专家来运转自己的
Linux。但它没有这么做,而是简单地使用 Canonical Ubuntu
分布式服务器。至于存储 Git 代码和 Github
代码仓库访问控制系统的其他部分的数据库,Github 依赖 MySQL
关系数据库。Github 自己维护 Linux 和 MySQL 软件,以及 Ruby 和
Rails。Github 聘用了 Ruby 和 Rails
社区的主要维护者,因此可以推论,Github
在社区做自己的技术支持。但事实上随着应用的规模扩大,Github
同时拥有自定义版本的 Ruby 和 Rails。

寓意
  • Git has an octopus merge. 表示Git分布式的特性。

澳门新葡萄京官网注册 6

为了让世界各地的员工分工协作,Github 使用 Hubot
工具。比如可以通过聊天的方式,询问 Hubot 现在在哪里,Hubot
可自动回复某成员当前在世界的哪个城市,或者在办公楼的哪一层。

Fork 代码

初始
  • 在2013年4月,Github在5岁的时候。

Hubot 支持好几十个命令,可以查询 MySQL
状态,可以做故障切换,可以删除数据库表,可以备份文件,可以复制转移,可以做几乎所有和运维相关的事。

“当数据来临时,对我们来说真的是规模问题,我们正在使用一个高可用的方式弹性存储数据,”Lambert
说道,”它是关于适应 Git
具有可扩展性和易用性,因为它从来没有考虑过这一点。我们测量,GitHub
是最大的 Ruby on Rails 程序之一。许多公司都没有大规模的运行
Ruby。我们保持精益,做优化,以保持这种方式。

设计师
  • Github的另一位创始人:Tom Preston
    Werner为了给网站的404页面找一张有趣的图片,从另一个网站上花50美金买来的一张图片(现在Github完全拥有这个图像的使用权)。

除了查询其他同事的状态,Hubot
还能实现监控功能,比如当某个服务器出现故障,Hubot 可以自动报警。

我们现阶段不完全,不像 Facebook 的 HipHop 和 Facebook 用 PHP
做什么,但我们有人民奉献 Ruby 的核心,使其更快和精益。”

简介
  • Github自己发起并维护(由Josh
    Nichols负责)的Hubot机器人,有公开的代码仓库。技术上使用Node.js。

LAMBERT 认为,Hubot
代表了未来互联网公司的运作方式,他可以适应性地把服务器等基础设施以及分布于世界各地的员工紧密连接到一起,人与机器之间无障碍交流沟通,解决了许多传统企业未能解决的问题。

GitHub 调整了 Ruby 解释器,并创立了自己的垃圾收集例程,但它也热衷于定位
Ruby 和 Rails 的错误尽可能快和获取代码修复到 GitHub
上,应用程序,以及输出到 Ruby 和 Rails 社区。 ( Ruby 开发托管在 GitHub
上,因为这样是为了 Rails。MySQL
的开发刚搬过来不久,用了甲骨文一些时间来做到这一点。)

作用
  • Github使用Hubot作为自己的的chat bot。

稿源:创见  
作者:IMYG

GitHub 可能是开发者的机器,用于疯狂的 Fork 代码 – 好,疯狂的 Fork
代码至少 – 让 GitHub 费力也不以为奇。兰伯特解释道:

扩展
  • Github同时维护着Hubot脚本社区。
  • 用户可以添加脚本,形成自己的机器人。进行例如:发推、发送图片、语言翻译、自动部署等操作,增强远程工作的文化。

“我们保持 GitHub 作为一个 Ruby on Rails
应用程序的原因是,它是非常容易和快速的学会。人们在该公司第一天上班就开始在
Github上
工作了。我们真的很需要一个的定制的和与众不同的构建,因为如果我们这样做,我们将失去了所有社区所带来的好处。这就是告诉我们的数据库选择,因为
MySQL是每个人都在使用的。如果你遇到 MySQL
的问题,它是已知的,你不会遇到晦涩难懂并且没人知道的错误信息。没有找不到答案的奇怪错误,因为你遇到的问题,有人已经遇到过”。

豆瓣机器人
  • 豆瓣也有一个挺有意思的机器人:doubanbot。

(全文完)

GitHub 的基础设施有 Web
服务器,代理服务器,认证服务器,和一堆执行有关仓库的分析、上传提交分析、数百万托管项目分析的系统,但真正核心是存储库本身。大多数这类数据是文本,当然,这不会占用很大的空间,相比一些更丰富照片,视频和音频媒体更能充塞互联网后面的磁盘驱动器。

奇怪的是,GitHub
没有使用传统的数据压缩方式压缩文本数据,但它有自己的压缩方式来节省空间。如果一个项目被
Fork,只在 Fork 中保存对原来的更改。
(我们假定这个方法也可以让你轻松地找出变化,在每一个 Fork 中迭代。)如果
GitHub 上保存每一个变化,每一个
Fork,它会很快有数不清的PB级数据,传统的数据压缩会使系统变慢。事实证明,即使每天从程序员接受数百
GB 字节的新数据,整个 GitHub 的资源库的大小也是被度量在数百 TB 级。

在某些时候,在互联网上有很多猫的照片,所有猫的照片来自 master
猫的照片,并根据变化方式存储在 Fork 中 (译者注:这里做个比喻,形容
github 的 Fork 只存储与 Fork 之前的差别)

(我们有点开玩笑。)

“有很多公司说他们已经到达 TB 和 PB
级的数据,你问他们那都是些什么数据,它们通常只是垃圾,” Lambert
笑着说。“大多大数据公司仅仅用来存储事件 ——
这些基本上都是没用的。我们非常自豪于我们一直保持着精益和优化,我们不会存储大量无用的数据。相对于我们的竞争对手,存储到仓库的比率显示了我们非常非常地精益。我们尽可能不去存储数据,因为我们有一些非常智能的东西在后端让我们保持松散和分叉。我们有很多
Git,但我们还是会尽我们所能去优化。”

回顾 GitHub
的发展经历,从公司到老旧的学校,都可以快速简单地获取指定的存储和计算能力并启动它们。

“我们总是领先一步,我不能说是压力驱使,但我们确实有压力。”Lambert
没有具体说明集群是如何快速发展的。“我们每天有数百 G
的新数据,并且仓库的使用规模快速增长,但我们创建了基础设施,可以和业务增长保持同步扩展”,这是因为我们的计划做得很好,现在也没有变慢的迹象。

如果 GitHub 像其他 hyperscaler
一样,它的基础设施发展会滞后于推动基础设施的因素发展。很难去扩展服务,存储和用户,这也是为什么在
hyperscaler 有这么多的工程创造力。

使用公共的 Github 仓库是免费的,但是上面的代码可以被任何感兴趣的人获取和
fork。GitHub 有偿提供私有仓库,这是它计划盈利的方式。价格从 7
美元每个月的包含 5 个私有仓库的个人计划到200美元的程序员团队可共享 125
个私有仓库的商业计划。对于那些需要在内部搭建 Github
来开发代码的公司,可以购买 GitHub Enterprise 授权,售价 2,500
美元,每年可安装 10 个主机,并且跟 Github 有同样的外观。GitHub
Enterprise 可以在内部主机上搭建,也可以搭建在 Amazon Web Services 或者
Microsoft Azure 公有云上。目前 GitHub 和 GitHub Enterprise
由同一个支持团队维护,但是如果你要在 GitHub Enterprise
上做内部开发并想开源到 GitHub,没有自动化的方式来完成。但 Lambert
表示存在空间。

除了核心Ruby on
Rails应用程序和存储算法把GIT中的代码存放到文件服务器,GitHub也正在工作于其它应用上。
“有些技术,你只是没有把它下架,因为世界上我们是最大的代码托管商,我们有很多定制领域的问题,”
Lambert说。

向前发展的其中一个重点领域是,提供了一组更丰富的关于程序员的项目分析和工作分析,因为很多公司都在使用开源软件,以此来吸引人才。这就是为什么GitHub将扩展到新的市场,有很多变化的文档和Fork是协作过程的一部分。就像GitHub里面的团队一样,使用该工具来跟踪项目,架构师,音乐家和其他工匠开始使用该工具,这可能为Github提供了另一波增长。

GitHub 在 2012 年的 7 月第一轮风险融,从 Andressen Horowitz 那里资筹集了
1 亿美元,和今年 7 月的第二轮融资,从红杉资本和 Andreessen
Horowitz,Thrive Capital 和 Institutional Venture Partners 筹集了另外
2.5 亿美元,该公司尚未公开,但鉴于其融资的估值约为 20
亿美元,和现金增长其基础,并扩大它的目标市场。

ChatOps文化与分布式开发

GitHub 的一个重要创新,严格的讲,不是代码部分,但绝对是公司 Hubot
的一部分,这是公司使用的一个聊天机器人系统管理接口。这种方法通常被称为
ChatOps,给部署操作起别名,通过聊天机器人,用聊天的方式做 DevOps。在
GitHub 里一切都使用它。

它成立不久后,GitHub 的创建了一个名为 Hubot 聊天机器人,它集成了 GPanel
和其他系统管理工具以及公司里使用的其他功能。事实证明,在 GitHub 上有 65%
的员工,325 人远程工作。因此,会议或培训会议在办公室里是不会发生的。所以
Hubot 就是执行的一切,每个人都可以看到别人都在做的事情。(Etsy 的和 Box
现在已经使用了 Hubot。)

“这种文化,你将会错过,我们已经围绕着我们的聊天室里工作,”兰伯特说。
“这是一个引人入胜的方式。当我第一次开始使用它时,我们没有任何的训练。我刚走进聊天室,观察着。聊天机器人为我们提供了立即回复。在很多公司,当人们做出更改,他们得来到自己的公司电脑前,来解释他们都更改了什么,这真的是笨方法。在这里,如果你做出了更改,你直入聊天室,每个人都在那工作。我们所有的人都通过聊天机器人发送命令,每个人都可以看到它,基本上,你什么都能做。我们是率先推出这种工作方式的公司之一,它越来越多被采用。它使我们能够进行极其分布式和异步工作,而无需任何人走进办公室”。

这就像我们数百万的 Github 用户一样。

【编辑推荐】