0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用Rust語言重寫的代碼搜索引擎黑鳥系統(tǒng)Blackbird正式啟用

jf_wN0SrCdH ? 來源:Rust語言中文社區(qū) ? 2023-05-11 09:52 ? 次閱讀

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

昨天GitHub官方發(fā)布消息,宣布其使用Rust語言重寫的代碼搜索引擎黑鳥系統(tǒng)Blackbird正式啟用。關(guān)于黑鳥系統(tǒng)的歷史和技術(shù),今天蟲蟲就給大家普及一下。

概述

黑鳥系統(tǒng)的目標(biāo)是實(shí)現(xiàn)開發(fā)人員快速搜索、導(dǎo)航和理解其代碼,將關(guān)鍵信息置于上下文中,并最終提高他們的工作效率。 為實(shí)現(xiàn)這一目標(biāo),需要實(shí)現(xiàn)以下功能:

首先,一個完全重新設(shè)計的搜索界面,帶有建議、補(bǔ)全以及對結(jié)果進(jìn)行切片和切塊的能力。

其次,需要完全從頭開始構(gòu)建了一個新的代碼搜索引擎。新的引擎需要非??欤ù蠹s是舊代碼搜索速度的兩倍),功能更強(qiáng)大(支持子字符串查詢、正則表達(dá)式和符號搜索),并且理解代碼,將最相關(guān)的結(jié)果放在排名最前面。

最后,要完全重新設(shè)計GitHub的代碼視圖,將搜索、瀏覽和代碼導(dǎo)航緊密集成。

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

Github代碼搜索歷史和問題

GitHub成立于2008年,最初使用Apache Solr來處理其代碼搜索。

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

在Solr被并入Lucene之后。 2013年Github團(tuán)隊(duì)使用Elasticsearch對其搜索進(jìn)行了改造,基于Elasticsearch創(chuàng)建了一個新的搜索服務(wù)。

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

隨后,基于Elasticsearch搜索服務(wù)屢次出現(xiàn)服務(wù)終端故障。

在探索了基于通用文本搜索產(chǎn)品來支持代碼搜索,GitHub發(fā)現(xiàn)基于現(xiàn)有產(chǎn)品搭建的系統(tǒng)用戶體驗(yàn)差,索引速度慢,托管成本高。

2020年GitHub內(nèi)部開始了一個新項(xiàng)目黑鳥系統(tǒng),用來解決搜索服務(wù)不穩(wěn)定的問題。

黑鳥架構(gòu)

黑鳥系統(tǒng)架構(gòu)圖如下:

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

黑鳥系統(tǒng)是基于Rust語言,從零開始構(gòu)建搜索引擎,專門用于代碼搜索領(lǐng)域。

黑鳥系統(tǒng)所要實(shí)現(xiàn)的用戶體驗(yàn)愿景:

能夠提出代碼問題并通過迭代搜索、瀏覽、導(dǎo)航和閱讀代碼獲得答案。

GitHub團(tuán)隊(duì)通過實(shí)踐意識到其代碼搜索與一般文本搜索有根本的區(qū)別。

首先、代碼已經(jīng)被設(shè)計成可以被機(jī)器理解,所以其內(nèi)部在結(jié)構(gòu)上、功能上和功能上下文上必然存在聯(lián)系性。

同時搜索代碼也有獨(dú)特的要求,需要搜索標(biāo)點(diǎn)符號(例如,句號或左括號);不能從查詢中刪除停用詞;另外,代碼搜索還需要支持正則表達(dá)式。

最后,GitHub的巨大倉庫規(guī)模是一個很大的挑戰(zhàn)。其基于Elasticsearch的搜索系統(tǒng),需要花費(fèi)數(shù)月的時間來索引當(dāng)時800萬倉庫的代碼。

目前GitHub倉庫數(shù)已經(jīng)超過了2億,而且還在持續(xù)增長中,這對搜索引擎來說是個巨大的挑戰(zhàn)。

