大家都知道分散式儲存 但是瞭解過分散式搜尋嗎

買賣虛擬貨幣

搜尋引擎(Search Engine)是指根據一定的策略、運用特定的計算機程式從網際網路上搜集資訊,在對資訊進行組織和處理後,為使用者提供檢索服務,將使用者檢索相關的資訊展示給使用者的系統。搜尋引擎包括全文索引、目錄索引、元搜尋引擎、垂直搜尋引擎、集合式搜尋引擎、門戶搜尋引擎與免費連結列表等。

搜尋引擎是網站建設中針對“使用者使用網站的便利性”所提供的必要功能,同時也是“研究網站使用者行為的一個有效工具”。高效的站內檢索可以讓使用者快速準確地找到目標資訊,從而更有效地促進產品/服務的銷售,而且透過對網站訪問者搜尋行為的深度分析,對於進一步制定更為有效的網路營銷策略具有重要價值。

要了解分散式搜尋引擎,先了解搜尋這個事兒吧,搜尋這個技術領域裡最入門級別的一個概念就是倒排索引。我們先簡單說一下倒排索引是個甚麼東西。

1、倒排索引是甚麼

假如說你現在不用搜尋引擎,單純使用資料庫來存放和搜尋一些資料,比如說放了一些論壇的帖子資料吧,那麼這個資料的格式大致如下:

很簡單吧,假設有一個id欄位標識每個帖子資料,然後title欄位是帖子的標題,content欄位是帖子的內容。那麼這個時候,比如我們要是用資料庫來進行搜尋包含“汽車”這個關鍵字的所有帖子,大致SQL如下:

咱們姑且不論這個資料庫層面也有支援全文檢索的一些特殊索引型別,或者資料庫層面是怎麼執行的,這個不是本文討論的重點,你就看看資料庫的資料格式以及搜尋的方式就好了。但是如果你透過搜尋引擎類的技術來存放帖子的內容,他是可以建立倒排索引的。就是說,你把上述的幾行資料放到搜尋引擎裡,這個倒排索引資料大致看起來如下:

所謂的倒排索引,就是把你的資料內容先分詞,每句話分成一個一個的關鍵詞,然後記錄好每個關鍵詞對應出現在了哪些id標識的資料裡。那麼你要搜尋包含“汽車”關鍵詞的帖子,直接掃描這個倒排索引,在倒排索引裡找到“汽車”這個關鍵詞對應的那些資料的id就好了。然後你可以從其他地方根據這幾個id找到對應的資料就可以了,這個就是倒排索引的資料格式以及搜尋的方式,上面這種利用倒排索引查詢資料的方式,也被稱之為全文檢索。 

2、分散式搜尋引擎理解

其實還是很簡單,假如說你現在要儲存1TB的資料,那麼放在一臺機器還是可以的。但是如果你要儲存超過10TB,100TB,甚至1000TB的資料呢?你用一臺機器放的下嗎?當然是放不下的了,你的機器磁碟空間是不夠的。大家看一下下面的圖:

所以這個時候,你就得用分散式搜尋引擎了,也就是要使用多臺機器來部署搜尋引擎叢集。比如說,假設你用Elasticsearch(後面簡寫為:ES)。現在你總共有3TB的資料,那麼你搞3臺機器,每臺機器上部署一個ES程序,管理那臺機器上的1TB資料就可以了。這樣不就可以把3TB的資料分散在3臺機器上來儲存了?這不就是索引資料的分散式儲存嗎?而且,你在搜尋資料的時候,不就可以利用3臺機器來對分散式儲存後的資料進行搜尋了?每臺機器上的ES程序不都可以對一部分資料搜尋?這不就是分散式的搜尋?是的,這就是所謂的分散式搜尋引擎:把大量的索引資料拆散成多塊,每臺機器放一部分,然後利用多臺機器對分散之後的資料進行搜尋,所有操作全部是分佈在多臺機器上進行,形成了完整的分散式的架構。同樣,我們來看下面的圖,直觀的感受一下。

3、shard的資料分片機制

