写点什么

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

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

关注

评论

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

M洞察|“MOBA”还是“MMO”?2023上半年热门手游大盘点来了,拯救你的游戏荒

MobTech袤博科技

阿里P8写出的《深入理解Java虚拟机》最新版,轻松学会JVM底层

程序知音

Java JVM Java虚拟机 Java进阶 后端技术

软件测试 | 测试计划目标

测吧(北京)科技有限公司

测试

直击不断变化的世界,企业可以学到什么?

智达方通

智达方通 全面预算管理 企业绩效管理 FP&A 财务计划与分析

开源数据可视化开发平台FlyFish数据源应用教程详解

云智慧AIOps社区

前端 大前端 低代码 数据可视化

ChatGPT再起争端,如何应对未来的机器挑战?速来学习解决方法!

加入高科技仿生人

人工智能 AI 数字技术 AIGC ChatGPT

促进银行业务高质量发展,神州云科亮相亚太银行数字化创新峰会

通明湖

软件测试/测试开发丨App自动化测试高级定位技巧

测试人

程序员 软件测试 自动化测试 测试开发

再获工信部认可!海泰方圆方案获评“2022年信息技术应用创新解决方案”

电子信息发烧客

优雅处理HTTP请求:过滤器拦截器、ControllerAdvice和自定义AOP

Java你猿哥

Java Spring Boot ssm 过滤器 拦截器

简单、快速|DeployKit 云部署套件

CODING DevOps

软件测试 | 模块化与模块独立性

测吧(北京)科技有限公司

测试

自动化导入路由

巨梦科技

神州云科全国巡展·金融客户会北京站成功举办

通明湖

金融数字化转型提质增效,神州云科全国巡展深圳站成功举办

通明湖

开发敏捷高效 | 云原生应用开发与运维新范式

CODING DevOps

重塑DeFi:深入了解Solaris Network

西柚子

PC、手机丝滑合体!移动时代的最大痛点 英特尔和腾讯搞定了

E科讯

如何让服务器性能“备而不闲”?

通明湖

软件测试生命周期

测吧(北京)科技有限公司

测试

顶满!阿里P8架构师独家分享的微服务实战笔记

小小怪下士

Java 程序员 微服务 微服务实战

INFINI Labs 产品更新 | Console 新增数据比对、新增数据看板表格组件及支持下钻功能等

极限实验室

console Gateway 极限网关 easysearch 极限科技

软件测试/测试开发丨学习笔记之接口自动化测试

测试人

程序员 软件测试 自动化测试 测试开发 接口自动化

走进“上电科”,共探企业信创选型之路

通明湖

GitHub标星11.9k兼职项目!基于SpringBoot + VUE电商-分销商城系统

Java你猿哥

源码 Spring Boot Vue ssm uni-app demo

腾讯安全携手行业伙伴,详解攻击面管理(ASM)核心能力

极客天地

JMeter笔记9 | JMeter参数化

测试 Jmeter 性能测试 自动化测试 接口测试

日程和任务管理:Things3 中文激活版 支持m1

真大的脸盆

Mac Mac 软件 任务管理器 任务管理工具

全景描绘云原生技术图谱,首个《云原生应用引擎技术发展白皮书》重磅发布

通明湖

软件测试 | 编写软件测试计划的注意事项

测吧(北京)科技有限公司

测试

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