写点什么

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

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

关注

评论

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

Neo4j CEO Emil Eifrem 解读图数据平台引领数据库未来十年的发展

Neo4j 图无处不在

neo4j 图数据库 知识图谱 图可视化引擎 图数据

嘉为科技宋蕴真:观测不止于监控,让运维不开盲盒

嘉为蓝鲸

运维 智能运维AIOps

MyBatis resultMap元素的用途是什么呢?

@下一站

技术 mybatis java; 11月月更

SpringMVC常用注解

@下一站

软件开发 程序 Java‘’ 11月月更

精彩回顾 | 云原生系统软件的产业应用

BoCloud博云

云原生

在结构效率不变情况下的降本增效

PMO实践

数字化转型 数字化 数智化 11月月更

阿里云洛神云网络集中式网关丨技术解读与产品实践

云布道师

云网络

企业想要高效运营,还需要选择瓴羊Quick BI软件

流量猫猫头

大数据

玩转云端| 数据库安全服务,为数据库资产构建“最后一道防线”!

天翼云开发者社区

企业内部统一的移动平台,实现安全高效的业务移动化

BeeWorks

互联网企业面试必问Spring源码?搞定Spring源码,看完这篇就够了

钟奕礼

Java java面试 java编程 程序员‘

蓝鲸研运体系在腾讯内是如何应用实践的?

嘉为蓝鲸

运维 智能运维AIOps

2023 重学 Angular

PingCode研发中心

前端框架

深究用户模式锁的使用场景(异变结构、互锁、旋转锁)

C++后台开发

数据结构 多线程 linux开发 C++开发

嘉为科技吴文豪:重塑运维系统,跨越烟囱式建设的陷阱

嘉为蓝鲸

运维 #WeOps

企业数字营销和运营如何效果更好?瓴羊Quick BI成为了不错的选择

小偏执o

老板让我在Linux中使用traceroute排查服务器网络问题,幸好我收藏了这篇文章!

wljslmz

Linux 网络故障 11月月更 traceroute

三年后端开发:拿下阿里/腾讯/美团等四个大厂的Offer后,总结如下

钟奕礼

Java Java 面试 程序员‘ java 编程

制造业的敏捷分析,还需要使用瓴羊Quick BI

对不起该用户已成仙‖

对话Neo4j首席科学家Jim Webber:图数据库江湖5年后将尘埃落定

Neo4j 图无处不在

neo4j 图数据库 知识图谱 非关系型数据库 图技术

新时代冠军企业成功硬道理:人效管理与可组装式HCM SaaS

ToB行业头条

基于云原生技术的融合通信是如何实现的?

阿里云CloudImagine

阿里云 云通信

跟误告警说再见,Smart Metrics 帮你用算法配告警

阿里巴巴云原生

阿里云 云原生 Grafana

天翼云Serverless边缘容器下沉服务 促进企业聚焦业务创新

天翼云开发者社区

瓴羊Quick BI在商业智能BI发展趋势方面如何?

对不起该用户已成仙‖

天翼云混合云容灾技术解析

天翼云开发者社区

焱融科技为国家重点实验室打造海量高性能存储

焱融科技

云计算 分布式系统 高性能 文件存储

图数据技术护航网络安全

Neo4j 图无处不在

网络安全 neo4j 图数据库 知识图谱 图算法

数字产业化的颠覆创新和生态打法

PMO实践

产业数字化 11月月更

腾讯云原生容器服务发布三大新能力,创新自研技术助力企业降本增效

科技热闻

8年程序员年初被迫毕业,前后面试30家公司,如今终于上岸

Java永远的神

程序人生 后端 java程序员 java面试 面经分享

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