写点什么

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

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

关注

评论

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

机器学习:人工智能的子领域之一

天津汇柏科技有限公司

机器学习 #人工智能

可信AI评估 | 中国信通院“人工智能开发平台——大模型专项”首轮评估正式启动报名

中国信通院AI Infra工作组

DePIN赛道:从底层设施到上层应用的五大机遇与挑战

TechubNews

联想拯救者携手《黑神话:悟空》,开启国产单主机巨作的新时代

科技范儿

字节跳动基础架构两篇论文入选 VLDB 2024

字节跳动云原生计算

字节跳动 VLDB

在鸿蒙系统中处理ETS层与C++层之间的数组传递

彭康佳

c android 鸿蒙 native

2024最新多端社交圈子系统源码 | 陌生人社交 | 即时聊天通信 | 小程序+H5+PC+APP等多端

DUOKE七七

php 开源 源码 uniapp 交友软件开发

【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常

YashanDB

数据库 yashandb 崖山数据库

中国信通院牵头的人工智能平台国际标准在ITU-T成功立项

中国信通院AI Infra工作组

2024 AIIA先锋案例 | “AI Infra”专项征集工作正式启动

中国信通院AI Infra工作组

精彩回顾!圆桌讨论“大模型与网络空间安全前沿探索”

云起无垠

PHP正版交友系统交友平台源码+支持H5小程序+带安装说明+可封装APP 交友程序网站源码+安装说明

DUOKE七七

php 开源 源码 uniapp 交友

碳实践|企业组织碳排放因子宝典

AMT企源

数字化转型 双碳 碳管理 碳核算 碳排放

【YashanDB知识库】PHP使用ODBC驱动无法获取长度为256char以上的数据

YashanDB

国产数据库 数据库系统 yashandb 崖山数据库

价格战迷雾下,大模型创业者只能被动挨打?

Alter

开发者之声:我们正在聆听!体验低代码Astro并提交建议,赢取华为GT系列手表等好礼!

华为云PaaS服务小智

云计算 低代码 华为云

DePIN赛道:从底层设施到上层应用的五大机遇与挑战

TechubNews

《高质量大模型基础设施建设指南》编制正式启动

中国信通院AI Infra工作组

推荐捷行Jim老师高阶课程的八大理由

ShineScrum

AIIA走进联盟成员单位——创新奇智

中国信通院AI Infra工作组

和鲸科技执行总裁殷自强:面向空间数据协同分析场景的模型生命周期管理方法

ModelWhale

人工智能 大模型 生命周期管理 地球科学

TDengine 3.3.0.0 引入图形化管理工具、复合主键等 13 项关键更新

TDengine

数据库 tdengine 时序数据库

解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展

汀丶人工智能

大模型 思维链

关于举办青岛“AI+海洋”人工智能大模型场景应用对接会的会议通知

中国信通院AI Infra工作组

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