目前GitHub可搜索庫有4500萬公開庫,代碼總量為115TB,還有155億的相關(guān)文檔。

千萬級代碼的索引

黑鳥系統(tǒng)所要解決的第一個問題是如何在合理的時間內(nèi)構(gòu)建對這4500萬代碼庫的代碼和文檔進(jìn)行索引。由Git的天然特性,其內(nèi)容可通過哈希尋址并且GitHub 上實(shí)際上有很多重復(fù)內(nèi)容,所以可行的策略是:

按Git blob對象ID進(jìn)行分片,git對象天然這提供了一種在分片之間均勻分布文檔同時避免任何重復(fù)的好方法。由于特殊的存儲庫,不會有任何熱服務(wù)器,可以根據(jù)需要輕松擴(kuò)展分片的數(shù)量。

將索引建模為樹并使用增量編碼來減少爬行量并優(yōu)化索引中的元數(shù)據(jù)。元數(shù)據(jù)就像文檔出現(xiàn)的位置列表(路徑、分支和存儲庫)和有關(guān)這些對象的信息(存儲庫名稱、所有者、可見性等)。 對于流行內(nèi)容,此數(shù)據(jù)可能非常大。

黑鳥還專門進(jìn)行了設(shè)計將查詢結(jié)果在提交級別的基礎(chǔ)上保持一致。

當(dāng)用戶從存儲庫范圍的查詢中獲取結(jié)果時,其他人可能正在對全局結(jié)果進(jìn)行分頁并查看不同于先前但仍然一致的索引狀態(tài)。使用其他搜索引擎很難做到這一點(diǎn)。黑鳥提供這種級別的查詢一致性作為其設(shè)計的核心部分。

查詢的生命周期

在實(shí)現(xiàn)了對代碼的索引后,系統(tǒng)跟蹤查詢就比較容易實(shí)現(xiàn)了。比如黑鳥系統(tǒng)查詢是符Rail組織用于查找Ruby編程語言編寫的代碼的正則表達(dá)式,格式為:

/arguments?/org:railslang:Ruby

查詢路徑的高級架構(gòu)圖:

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

在網(wǎng)站和分片之間是黑鳥查詢服務(wù)(BQS),它協(xié)調(diào)接受用戶查詢并將請求分散到搜索集群中的每個主機(jī)。黑鳥系統(tǒng)使用Redis來管理配額和緩存一些訪問控制數(shù)據(jù)。

前端接受用戶查詢并將其傳遞給BQS,查詢服務(wù)將查詢解析為抽象語法樹,然后重寫它,將諸如語言之類的東西解析為其規(guī)范的Linguist 語言ID,并在額外的條款上標(biāo)記權(quán)限和范圍。這樣,就可以看到重寫如何確保將從公共存儲庫或有權(quán)訪問的任何私有存儲庫中獲得結(jié)果。

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

接著查詢分成n個請求,并行請求到后端分片服務(wù):

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

BQS得到分片的結(jié)果后,聚合所有分片的結(jié)果,按分?jǐn)?shù)重新排序,過濾(雙重檢查權(quán)限),并返回前100列表。搜索前端仍然需要做語法高亮,term高亮、分頁,然后將渲染到頁面呈現(xiàn)給用戶。

來自各個分片的p99響應(yīng)時間大約為100ms,但由于聚合響應(yīng)、檢查權(quán)限和語法突出顯示等原因,總響應(yīng)時間會稍長一些。一個查詢占用索引服務(wù)器上的單CPU內(nèi)核100ms,GitHub 現(xiàn)有一臺64核主機(jī)大約每秒可以執(zhí)行640個查詢。性能非常強(qiáng)硬,而且由于天然地分布式分片,所以可以很方便實(shí)現(xiàn)水平擴(kuò)展,為同時用戶查詢和未來增長提供了充足的空間(多加分片服務(wù)器即可)。

總結(jié)

