RM新时代网站-首页

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(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)以下功能:

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

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

最后,要完全重新設(shè)計(jì)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對(duì)其搜索進(jìn)行了改造,基于Elasticsearch創(chuàng)建了一個(gè)新的搜索服務(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)部開始了一個(gè)新項(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í)踐意識(shí)到其代碼搜索與一般文本搜索有根本的區(qū)別。

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

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

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

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

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

千萬級(jí)代碼的索引

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

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

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

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

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

查詢的生命周期

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

/arguments?/org:railslang:Ruby

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

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

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

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

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

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

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

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

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

總結(jié)

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

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

審核編輯 :李倩

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

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
  • GitHub
    +關(guān)注

    關(guān)注

    3

    文章

    468

    瀏覽量

    16427
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    228

    瀏覽量

    6601

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

    1. 可以快速學(xué)習(xí)搜索引擎營(yíng)銷(SEM)投放策略、方法和技術(shù),避免在自己摸索中浪費(fèi)時(shí)間;2. 可以快速學(xué)習(xí)到搜索引擎營(yíng)銷(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ù)的并行搜索引擎解決方案,其中包含一個(gè)3 層結(jié)構(gòu)的應(yīng)用框架和一個(gè)并行搜索引擎的應(yīng)用方案。
    發(fā)表于 03-30 10:09 ?23次下載

    教育網(wǎng)BBS搜索引擎設(shè)計(jì)與實(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è)計(jì)了一個(gè)比較完善的中文分詞器,然后將其引入具體應(yīng)
    發(fā)表于 07-05 16:30 ?11次下載

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

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

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

    本文還利用Java技術(shù)對(duì)搜索引擎的三個(gè)核心部分即網(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)

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

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

    介紹五個(gè)具有高級(jí)功能的搜索引擎

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

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

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

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

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

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

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

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

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

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

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