文档章节

【翻译】github 搜索团队访谈

tsl0922
 tsl0922
发布于 2014/01/04 22:17
字数 868
阅读 2789
收藏 58
点赞 10
评论 6

介绍

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 ⋅ 6

国外程序员访谈:Dropbox 女程序员 Leah Culver

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

伯乐在线 ⋅ 2015/05/02 ⋅ 0

Splunk初体验——像Google那样搜索你的数据

Splunk是日志/流式数据领域中做的最好的商业软件实现,它的核心能力只有一个: 像Google那样搜索企业内部所有产生的日志 这个的威力非常大,现在的企业不缺数据,缺的是有效挖掘数据的能力。...

难易 ⋅ 2014/08/27 ⋅ 4

Tensorflow 官方版教程中文版

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

极客Wiki ⋅ 2015/12/15 ⋅ 7

TensorFlow 官方文档中文版

TensorFlow 官方文档中文版 你正在阅读的项目可能会比 Android 系统更加深远地影响着世界! 完整版:http://wiki.jikexueyuan.com/project/tensorflow-zh/ 缘起 2015年11月9日,Google发布人...

openthings ⋅ 2015/12/21 ⋅ 0

【开源访谈】Seafile 作者徐家强访谈实录

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

红薯 ⋅ 2013/12/31 ⋅ 22

zhenyangze/uafred

uafred alfred on ubuntu(use electron) ubuntu上的alfred 如果你是开发者,点击查看如何制作插件 使用方法 进入 下载地址,选择自己的系统对应的版本下载. 创建快捷方式  右上角系统设置...

zhenyangze ⋅ 2016/06/29 ⋅ 0

Linux 上的效率工具--UAfred

uafred afred on ubuntu(use electron) ubuntu上的afred 如果你是开发者,点击查看如何制作插件 使用方法 进入 下载地址,选择自己的系统对应的版本下载. 创建快捷方式右上角系统设置->键盘...

阳泽 ⋅ 2016/06/28 ⋅ 6

【开源访谈】Gitc 作者夏天访谈实录

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

虫虫 ⋅ 2012/09/04 ⋅ 36

国内首位!Node.js 社区吸纳阿里云张秋怡为 CTC 成员

继去年 MariaDB 基金会将阿里云数据库高级专家彭立勋列为个人成员后,今年又有一位阿里云工程师在国际技术社区重要工作中有所担当,她就是张秋怡。 张秋怡,花名洗影,阿里云云应用服务团队工...

阿里云云栖社区 ⋅ 2017/06/21 ⋅ 45

没有更多内容

加载失败,请刷新页面

加载更多

下一页

zblog2.3版本的asp系统是否可以超越卢松松博客的流量[图]

最近访问zblog官网,发现zlbog-asp2.3版本已经进入测试阶段了,虽然正式版还没有发布,想必也不久了。那么作为aps纵横江湖十多年的今天,blog2.2版本应该已经成熟了,为什么还要发布这个2.3...

原创小博客 ⋅ 28分钟前 ⋅ 0

聊聊spring cloud的HystrixCircuitBreakerConfiguration

序 本文主要研究一下spring cloud的HystrixCircuitBreakerConfiguration HystrixCircuitBreakerConfiguration spring-cloud-netflix-core-2.0.0.RELEASE-sources.jar!/org/springframework/......

go4it ⋅ 52分钟前 ⋅ 0

二分查找

二分查找,也称折半查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于...

人觉非常君 ⋅ 今天 ⋅ 0

VS中使用X64汇编

需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地...

simpower ⋅ 今天 ⋅ 0

ThreadPoolExecutor

ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ......

4rnold ⋅ 昨天 ⋅ 0

Java正无穷大、负无穷大以及NaN

问题来源:用Java代码写了一个计算公式,包含除法和对数和取反,在页面上出现了-infinity,不知道这是什么问题,网上找答案才明白意思是负的无穷大。 思考:为什么会出现这种情况呢?这是哪里...

young_chen ⋅ 昨天 ⋅ 0

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

实验楼—MySQL基础课程-挑战3实验报告

按照文档要求创建数据库 sudo sercice mysql startwget http://labfile.oss.aliyuncs.com/courses/9/createdb2.sqlvim /home/shiyanlou/createdb2.sql#查看下数据库代码 代码创建了grade......

zhangjin7 ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部