【翻译】github 搜索团队访谈

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介:

摘要: 这是一篇对 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
© 著作权归作者所有

文章转载自 开源中国社区 [http://www.oschina.net]

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
缓存 网络协议 Linux
百度搜索:蓝易云【解决github push/pull报错443】
通过以上方法,你有望解决GitHub push/pull报错443的问题。如果问题仍然存在,建议检查GitHub的状态页面,看是否有正在维护或故障的情况。
250 3
|
Java Spring
GitHub 上搜索开源项目技巧
GitHub 上搜索开源项目技巧
240 0
|
安全 网络安全 开发工具
百度搜索:蓝易云【git无法使用git协议clone github仓库问题解决方法】
通过尝试以上解决方法,你应该能够解决无法使用Git协议克隆GitHub仓库的问题。选择适合你网络环境和要求的方法,并根据需要进行相应的配置。
711 2
|
JSON JavaScript 前端开发
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
《进阶篇第7章》学习vue中的ajax之后,练习vue案例-github用户搜索案例
109 0
|
存储 JavaScript 前端开发
信息收集 -- GitHub搜索技巧(GitMiner)
信息收集 -- GitHub搜索技巧(GitMiner)
159 0
|
存储 搜索推荐 Java
开发者热议GitHub代码搜索政策,最佳搜索解决方案探索
近日,名为koepnick 的开发者因在一台老式电脑上使用GitHub 搜索自己的存储库代码,却没有手机等设备协助验证,导致无法登录GitHub 账户,发文怒斥GitHub:如若没有登录,就无法使用搜索代码服务,与其这样不如弃用。 其实,早在今年6月,GitHub 官方便发布了一封《代码搜索现在需要登录》的公告内容,官宣除了在 GitHub.com 上全局搜索代码已经需要用户登录的政策之后,自 6 月 7 日起,这一政策将其扩展为包括存储库范围的搜索。即要访问 GitHub 的新代码搜索和代码导航的全部功能,需要创建账户或登录 GitHub.com。
|
定位技术
github高级搜索技巧
github高级搜索技巧
170 0
|
缓存 Ubuntu 网络协议
百度搜索:蓝易云【ubuntu 系统解决GitHub无法访问问题】
如果上述步骤仍然无法解决GitHub无法访问的问题,可能是由于其他网络配置或设置问题引起的。您可以尝试咨询网络管理员或检查其他网络设置来进一步排除问题。
550 0
|
程序员 开发工具 数据安全/隐私保护
Git_Github_团队内协作
Git_Github_团队内协作
212 1
Git_Github_团队内协作
|
Shell 网络安全 开发工具
Git本地库和Github远程库推送、拉取和克隆操作指令及团队内协作和跨团队协作
介绍Git 本地库和 Github 远程库推送、拉取及克隆命令操作 详细模拟实现了团队内协作和跨团队协作
468 0

热门文章

最新文章