【AICon】硅谷视野+中国实践,汇聚全球顶尖技术的 AI 科技盛会 >>> 了解详情
写点什么

支撑 Github 的开源技术

  • 2014-03-27
  • 本文字数:2796 字

    阅读完需:约 9 分钟

Github 在 3 月 19 号开放了新的项目展示页面(Showcase),Showcase 根据项目属性来组织、定义一系列的开源项目列表,可以更清晰的发现你所需要的开源项目。在 3 月 26 日的 Showcase 中,Github 放出了一个新的类目:支撑 Github 的开源技术,这里列举了 Github 所使用的一些主要的开源项目。

  1. linguist

语言识别库,能够自动根据项目的代码来识别你所使用的语言。 在你的项目源代码页面,可以看到一个彩条,点开以后会显示项目中的编程语言比例。linguist 主要通过文件的后缀来识别,对于一些通用的扩展名,例如.m 文件,linguist 通过一些语言的特征片段来做判断。由于编程语言很多,linguist 还不能覆盖所有语言的检测。
2. jquery-pjax

pjax 是 Github 的联合创始人之一 defunkt 的作品,它使用 html 的 pushState 特性与 ajax,可以实现页面内容动态局部刷新,当点击项目源代码页面中具体的一个文件或者文件夹时,你将会看到页面的其他部分是不变的,只有定义的页面 DOM 会刷新,这里使用的就是 pjax。
3. elasticsearch

Eleasticsearch 支撑了 Github 的搜索功能,2 年之前 Github 使用 Solor 做搜索,随着用户和托管项目的增加,索引的大小超过了 solor 节点的最大存储空间,也出现了很多的问题,Github 团队在思考解决方案时决定使用 Elasticsearch 做替换。Github 最开始使用 ES 时,使用了 44 台亚马逊 EC2 实例,每台实例配备 2T 的存储,其中 8 台实例指负责查询请求。目前,Github 已经将原有的 EC 搜索集群迁移到了东海岸的一个数据中心,使用 8 台物理主机替换了 44 台 EC2。
4. Rails

Ruby 实现的 MVC Web 框架。Github 的用户界面和功能大部分基于 Rails 构建,不过需要注意的是现在虽然 Rails 的项目版本已经发展到了 Rails 4,但是 Github 依旧使用的是自己维护的 2.3 分支,对于不保持和现有的 Rails 主版本号一致的原因,Github 员工 Kneath 做了如下的解释:

  1. . 花更过的时间来升级更新 Rails,将会减少为用户构建新特性的时间,我们更关注用户;
  2. . 性能问题是一个很重要的考虑。在过去的几年中,我们极大的减少了响应时间。而升级 Rails 不仅会带来一个更慢的框架,而且还会引入一个不同的架构——我们需要再根据新的框架特性来定位优化性能。我们对于现有的框架已经做了很多的优化以保持性能稳定,最主要的是:将时间花费在升级上不会让我们的架构更快。
  3. . 过去的三年我们一直在升级这个堆栈,不升级 Rails 版本我们依然可以使用新的特性。
  4. Redis

Redis 是 K/V 存储系统,知名的 NoSQL 实现之一,在 Github,主要使用 Redis 来进行队列中的异常处理。在 Github 早期,曾尝试过很多的基于 Ruby 的队列机制,也曾使用 Amazon SQS,但是这些方案都不能在 Github 快速增长的同时满足稳定性要求,最终 Github 迁移到了使用 Redis 的技术方案 resque。
6. sprocket

Sprocket 是一个网站资源打包的 Ruby 库,它不仅能够管理 JavaScript 和 CSS 资源,还可以按照 pipline 的方式来流式预处理 CoffeeScript、Sass、SCSS 和 LESS 代码等;
7. libgit2

libgit2 是一个可移植、纯 C 语言实现的 Git 核心方法类库,提供 API 重新链入 Git 方法。Github 的背后使用的原生的 git 来实现 commit、push 等功能,但是使用 libgit2 来针对桌面应用调用、Ruby 代码中调用等;
8. rugged

libgit2 的 Ruby 类库;
9. bcrypt-ruby

OpenBSD bcypt() 密码哈希算法的 Ruby 实现;
10. html-pipeline

html-pipline 是一个 gem 包,可以将现有 Github 前端 HTML 中的一些特性进行流式处理,例如在 Github 的评论框中,你可以 @某一个人、输入 emoji 的表情、使用 markdown 的语法来写内容等,但是这些都是由单独的插件来控制的,html-pipeline 可以流式的使用相应的插件处理原始内容,例如先将 markdown 转义成 html,继而自动添加 emoji 表情,然后进行代码的语法高亮等。
11. gemoji

在 2013 年的 QCon 北京前夜:Github Drink Up 活动中,来自 Github 的工程师 Tim 在现场的活动中谈到了他们的一个文化:使用 emoji。他解释道:“很多情感使用文字不能做出形象的表达,但是使用 emoji 表情却能够起到不一样的效果”。在 Github 现有评论框或其他内容中,都可以看到 emoji 的身影,所使用的就是 gemoji 这个 gem 包。
12. jekyll

Jekyll 是一个静态博客生成的程序,Github 中项目的 Page 页面,默认选型使用的就是 jekyll。
13. gollum

Gollum 是一套基于 git 的 wiki 系统,Github 项目的 wiki 系统背后使用的就是这套开源框架;
14. octokit.rb

Github API 的官方 Ruby SDK;
15. Hubot

