【翻译】github 搜索团队访谈
博客专区 > tsl0922 的博客 > 博客详情
【翻译】github 搜索团队访谈
tsl0922 发表于4年前
【翻译】github 搜索团队访谈
  • 发表于 4年前
  • 阅读 2775
  • 收藏 58
  • 点赞 10
  • 评论 6

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 这是一篇对 github 搜索团队访谈文档的翻译,里面介绍了很多关于 github 搜索的细节,比较有参考价值。因为原文特别的长,本文只是从中挑选重点内容翻译过来然后加以整理,以被采访者的身份来描述的。

介绍

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
粉丝 259
博文 26
码字总数 11714
作品 1
评论 (6)
not3
elasticsearch 为了实现异步数据交换使用了大量的 NIO 类库,而我们使用的 OpenJDK 6 并未完整实现这些。0
ddatsh

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

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

亮点就这句了
空_明
你的jdk 可以换一个呀
zzjin

引用来自“ddatsh”的评论

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

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

亮点就这句了

+1
幸福是只猪
大大大嫂打算打算打算打
刘小羊
居然使用openjdk
×
tsl0922
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: