Github:诞生于 Ruby,60%的员工远程工作

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

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

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

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

澳门新葡亰游戏网址 1

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

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

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。与其说这是一个商业计划,他们的开发更多是为了能有一个工具帮助他们自动化地协助自己的软件开发工作。

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

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

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

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

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

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

澳门新葡亰游戏网址 2

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

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

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

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

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

项目人

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

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

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

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

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

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

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

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

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

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

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

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

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。

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

Fork 代码

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

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

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

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

网站地图xml地图