向量檢索版簡介
OpenSearch-向量檢索版是阿里巴巴自主研發的大規模分布式搜尋引擎,支援了淘寶、天貓、菜鳥、優酷乃至海外電商在內整個集團的搜尋業務,同時也支撐了阿里雲上的OpenSearch業務。OpenSearch-向量檢索版經過多年的發展,在滿足業務高可用、高時效性、低成本等需求的同時,也沉澱出一套自動化營運系統,使用它使用者可以根據自己的業務特點方便的構建自己的搜尋服務。
OpenSearch-向量檢索版架構
OpenSearch-向量檢索版主要有三部分構成,管控系統、線上系統、資料來源。線上系統載入索引,並提供向量檢索服務;資料來源用於配置使用者的全量資料匯入入口同時支援使用者的即時資料寫入;管控系統為使用者提供自動化營運服務,方便使用者建立叢集並對叢集進行各種營運操作。
系統架構
線上系統
在使用者視角中線上系統是按表維度進行劃分,使用者可以通過介面單獨查詢每張向量表的資料,也可以對每張表進行單獨管理,比如設定表欄位、設定向量索引,配置資料來源,控制每張表的即時資料並發等等。
後端的線上系統架構則是由查詢節點和資料節點群組成的多行多列的分布式架構:
查詢節點:它對輸入的查詢請求進行解析、校正或者改寫,並將解析之後的請求轉寄給資料節點執行,收集併合並資料節點返回的結果,加工之後返回給使用者。查詢節點是一個計算型節點,不載入使用者的資料,一般不需要太多的記憶體,但是當返回的文檔個數較多或者統計產出的條目過多時才會消耗大量記憶體。如果查詢節點的處理能力達到瓶頸,可以擴充查詢節點的備份數或者擴查詢節點的規格。
資料節點:資料節點載入使用者的索引資料並根據查詢檢索文檔、對文檔進行過濾、統計、排序等操作。資料節點上的索引是可以分區的,分區的含義是對分區欄位雜湊到[0,65535]之間,將這個區間分成指定的片數(構建索引時指定)。這樣對於資料量較大或者對查詢效能有要求的叢集,就可以通過分區提高單次請求的處理效能。如果想提高整個叢集的處理能力(比如從支援1000 qps提升到10000 qps)可以通過擴備份的方式進行。擴副本不是只擴一個Searcher節點,而是擴承載所有資料的多個Searcher節點(多個分區要做成完整的[0,65535]區間)。
表之間共用資料節點資源(CPU、記憶體、磁碟):
上圖中展示的就是兩張向量表,一個是4分區,一個是1分區,4分區的會根據產出的索引進行均分資料到每個分區中,而1分區的向量表則會形成廣播表在每個資料節點中儲存一份完整的向量表2的索引資料。
資料來源
使用者可通過配置資料來源將未經處理資料通過索引重建(全量)的方式,將索引重建後的索引資料匯入到線上系統的表中進行資料檢索,資料來源和表是一一對應的關係,目前系統支援的資料來源有MaxCompute、Saro、API,API是一個空的資料來源所有的資料需要使用者通過介面推送到線上系統的表中。
管控系統
管控系統是一個OpenSearch-向量檢索版執行個體的營運平台,這個平台大大節省了我們的營運成本。
資料同步流程
全量流程
OpenSearch-向量檢索版的索引是支援多版本的,每個索引版本都會基於一份未經處理資料來構建(API資料來源預設為空白資料),觸發一次索引重建就是全量流程。全量流程是一個非常駐任務,資料處理完成,產出一份全量索引,全量流程結束。產出的全量索引通過全量切換,切換到線上叢集提供檢索服務。
多索引版本的支援可以保證資料變更的穩定性,當索引結構變化或者資料結構發生變化時,通過全量產出新的索引是和老版本的索引完全隔離的,如果變更有問題可以及時復原。
全量索引的產出需要經過資料處理,索引構建,索引合并等流程,在各個階段可以通過設定索引處理的並發度提高全量索引的產出速度。
即時增量流程
全量索引產出後,每個全量版本都會有一個常駐的增量流程,而增量資料同步是通過資料更新節點完成的,
MaxCompute、OSS、API 的資料來源都是通過API的方式推送即時增量資料,通過API將增量資料推送到表中,由資料更新節點消費增量資料,最後由資料節點即時構建索引,供使用者查詢。
增量流程是一個常駐任務,每一個表的每一個全量都會對應一個增量流程,可以通過控制資料更新節點的個數來提高即時資料的處理能力。
向量檢索版特性
穩定
向量檢索版底層採用c++實現,經過十多年的發展,支撐了多個核心業務,非常穩定,非常適用於對穩定性要求較高的核心搜尋情境。
高效
OpenSearch-向量檢索版是一個分布式搜尋引擎,可以高效的支援海量資料的檢索,同時也支援資料的即時更新(秒級生效),非常適用於對查詢耗時敏感、時效性要求高的搜尋情境。
低成本
OpenSearch-向量檢索版支援多種索引壓縮策略,同時支援多值索引載入測試,能夠以較低的成本滿足使用者的查詢需求。