0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用Rust语言重写的代码搜索引擎黑鸟系统Blackbird正式启用

jf_wN0SrCdH 来源:Rust语言中文社区 2023-05-11 09:52 次阅读

f407b17a-ef67-11ed-90ce-dac502259ad0.png

昨天GitHub官方发布消息,宣布其使用Rust语言重写的代码搜索引擎黑鸟系统Blackbird正式启用。关于黑鸟系统的历史和技术,今天虫虫就给大家普及一下。

概述

黑鸟系统的目标是实现开发人员快速搜索、导航和理解其代码,将关键信息置于上下文中,并最终提高他们的工作效率。 为实现这一目标,需要实现以下功能:

首先,一个完全重新设计的搜索界面,带有建议、补全以及对结果进行切片和切块的能力。

其次,需要完全从头开始构建了一个新的代码搜索引擎。新的引擎需要非常快(大约是旧代码搜索速度的两倍),功能更强大(支持子字符串查询、正则表达式和符号搜索),并且理解代码,将最相关的结果放在排名最前面。

最后,要完全重新设计GitHub的代码视图,将搜索、浏览和代码导航紧密集成。

f4412aae-ef67-11ed-90ce-dac502259ad0.png

Github代码搜索历史和问题

GitHub成立于2008年,最初使用Apache Solr来处理其代码搜索。

f47400be-ef67-11ed-90ce-dac502259ad0.png

在Solr被并入Lucene之后。 2013年Github团队使用Elasticsearch对其搜索进行了改造,基于Elasticsearch创建了一个新的搜索服务。

f4be7608-ef67-11ed-90ce-dac502259ad0.jpg

随后,基于Elasticsearch搜索服务屡次出现服务终端故障。

在探索了基于通用文本搜索产品来支持代码搜索,GitHub发现基于现有产品搭建的系统用户体验差,索引速度慢,托管成本高。

2020年GitHub内部开始了一个新项目黑鸟系统,用来解决搜索服务不稳定的问题。

黑鸟架构

黑鸟系统架构图如下:

f4e1469c-ef67-11ed-90ce-dac502259ad0.png

黑鸟系统是基于Rust语言,从零开始构建搜索引擎,专门用于代码搜索领域。

黑鸟系统所要实现的用户体验愿景:

能够提出代码问题并通过迭代搜索、浏览、导航和阅读代码获得答案。

GitHub团队通过实践意识到其代码搜索与一般文本搜索有根本的区别。

首先、代码已经被设计成可以被机器理解,所以其内部在结构上、功能上和功能上下文上必然存在联系性。

同时搜索代码也有独特的要求,需要搜索标点符号(例如,句号或左括号);不能从查询中删除停用词;另外,代码搜索还需要支持正则表达式。

最后,GitHub的巨大仓库规模是一个很大的挑战。其基于Elasticsearch的搜索系统,需要花费数月的时间来索引当时800万仓库的代码。

目前GitHub仓库数已经超过了2亿,而且还在持续增长中,这对搜索引擎来说是个巨大的挑战。

目前GitHub可搜索库有4500万公开库,代码总量为115TB,还有155亿的相关文档。

千万级代码的索引

黑鸟系统所要解决的第一个问题是如何在合理的时间内构建对这4500万代码库的代码和文档进行索引。由Git的天然特性,其内容可通过哈希寻址并且GitHub 上实际上有很多重复内容,所以可行的策略是:

按Git blob对象ID进行分片,git对象天然这提供了一种在分片之间均匀分布文档同时避免任何重复的好方法。由于特殊的存储库,不会有任何热服务器,可以根据需要轻松扩展分片的数量。

将索引建模为树并使用增量编码来减少爬行量并优化索引中的元数据。元数据就像文档出现的位置列表(路径、分支和存储库)和有关这些对象的信息(存储库名称、所有者、可见性等)。 对于流行内容,此数据可能非常大。

黑鸟还专门进行了设计将查询结果在提交级别的基础上保持一致。