黑鳥代碼搜索系統(tǒng)是一個全新的基于Rust的高性能分布式代碼搜索系統(tǒng)。GitHub團(tuán)隊(duì)基于現(xiàn)有業(yè)務(wù)和問題的解決基礎(chǔ)積極探索重新開發(fā)出適合自己獨(dú)特業(yè)務(wù)、規(guī)模和需求的系統(tǒng)值得每一個軟件系統(tǒng)架構(gòu)師學(xué)習(xí)和借鑒。

當(dāng)然對于廣大的碼農(nóng)來說,以后在GitHub站搜代碼更方便和快捷,GitHub也對其新系統(tǒng)提供了豐富的文檔(docs.github /en/search-github)希望大家趕緊探索嘗試,找出一些好用的技巧來給大家分享。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4670

    瀏覽量

    67761
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    461

    瀏覽量

    16232
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    226

    瀏覽量

    6495

原文標(biāo)題:從Solr到Elasticsearch再到Blackbird,GitHub用Rust重寫代碼搜索引擎

文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    [分享]最強(qiáng)山寨版搜索引擎震驚世界-熊熊搜索

    日前,一款名為“熊熊搜索”(Bearsou.com)的搜索引擎引起了不少網(wǎng)友的關(guān)注,這個搜索引擎一眼看去和普通搜索引擎區(qū)別不大,但仔細(xì)一看,這款搜索
    發(fā)表于 11-22 18:58

    參加搜索引擎營銷SEM培訓(xùn)的好處?

    1. 可以快速學(xué)習(xí)搜索引擎營銷(SEM)投放策略、方法和技術(shù),避免在自己摸索中浪費(fèi)時間;2. 可以快速學(xué)習(xí)到搜索引擎營銷(SEM)最新優(yōu)化技術(shù),在頂尖SEM優(yōu)化公司指導(dǎo)下實(shí)實(shí)在在賺錢;3. 可以通過
    發(fā)表于 04-11 14:21

    詳解搜索引擎中的投票機(jī)制

    蘇七SEO解讀搜索引擎的投票機(jī)制
    發(fā)表于 04-11 14:03

    基于網(wǎng)格技術(shù)的并行搜索引擎

    研究現(xiàn)有網(wǎng)格技術(shù)和搜索技術(shù),分析并行搜索引擎的優(yōu)點(diǎn)和不足,提出基于網(wǎng)格技術(shù)的并行搜索引擎解決方案,其中包含一個3 層結(jié)構(gòu)的應(yīng)用框架和一個并行搜索引擎的應(yīng)用方案。
    發(fā)表于 03-30 10:09 ?23次下載

    教育網(wǎng)BBS搜索引擎設(shè)計與實(shí)現(xiàn)

    BBS 是教育網(wǎng)的一大特色,也是傳統(tǒng)搜索引擎搜索的盲點(diǎn),本文系統(tǒng)介紹了根據(jù)教育網(wǎng)BBS 的特點(diǎn)建立BBS 搜索引擎的關(guān)鍵技術(shù)和實(shí)現(xiàn)方法。關(guān)鍵詞:搜索
    發(fā)表于 06-17 11:28 ?14次下載

    主題搜索引擎的研究

    介紹了將開源的全文檢索工具包Lucene嵌入到自己的搜索引擎中來滿足開發(fā)主題搜索引擎的需求。并基于Lucene中文分詞的不足設(shè)計了一個比較完善的中文分詞器,然后將其引入具體應(yīng)
    發(fā)表于 07-05 16:30 ?11次下載

    網(wǎng)絡(luò)搜索引擎,網(wǎng)絡(luò)搜索引擎的工作原理

    網(wǎng)絡(luò)搜索引擎,網(wǎng)絡(luò)搜索引擎的工作原理 21 世紀(jì)是信息時代,隨著信息科學(xué)技術(shù)的不斷發(fā)展,網(wǎng)絡(luò)已成為人們生活中的重要組成部分,網(wǎng)上
    發(fā)表于 03-26 15:51 ?1412次閱讀

    基于JAVA技術(shù)的搜索引擎的研究與實(shí)現(xiàn)

    本文還利用Java技術(shù)對搜索引擎的三個核心部分即網(wǎng)絡(luò)蜘蛛、網(wǎng)頁索引、搜索進(jìn)行了實(shí)現(xiàn)。索引搜索部分借助Lucene全文
    發(fā)表于 05-07 14:14 ?35次下載
    基于JAVA技術(shù)的<b class='flag-5'>搜索引擎</b>的研究與實(shí)現(xiàn)

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

    垂直搜索引擎是針對某一個行業(yè)的專業(yè)搜索引擎,是搜索引擎的細(xì)分和延伸,是對網(wǎng)頁庫中的某類專門的信息進(jìn)行一次整合,定向分字段抽取出需要的數(shù)據(jù)進(jìn)行處理后再以某種形式返回給用戶。垂直搜索是相對
    發(fā)表于 01-04 17:19 ?7792次閱讀

    介紹五個具有高級功能的搜索引擎

    數(shù)據(jù)庫里存儲的大量的信息對標(biāo)準(zhǔn)的搜索引擎來說是不可見的,標(biāo)準(zhǔn)的搜索引擎只是索引網(wǎng)站上的內(nèi)容,從一個鏈接到另一個鏈接。 隱匿搜索引擎專門用來搜索
    的頭像 發(fā)表于 04-04 09:13 ?6991次閱讀

    蘋果自研的搜索引擎干的過谷歌嗎?

    據(jù)TNW報道,蘋果正在加快研發(fā)自己的搜索引擎,以取代谷歌。推出自己的搜索引擎,將有利于蘋果的產(chǎn)品服務(wù)的推廣,同時削弱谷歌在搜索領(lǐng)域的壟斷地位。
    的頭像 發(fā)表于 12-22 14:54 ?1863次閱讀

    基于蛻變測試的用戶搜索引擎性能分析

    定義相應(yīng)的蛻變關(guān)系,對其檢索能力和排序穩(wěn)定性進(jìn)行測試,并通過異常率和平均 Jaccard系數(shù)量化測試結(jié)果。分析結(jié)果表明在搜索引擎 Baidu、Bing和360中,Bing的異常率最低, Baidu的排序穩(wěn)定性最高,三者對于不同領(lǐng)域的關(guān)鍵詞搜索表現(xiàn)相差不大,但對于不同
    發(fā)表于 05-25 16:37 ?9次下載

    ChatGPT能否取代Google、百度等傳統(tǒng)搜索引擎

    ChatGPT并不是搜索引擎。它的目的不是提供信息搜索。相對于搜索引擎通過索引網(wǎng)頁并匹配搜索詞來提供信息,ChatGPT則是通過對自然
    的頭像 發(fā)表于 02-09 16:17 ?1051次閱讀

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

    前面寫到了程序?qū)S玫膙scode,今天再來介紹一款程序佬專用的搜索引擎——Linux命令搜索引擎。該引擎專用于搜索Linux下的各種命令,畢竟人的記憶力是有限的,當(dāng)你記不住某一個命令的
    的頭像 發(fā)表于 02-24 11:33 ?1012次閱讀
    NAS下搭建linux命令<b class='flag-5'>搜索引擎</b>教程

    一個基于GPT-4的代碼搜索引擎,開源了!

    于是,一個名為 Bloop 的代碼搜索引擎應(yīng)運(yùn)而生,它的存在,徹底打破了以往傳統(tǒng)的代碼搜索方式,采用基于 GPT-4 的 AI 智能模型,成功實(shí)現(xiàn)用自然
    的頭像 發(fā)表于 04-27 14:25 ?1203次閱讀
    一個基于GPT-4的<b class='flag-5'>代碼</b><b class='flag-5'>搜索引擎</b>,開源了!