Github 栈的底端是硬件

时间:2022-12-08 16:32:09

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

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

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

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

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

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

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

  Fork 代码

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