Hubot 是 Github 自行开发的一个聊天机器人,当然它已经超过了聊天机器人的范畴,Github 作为一个异步办公的团队,日常的协作、沟通很大部分依赖于聊天室,通过 Hubot,Github 的员工可以在聊天室中给机器人定制一些特定的回复、3D 打印模型,甚至通过 hubot 来部署生成环境的代码、获取服务状态等,在 2013 年的 QCon 北京中,Giuthub 的工程曾针对如何使用 Hubot 做运维进行过分享:《ChatOps at GitHub》
16. d3

d3 是使用 JavaScript 实现的数据可视化框架,使用 HTML、SVG 和 CSS 等,在 d3 的基础之上发展处诸如 crossfilter、NVD3.js 等一系列扩展或者简化框架,并且形成了一个良好的社区。作者 mbostock 目前供职于 NYTimes,d3 是他的博士论文项目,目前 Github 使用 d3 来展示托管项目提交历史、记录等的可视化效果图。
17. plax

plax 是控制视差元素的 JavaScript 类库,你可以在 404、505 等页面看到它的实现效果。
18. ace

Ace 是一个使用 Javascript 开发的代码编辑器,具备语法高亮、快捷键绑定等特性, Github 使用 Ace 实现基于 web 的代码编辑功能
19. zepto

Zepo 是一个 JavaScript 框架,其特点是兼容现有 jQuery API 的同时,自身体积十分小;
20. zeroclipborad

Github 的“点击复制到粘贴板”的功能就是使用的 zeroclipboard,zeroclipboard 使用一个不可见的 Adobe Flash 动画来实现复制粘贴,并提供 Javascript 的 API 接口以供调用。
21. charlock_holmes

charlock_holmes 用来检测字符编码格式,并可以自动将字符编码转化成 UTF-8。
22. puppet

服务器运维工具,可以进行自动化部署、集群管理等。
23. moment

moment 是一个日期框架,用于解析、验证、格式化日期等,其中一个常用的功能是将原始的 Javascript 时间类型转化成方便阅读的时间说明格式,例如:”2 小时之前“、”3 天之前“这种形式。
24. bower

前端资源包管理工具,可以通过bower install <package>的形式将常用的前端资源下载到本地的项目目录中,例如:bower install bootstrap 将会自动下载 bootstrap 的项目资源到本地的项目目录中,不需要自己手动来下载、移动资源文件,并且通过配置文件可以方便分享给同事、简化项目初始化等;
25. resque

Resque 是 Github Enterprise 中使用的一个基于 Redis 的后台作业控制系统,提供可视化的界面,可以方便的监控后台作业的运行状态和监控情况。

2014-03-27 20:5810627
用户头像

发布了 89 篇内容, 共 31.2 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

大作业

胡益

一周信创舆情观察(3.1~3.7)

统小信uos

我用一个小小的开放设计题,干掉了40%的面试候选人

架构精进之路

Web 安全 软件设计 3月日更

万字长文,肝了一下午的线程池详解!

一个优秀的废人

Java 多线程 线程池 线程池工作原理

Flink SQL CDC 实践以及一致性分析

Apache Flink

flink

阿里P8手把手教你!万字Android技术类校招面试题汇总,附赠课程+题库

欢喜学安卓

android 程序员 面试 移动开发

数字经济时代,区块链能否担当产业数字化转型核心赋能者?

旺链科技

区块链数字经济 区块链发展

终于学完国内算法第一人10年经验总结的数据结构与算法详解文档

Java架构之路

Java 程序员 架构 面试 编程语言

寻找被遗忘的勇气(十一)

Changing Lin

3月日更

阿里P8亲自教你!2021Android大厂面试知识分享,实战篇

欢喜学安卓

android 程序员 面试 移动开发

轻量级的接口自动化冒烟框架

小小娃爱吃甜食

自动化 测试 框架 自动化部署

ZooKeeper 的选举机制,你了解多少?

架构 分布式

《精通比特币》学习笔记(第七章)

棉花糖

区块链 学习 3月日更

大作业

yoki

新的RBAC:基于资源的权限管理(Resource-Based Access Control)

龙归科技

资源 权限管理 rbac

HashData与HDFS的高效数据交换

酷克数据HashData

Elasticsearch Inverted Index

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

如何用一个月的时间啃完英语词典?

wbliu85

COPU助力北大研究生开源公选课丨开源PostgreSQL研发课程成功进入北京大学

PostgreSQLChina

数据库 postgresql 开源 开源社区

【2021 ECUG Con】聚势而来,与你相约花开时

小剑客

区块链 云计算 大数据 开源 Go 语言

2021年4款好用的音乐编曲软件推荐

奈奈的杂社

2021年爆锤39K月薪Offer!阿里巴巴Java面试(知识点)整理

Java架构之路

Java 程序员 架构 面试 编程语言

KubeNode:阿里巴巴云原生 容器基础设施运维实践

阿里巴巴云原生

阿里巴巴 容器 运维 云原生 k8s

话说 类加载过程 第一篇

木子的昼夜

江苏交通控股打造IT架构云转型下的智慧交通

酷克数据HashData

HashData多集群共享统一存储架构

酷克数据HashData

快了何止300%?阿里巴巴Java优化:设计+程序+并行+JVM+工具

Java架构追梦

Java 阿里巴巴 架构 面试 性能优化

音乐信息检索:理性解构音乐

阿里云视频云

阿里云 算法 音频

最新蚂蚁五面、拼多多三面、字节四面(已入职拼多多),个人面经分享

Java架构之路

Java 程序员 架构 面试 编程语言

1500道算法面试题:Github上标星86.7K!直接火遍全网

比伯

Java 编程 程序员 架构 面试

HashData外部表的实现与应用

酷克数据HashData

支撑Github的开源技术_亚马逊云科技_水羽哲_InfoQ精选文章