技术动态 | eBay开源分布式知识图谱存储Beam,支持类SPARQL查询
本文轉(zhuǎn)載自公眾號(hào):AI前線。
??
作者 | Diego Ongaro,Simon Fell 譯者 | 蓋磊 編輯 | Natalie AI 前線導(dǎo)讀:eBay 工程人員于 5 月 1 日在 官方技術(shù)博客 上發(fā)布了開(kāi)源的分布式知識(shí)圖譜存儲(chǔ) Beam,Beam 實(shí)現(xiàn)了事實(shí)數(shù)據(jù)的 RDF 存儲(chǔ),并支持類 SPARQL 查詢。
Beam 是一種分布式知識(shí)圖譜存儲(chǔ),以 Apache 2.0 開(kāi)源許可發(fā)布。Beam 歷經(jīng)四人年(person-year)的工程探索和開(kāi)發(fā),提供了大量值得關(guān)注的新特性!此博客文章將介紹 Beam 及其實(shí)現(xiàn),并闡述我們選擇開(kāi)源 Beam 的原因。
Beam 實(shí)現(xiàn)了分布式知識(shí)圖譜存儲(chǔ)Beam 是一種知識(shí)圖譜存儲(chǔ),也可稱為 RDF 存儲(chǔ)或三元組存儲(chǔ)。知識(shí)圖譜適合建模世界知識(shí)百科這樣通過(guò)復(fù)雜關(guān)系高度互聯(lián)的數(shù)據(jù)。例如,Wikidata 是一種以結(jié)構(gòu)化數(shù)據(jù)和關(guān)系表示維基百科的數(shù)據(jù)集,非常適合于知識(shí)圖譜表示。知識(shí)圖譜存儲(chǔ)支持對(duì)數(shù)據(jù)執(zhí)行多樣性查詢,提供實(shí)時(shí)數(shù)據(jù)接口、輔助機(jī)器學(xué)習(xí)應(yīng)用,以及基于現(xiàn)有知識(shí)理解非結(jié)構(gòu)化的新信息。
在知識(shí)圖譜中,數(shù)據(jù)以單一表模式表示事實(shí)。每個(gè)事實(shí)條目包括主體(Subject)、謂詞(Predicate)和客體(Object)三個(gè)元素。這種事實(shí)條目表示方式,支持存儲(chǔ)根據(jù)復(fù)雜查詢靈活組織數(shù)據(jù),并通過(guò)推理提高數(shù)據(jù)的抽象層級(jí)。下表列出了小部分知識(shí)圖譜的表示。
| <John_Scalzi> | <born> | <Fairfield> |
| <John_Scalzi> | <lives> | <Bradford> |
| <John_Scalzi> | <wrote> | <Old_Mans_War> |
Beam 使用類似于 RDF 的數(shù)據(jù)表示,并支持類 SPARQL 查詢語(yǔ)言。Beam 對(duì)數(shù)據(jù)表示和查詢支持的詳細(xì)信息,參見(jiàn)項(xiàng)目 GitHub 代碼庫(kù)提供的 docs/query.md。
Beam 實(shí)現(xiàn)為分布式存儲(chǔ),在設(shè)計(jì)上支持無(wú)法被單一服務(wù)器有效存儲(chǔ)的大規(guī)模圖。Beam 可通過(guò)水平擴(kuò)展支持高性能查詢和大規(guī)模數(shù)據(jù)集。雖然 Beam 的寫(xiě)入速度無(wú)法擴(kuò)展,但其部署通常可支持每秒數(shù)萬(wàn)次數(shù)據(jù)更改。我們已運(yùn)行由 20 臺(tái)服務(wù)器組成的 Beam 部署和離線用例近一年時(shí)間,通常情況下已加載了 25 億條事實(shí)數(shù)據(jù)。盡管我們并未對(duì) Beam 做壓力測(cè)試,但我們相信 Beam 的性能遠(yuǎn)超當(dāng)前的容量和規(guī)模。
Beam 的架構(gòu)Beam 的架構(gòu)如圖一所示,其架構(gòu)圍繞一種中心化日志構(gòu)建,圖中每個(gè)框圖表示了分布式網(wǎng)絡(luò)中的一個(gè)獨(dú)立進(jìn)程。中心化日志并非一個(gè)新概念,已在 Tango 等系統(tǒng)使用,但并未得到普遍重視。Beam 中,所有的寫(xiě)入請(qǐng)求排序?qū)懭胍粋€(gè)只添加的中心化日志。日志作為網(wǎng)絡(luò)服務(wù),在分布式系統(tǒng)內(nèi)部多次復(fù)制,實(shí)現(xiàn)容錯(cuò)和持久化。多個(gè)視圖服務(wù)器(view server)分別讀取日志,順序應(yīng)用其中的條目,并確定性地更新各服務(wù)器的本地狀態(tài)。因此,不同的視圖服務(wù)器維護(hù)著不同的狀態(tài)。API 層接收來(lái)自客戶的請(qǐng)求,將寫(xiě)入請(qǐng)求附加到日志中,并從視圖服務(wù)器獲取數(shù)據(jù)以響應(yīng)讀取請(qǐng)求。
圖一 Beam 的中心化日志架構(gòu)
中心化日志在本質(zhì)上存在一個(gè)瓶頸問(wèn)題,即日志附加的最大速率決定了整個(gè)數(shù)據(jù)集更新的最大速率。另一方面,中心化日志簡(jiǎn)化了很多特性的實(shí)現(xiàn),例如跨分區(qū)交易、一致性查詢和歷史全局快照、復(fù)制、數(shù)據(jù)遷移、集群成員管理、分區(qū)和數(shù)據(jù)集的多方式索引等。詳細(xì)信息,參見(jiàn)項(xiàng)目 GitHub 代碼庫(kù)提供的 docs/central_log_arch.md。
Beam 的詳細(xì)實(shí)現(xiàn)如圖二所示。其中,日志接口采用模塊化設(shè)計(jì)。Beam 當(dāng)前推薦使用 Apache Kafka 實(shí)現(xiàn)日志,支持新日志在確認(rèn)前持久化寫(xiě)入磁盤的配置。Beam 已提供了一種稱為“DiskView”的單視圖實(shí)現(xiàn)。DiskView 支持以兩種運(yùn)行模式,即分別根據(jù)知識(shí)圖譜事實(shí)條目的“主體 - 謂詞”和“謂詞 - 客體”組合構(gòu)建索引。典型的 Beam 部署將對(duì)每種模式各建立三個(gè)基于多劃分的副本。DiskViews 使用同樣支持模塊化的 RocksDB 存儲(chǔ)事實(shí)條目。API 服務(wù)器提供復(fù)雜的查詢處理器,我們將在下面詳細(xì)介紹。Beam 提供稱為事務(wù)計(jì)時(shí)器的輕量級(jí)進(jìn)程。在 API 服務(wù)器出現(xiàn)故障而導(dǎo)致事務(wù)處理緩慢時(shí),事務(wù)計(jì)時(shí)器將對(duì)事務(wù)做超時(shí)處理。
圖二 Beam 的詳細(xì)實(shí)現(xiàn)結(jié)構(gòu)圖
API 服務(wù)器提供了豐富的功能,難以用一個(gè)簡(jiǎn)單的框圖表示。API 服務(wù)器中實(shí)現(xiàn)了整個(gè)查詢處理器,如圖三所示。Beam 的查詢處理器實(shí)現(xiàn)了一種類似于 SPARQL 子集的查詢語(yǔ)言,語(yǔ)法類似于 SQL 語(yǔ)句,但適用于知識(shí)圖譜查詢。查詢處理器包括解析器、基于代價(jià)的查詢規(guī)劃器和并發(fā)執(zhí)行引擎。解析器將初始查詢語(yǔ)句解析為抽象語(yǔ)法樹(shù)(AST)。查詢規(guī)劃器為抽象語(yǔ)法樹(shù)添加數(shù)據(jù)統(tǒng)計(jì)信息,進(jìn)而給出高效的執(zhí)行計(jì)劃。查詢執(zhí)行引擎運(yùn)行執(zhí)行計(jì)劃,使用批處理和留處理方式實(shí)現(xiàn)高性能查詢。執(zhí)行引擎基于 View Client/RPC Fanout 模塊,從多個(gè)視圖服務(wù)器高效獲取數(shù)據(jù)。詳細(xì)信息,參見(jiàn)項(xiàng)目 GitHub 代碼庫(kù)提供的 docs/protobeam_v3.md。
圖三 Beam 的查詢處理器結(jié)構(gòu)
我們?yōu)槭裁催x擇開(kāi)源 Beam我們從 Beam 的實(shí)現(xiàn)中獲得了大量經(jīng)驗(yàn)教訓(xùn)。最初,我們從頭開(kāi)始構(gòu)建了一種 基于內(nèi)存的鍵值存儲(chǔ)(即 ProtoBeam 第一版),隨后迭代更新為 基于磁盤的屬性圖存儲(chǔ)(即 ProtoBeam 第二版),進(jìn)而實(shí)現(xiàn)了 知識(shí)圖譜存儲(chǔ) (即 ProtoBeam 第三版)。之后,我們將原型系統(tǒng)工程化實(shí)現(xiàn)可用于生產(chǎn)環(huán)境的代碼、完善文檔、開(kāi)展測(cè)試并審核代碼。在此過(guò)程中,我們?cè)诠こ躺献隽艘恍┯幸娴娜∩?#xff0c;撰寫(xiě)了大量詳細(xì)的階段性文檔,闡述了我們的考慮隨時(shí)間演進(jìn)的情況。總體情況和詳細(xì)信息,參見(jiàn)項(xiàng)目 GitHub 代碼庫(kù)提供的 docs/README.md。
盡管 Beam 項(xiàng)目已取得了很大進(jìn)展,但不幸的是我們無(wú)法繼續(xù)全職投入其中,難以獨(dú)力將其實(shí)現(xiàn)為我們希望看到的完備系統(tǒng)。我們?nèi)匀徽J(rèn)為,Beam 時(shí)一個(gè)非常值得關(guān)注的項(xiàng)目,具有很好的基礎(chǔ),可服務(wù)于他人:
盡管我們的目標(biāo)是實(shí)現(xiàn)可部署于生產(chǎn)環(huán)境中的 Beam,但許多用例不需要生產(chǎn)層級(jí)的服務(wù)。Beam 已可以很好地支持一些離線、非關(guān)鍵或研究型應(yīng)用。
Beam 可受益于他人的貢獻(xiàn)。我們很高興看到 Beam 項(xiàng)目由于他人的貢獻(xiàn)而繼續(xù)推進(jìn)。如考慮做出貢獻(xiàn),可詳覽 GitHub issues。
即便不考慮整體使用 Beam,該項(xiàng)目提供的許多內(nèi)部軟件包也可用于其它一些項(xiàng)目中,例如其中的 fanout 和 查詢規(guī)劃器 模塊。
最后一點(diǎn),Beam 也是一個(gè)非常適于他人從中學(xué)習(xí)的項(xiàng)目。它提供了很好的中心日志架構(gòu)參考,也是一個(gè)具有相當(dāng)規(guī)模的 Go 項(xiàng)目。
我們希望大家關(guān)注 Beam 項(xiàng)目,不吝指教。歡迎提出軟件缺陷、特性需求,并以 GitHub Issues(https://github.com/eBay/beam/issues) 方式提出問(wèn)題。
查看英文原文:
https://www.ebayinc.com/stories/blogs/tech/beam-a-distributed-knowledge-graph-store/
OpenKG
開(kāi)放知識(shí)圖譜(簡(jiǎn)稱 OpenKG)旨在促進(jìn)中文知識(shí)圖譜數(shù)據(jù)的開(kāi)放與互聯(lián),促進(jìn)知識(shí)圖譜和語(yǔ)義技術(shù)的普及和廣泛應(yīng)用。
點(diǎn)擊閱讀原文,進(jìn)入 OpenKG 博客
總結(jié)
以上是生活随笔為你收集整理的技术动态 | eBay开源分布式知识图谱存储Beam,支持类SPARQL查询的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 项目架构之传统三层架构和领域模型三层架构
- 下一篇: 手把手教你成为年薪60万的架构师