当用户从存储库范围的查询中获取结果时,其他人可能正在对全局结果进行分页并查看不同于先前但仍然一致的索引状态。使用其他搜索引擎很难做到这一点。黑鸟提供这种级别的查询一致性作为其设计的核心部分。

查询的生命周期

在实现了对代码的索引后,系统跟踪查询就比较容易实现了。比如黑鸟系统查询是符Rail组织用于查找Ruby编程语言编写的代码的正则表达式,格式为:

/arguments?/org:railslang:Ruby

查询路径的高级架构图:

f509840e-ef67-11ed-90ce-dac502259ad0.png

在网站和分片之间是黑鸟查询服务(BQS),它协调接受用户查询并将请求分散到搜索集群中的每个主机。黑鸟系统使用Redis来管理配额和缓存一些访问控制数据。

前端接受用户查询并将其传递给BQS,查询服务将查询解析为抽象语法树,然后重写它,将诸如语言之类的东西解析为其规范的Linguist 语言ID,并在额外的条款上标记权限和范围。这样,就可以看到重写如何确保将从公共存储库或有权访问的任何私有存储库中获得结果。

f5392682-ef67-11ed-90ce-dac502259ad0.jpg

接着查询分成n个请求,并行请求到后端分片服务:

f540d346-ef67-11ed-90ce-dac502259ad0.jpg

BQS得到分片的结果后,聚合所有分片的结果,按分数重新排序,过滤(双重检查权限),并返回前100列表。搜索前端仍然需要做语法高亮,term高亮、分页,然后将渲染到页面呈现给用户。

来自各个分片的p99响应时间大约为100ms,但由于聚合响应、检查权限和语法突出显示等原因,总响应时间会稍长一些。一个查询占用索引服务器上的单CPU内核100ms,GitHub 现有一台64核主机大约每秒可以执行640个查询。性能非常强硬,而且由于天然地分布式分片,所以可以很方便实现水平扩展,为同时用户查询和未来增长提供了充足的空间(多加分片服务器即可)。

总结

黑鸟代码搜索系统是一个全新的基于Rust的高性能分布式代码搜索系统。GitHub团队基于现有业务和问题的解决基础积极探索重新开发出适合自己独特业务、规模和需求的系统值得每一个软件系统架构师学习和借鉴。

当然对于广大的码农来说,以后在GitHub站搜代码更方便和快捷,GitHub也对其新系统提供了丰富的文档(docs.github /en/search-github)希望大家赶紧探索尝试,找出一些好用的技巧来给大家分享。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4640

    浏览量

    67636
  • GitHub
    +关注

    关注

    3

    文章

    461

    浏览量

    16171
  • Rust
    +关注

    关注

    1

    文章

    226

    浏览量

    6481

原文标题:从Solr到Elasticsearch再到Blackbird,GitHub用Rust重写代码搜索引擎