那麼這個時候大家考慮一下,比如有一個index,專門存放論壇的帖子,現在論壇的帖子有1億,佔用了1T的磁碟空間,這個還好說。如果這個帖子有10億,100億,佔用了10TB、甚至100TB的磁碟空間呢?那這個index還能放到一臺機器上儲存嗎?肯定不行的。這個時候,必須得支援這個index的資料分散式儲存在多臺機器上,利用多臺機器的磁碟空間來承載這麼大的資料量。

而且,需要保證每臺機器上對這個index儲存的資料量不要太大,因為控制單臺機器上這個index的數量,可以保證他的搜尋效能更高。所以就引入一個新的概念:shard資料分片結構、每個index都可以指定建立多少個shard,每個shard就是一個資料分片,會負責儲存這個index的一部分資料。

比如說index裡有3億帖子,佔據3TB資料。然後這個index你設定了3個shard。那麼每個shard就可以包含一個1TB大小的資料分片,每個shard在叢集裡的一臺機器上,這樣就形成了利用3臺機器來分散式儲存一個index的資料的效果了。大家看下面的圖:

現在index裡的3TB資料分散式儲存在了3臺機器上,每臺機器上有一個shard,每個shard負責管理這個index的其中1TB資料的分片。而且,另外一個好處是,假設我們要對這個index的3TB資料執行一個搜尋,是不是可以傳送請求到3臺機器上去?3臺機器上的shard直接可以分散式的並行對一部分資料進行搜尋,起到一個分散式搜尋的效果,大幅度提升海量資料的搜尋效能和吞吐量。

4、Replica多副本資料冗餘機制

但是現在有一個問題,假如說3臺機器中的其中一臺宕機了,此時怎麼辦呢?是不是這個index的3TB資料的1/3就丟失了?因為上面有1TB的資料分片沒了。所以說,還需要為了實現高可用使用Replica多副本資料冗餘機制。在Elasticsearch裡,就是支援對每個index設定一個replica數量的,也就是每個shard對應的replica副本的數量。比如說你現在一個index有3個shard,你設定對每個shard做1個replica副本,那麼此時每個shard都會有一個replica shard。這個初始的shard就是primary shard,而且primary shard和replica shard是絕對不會放在一臺機器上的,避免一臺機器宕機直接一個shard的副本也同時丟失了。我們再來看下面的圖,感受一下:

在上述的replica機制下,每個primary shard都有一個replica shard在別的機器上,任何一臺機器宕機,都可以保證資料不會丟失,分散式搜尋引擎繼續可用。Elasticsearch預設支援每個index是5個primary shard,每個primary shard有1個replica shard為副本。

長期以來,集中式系統給我們的生活帶來了很多改變。它對我們的日常生活產生了影響,影響了我們如何閱讀新聞,我們可以搜尋到多少資訊,甚至可以影響我們訪問的內容。過去幾年,區塊鏈技術有了巨大的增長,給一直堅守它的人們帶來了希望。但是,壟斷使得那些持有他們的公司處於一種強勢地位。壟斷公司可以隨時改變政策,竊取使用者資料。更可怕的事情正在發生:喪失資料所有權。

IPSOU(interplanet Search)是基於IPFS協議的分散式儲存和區塊鏈技術的新型搜尋引擎,透過關注使用者隱私,分散化和搜尋效率來構建新的體驗。IPSOU允許使用者透過加密技術和智慧合約控制他們的個人資料.使用IPSOU可以享受無限制和不受審查的瀏覽,您可以透過該站點發出請求,您可以獲取IPFS資源並將其傳送回您的計算機和移動裝置。

在IPSOU上,使用者可以免費搜尋IPFS網路檔案,並使用IPFS和其他底層協議訪問內容,而不需要依賴於集中的服務(和伺服器),如谷歌或百度。使用者將再次擁有自己的資料,沒有廣告跟蹤,沒有針對性的廣告,也沒有隱私問題。IPSOU使用區塊鏈技術保護隱私。

集中式系統改變我們的生活,但我們對資料的所有權也在逐漸消減,分散式系統帶來的應用,會使我們在生活、工作更加隱私、安全、高效、可信。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;