写点什么

支撑 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:5811121
用户头像

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

关注

评论

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

猪肉价格跌至去年最低水平 区块链养猪成热点

CECBC

农业

区块链BaaS平台的搭建,底层BaaS服务平台的开发

13828808769

行业资讯 产品资讯

区块链让版权与创作如影随形 应用深度逐渐加强

CECBC

产权保护

小白都能学会的Java注解与反射机制

陈皮的JavaLib

Java 注解 java反射

Crash 游戏是公平的吗?

飞亚科技

人生苦短,我用Python之小游戏

Bob

开发者 Python 游戏编程 4月日更 -python

让云原生应用的交付变得更简单 | KubeVela v1.0 正式发布

郭旭东

Kubernetes 云原生 OAM KubeVela

Nginx 除了负载均衡,还能干点啥

Java小咖秀

nginx 负载均衡

面试笔记(二)线程池连环炮

U2647

Thread 4月日更

Rust从0到1-结构体-定义和实例化

rust struct 结构体

有了这个框架,平台开发谁还手敲代码?

华为云开发者联盟

华为云 智慧园区 MainPortal 统一门户 HDC2021

拍乐云 x 扬帆出海 x LiveCloud:音视频出海专家干货分享

拍乐云Pano

flutter ios android WebRTC RTC

MUSO挖矿系统开发

飞亚科技

对于数据,科技小白提出了灵魂三问:从哪儿来?到哪儿去?能干什么?

华为云开发者联盟

人工智能 安全 数据 数据采集 网络人工智能

平面设计之PS(前序)

空城机

PhotoShop ps 4月日更

白金熊项目奖金制度玩法介绍

飞亚科技

这6个浏览器插件,让你的浏览器大为不同。

彭宏豪95

chrome 浏览器 插件 chrome扩展 4月日更

nsqlookupd:高性能消息中间件 NSQ 解析

华为云开发者联盟

集群 消息中间件 nsq nsqlookupd

1小时800箱,动力机器人真·搬砖16小时不续航;苹果官宣 WWDC 全球开发者大会召开时间;基于图神经网络的分级相关性匹配

京东科技开发者

人工智能 AI 开发者

模块一课后作业

王瑞强

架构实战营

【LeetCode】搜索旋转排序数组 IIJava题解

Albert

算法 LeetCode 4月日更

区块链商品溯源平台搭建及防伪溯源解决方案

13828808769

商品溯源

书单|互联网企业面试案头书之运营篇

博文视点Broadview

架构实战营模块一作业

sandy

牛比特小矿工系统开发|牛比特小矿工软件APP开发

系统开发

情指勤一体化指挥调度平台建设,重点人员管理平台

提升漏洞修复率,DevSecOps真的很有一套

华为云开发者联盟

软件 安全 DevSecOps 漏洞修复 软件漏洞

区块链系统的层级架构如何及在供应链中的应用

CECBC

区块链

openresty源码编译

上海派拉基础研发

nginx openresty

7 个非常实用的 Shell 拿来就用脚本实例!

JackTian

Linux 编程 Shell 脚本语言 运维工程师

BBK智能合约系统开发|BBK智能合约APP软件开发

系统开发

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