文章出处:【微信号:Rust语言中文社区,微信公众号:Rust语言中文社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [分享]最强山寨版搜索引擎震惊世界-熊熊搜索

    日前,一款名为“熊熊 搜索”(Bearsou.com)的 搜索引擎引起了不少网友的关注,这个 搜索引擎一眼看去和普通 搜索引擎区别不大,但仔细一看,这款 搜索
    发表于11-22 18:58

    参加搜索引擎营销SEM培训的好处?

    1. 可以快速学习 搜索引擎营销(SEM)投放策略、方法和技术,避免在自己摸索中浪费时间;2. 可以快速学习到 搜索引擎营销(SEM)最新优化技术,在顶尖SEM优化公司指导下实实在在赚钱;3. 可以通过
    发表于04-11 14:21

    详解搜索引擎中的投票机制

    苏七SEO解读 搜索引擎的投票机制
    发表于04-11 14:03

    基于网格技术的并行搜索引擎

    研究现有网格技术和 搜索技术,分析并行 搜索引擎的优点和不足,提出基于网格技术的并行 搜索引擎解决方案,其中包含一个3 层结构的应用框架和一个并行 搜索引擎的应用方案。
    发表于03-30 10:09 23次下载

    教育网BBS搜索引擎设计与实现

    BBS 是教育网的一大特色,也是传统 搜索引擎 搜索的盲点,本文 系统介绍了根据教育网BBS 的特点建立BBS 搜索引擎的关键技术和实现方法。关键词: 搜索
    发表于06-17 11:28 14次下载

    主题搜索引擎的研究

    介绍了将开源的全文检索工具包Lucene嵌入到自己的 搜索引擎中来满足开发主题 搜索引擎的需求。并基于Lucene中文分词的不足设计了一个比较完善的中文分词器,然后将其引入具体应
    发表于07-05 16:30 11次下载

    网络搜索引擎,网络搜索引擎的工作原理

    网络 搜索引擎,网络 搜索引擎的工作原理 21 世纪是信息时代,随着信息科学技术的不断发展,网络已成为人们生活中的重要组成部分,网上
    发表于03-26 15:51 1406次阅读

    基于JAVA技术的搜索引擎的研究与实现

    本文还利用Java技术对 搜索引擎的三个核心部分即网络蜘蛛、网页 索引搜索进行了实现。 索引搜索部分借助Lucene全文
    发表于05-07 14:14 35次下载
    基于JAVA技术的<b class='flag-5'>搜索引擎</b>的研究与实现

    垂直搜索引擎是什么_垂直搜索引擎有哪些

    垂直 搜索引擎是针对某一个行业的专业 搜索引擎,是 搜索引擎的细分和延伸,是对网页库中的某类专门的信息进行一次整合,定向分字段抽取出需要的数据进行处理后再以某种形式返回给用户。垂直 搜索是相对
    发表于01-04 17:19 7769次阅读

    介绍五个具有高级功能的搜索引擎

    数据库里存储的大量的信息对标准的 搜索引擎来说是不可见的,标准的 搜索引擎只是 索引网站上的内容,从一个链接到另一个链接。 隐匿 搜索引擎专门用来 搜索
    的头像 发表于04-04 09:13 6951次阅读

    苹果自研的搜索引擎干的过谷歌吗?

    据TNW报道,苹果正在加快研发自己的 搜索引擎,以取代谷歌。推出自己的 搜索引擎,将有利于苹果的产品服务的推广,同时削弱谷歌在 搜索领域的垄断地位。
    的头像 发表于12-22 14:54 1844次阅读

    基于蜕变测试的用户搜索引擎性能分析

    定义相应的蜕变关系,对其检索能力和排序稳定性进行测试,并通过异常率和平均 Jaccard系数量化测试结果。分析结果表明在 搜索引擎Baidu、Bing和360中,Bing的异常率最低, Baidu的排序稳定性最高,三者对于不同领域的关键词 搜索表现相差不大,但对于不同
    发表于05-25 16:37 9次下载

    ChatGPT能否取代Google、百度等传统搜索引擎

    ChatGPT并不是 搜索引擎。它的目的不是提供信息 搜索。相对于 搜索引擎通过 索引网页并匹配 搜索词来提供信息,ChatGPT则是通过对自然
    的头像 发表于02-09 16:17 1037次阅读

    NAS下搭建linux命令搜索引擎教程

    前面写到了程序专用的vscode,今天再来介绍一款程序佬专用的 搜索引擎——Linux命令 搜索引擎。该 引擎专用于 搜索Linux下的各种命令,毕竟人的记忆力是有限的,当你记不住某一个命令的
    的头像 发表于02-24 11:33 985次阅读
    NAS下搭建linux命令<b class='flag-5'>搜索引擎</b>教程

    一个基于GPT-4的代码搜索引擎,开源了!

    于是,一个名为 Bloop 的 代码 搜索引擎应运而生,它的存在,彻底打破了以往传统的 代码 搜索方式,采用基于 GPT-4 的 AI 智能模型,成功实现用自然
    的头像 发表于04-27 14:25 1147次阅读
    一个基于GPT-4的<b class='flag-5'>代码</b><b class='flag-5'>搜索引擎</b>,开源了!