文档章节

【翻译】github 搜索团队访谈

tsl0922
 tsl0922
发布于 2014/01/04 22:17
字数 868
阅读 2794
收藏 58

介绍

gihtub 的搜索是基于 elasticsearch 构建的,在 github.com/search 页面,你可以检索项目、用户、issue、pull request,还有代码。搜索的目的就是让所有公开的东西易于查找。

从上面 5 种可以搜索的内容来看,至少需要 5 个索引库。事实上共有 40-50个索引库,分别用于索引我们需要跟踪的各种数据。一个例子:安全日志,一旦用户在 github 上做了一些安全相关的操作,我们会在 elasticsearch 里写入记录,这样用户账户的任何异常都会有迹可循。另一个例子是,github 服务器端应用的异常报告也被从各个组件收集到 elasticsearch 的一个索引库里,我们有自己的异常报告框架,建立在 elasticsearch 之上

技术演进

github 的搜索最初是建立在 solr 上的,但是随着用户数和项目数的增长,也伴随着数据量的增大,不是一台 solr 集群和一个 solr 实例所能承受得了的了。后来,我们决定迁移到 elasticsearch。

但是,在迁移的过程中我们意识到,要处理的数据量之大已经不是我们在 Rackspace 的几台服务器所能处理的了。于是,我们把集群前移到了亚马逊 EC2上,目前使用了 44 个独立的 EC2 实例(存储节点 * 36 + 查询节点 * 8),每个实例带有一个 2TB 大小的 SSD 硬盘。集群上运行 elasticsearch 0.2,数据量有 30TB 大小。

遇到的问题

迁移过程中,我们也遇到了不少的麻烦。当我们发布博客宣布了新的搜索后,过了几天,各种 bug 出现了,有人说:“天哪,你可以在 github 上搜索到别人的密码!”,用户需要检查他们的 ssh key 了。。

不止这些,服务也非常的不稳定而且容易崩溃!最终,我们不得不在搜索页面里显示:“对不起,代码搜索已下线”。后来,搜索小组的同志们花了整整 48 个小时才恢复服务(加班了?)。最后找到服务崩溃的原因是:elasticsearch 为了实现异步数据交换使用了大量的 NIO 类库,而我们使用的 OpenJDK 6 对 NIO 的实现还不够完善。切换到 Sun JDK 后,问题解决,服务也变得稳定起来了。

索引内容

我们索引两种类型的文档:一种是源文件(source code file),另一种是仓库(repository)。仓库文档主要跟踪仓库最近的提交(commit),以及它所涉及到的文件改动等。当用户推送(push)代码到 github 后,我们会把最新的代码拉取(pull)到 elasticsearch,并获取最新的改动,然后更新索引文档,这个过程是增量式的,不需要完全重构索引。

我们只索引项目的主分支(master),但这个数据量依然巨大,20亿索引文档,30TB的索引文件

英文原文+访谈音频:Interview with the Github Elasticsearch Team


© 著作权归作者所有

共有 人打赏支持
tsl0922

tsl0922

粉丝 260
博文 26
码字总数 11714
作品 1
深圳
高级程序员
加载中

评论(6)

刘小羊
刘小羊
居然使用openjdk
幸福是只猪
幸福是只猪
大大大嫂打算打算打算打
zzjin
zzjin

引用来自“ddatsh”的评论

引用来自“not-three”的评论

elasticsearch 为了实现异步数据交换使用了大量的 NIO 类库,而我们使用的 OpenJDK 6 并未完整实现这些。0

亮点就这句了

+1
空_明
空_明
你的jdk 可以换一个呀
ddatsh
ddatsh

引用来自“not-three”的评论

elasticsearch 为了实现异步数据交换使用了大量的 NIO 类库,而我们使用的 OpenJDK 6 并未完整实现这些。0

亮点就这句了
not3
not3
elasticsearch 为了实现异步数据交换使用了大量的 NIO 类库,而我们使用的 OpenJDK 6 并未完整实现这些。0
【开源访谈】《iOS 的函数响应型编程》译者 shanksx 访谈

【项目地址】: http://git.oschina.net/DarkHorse1919/FunctionalReactiveProgrammingOniOS 译者 shanksx 近照: 【正文】 1.请简单地介绍一下你自己(技术背景、学习经历、工作经历)。 大...

孔小菜
2015/08/10
3.6K
6
国外程序员访谈:Dropbox 女程序员 Leah Culver

本文由伯乐在线 -Mr.G 翻译,黄利民 校稿。未经许可,禁止转载! 英文出处:fogcreek。欢迎加入翻译组。 在开发人生(dev.life)中,我们与开发者就编程的激情展开交谈:他们是怎么爱上编程的...

伯乐在线
2015/05/02
0
0
Tensorflow 官方版教程中文版

2015年11月9日,Google发布人工智能系统TensorFlow并宣布开源,同日,极客学院组织在线TensorFlow中文文档翻译。一个月后,30章文档全部翻译校对完成,上线并提供电子书下载,该文档的上线为...

极客Wiki
2015/12/15
184.8K
7
【开源访谈】Gitc 作者夏天访谈实录

关于开源访谈 开源访谈是开源中国推出的一系列针对国内优秀开源软件作者的访谈,以文字的方式记录并传播。我们希望开源访谈能全面的展现国内开源软件、开源软件作者的现状,着实推动国内开源...

虫虫
2012/09/04
5.1K
36
推荐资源|神经网络与深度学习

最近深度学习越来越火...... 就像这些字一样,越来越火...... 有一天,浩彬老撕在整理团队的学习资源,发现了一本好书: 这本书就是《神经网络与深度学习》 更重要的是: 本书作者是一位量子...

浩彬老撕
2017/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 小心着凉 @红薯

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:5.33起,其声呜呜然,如怨如慕,如泣如诉。余音袅袅,不绝如缕。分享Arch Enemy的单曲《Bridge Of Destiny (2009)》 《Bridge Of...

小小编辑
16分钟前
6
0
what f,,

anlve
56分钟前
0
0
初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
10
0
现场看路演了!

HiBlock
昨天
19
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部