Elasticsearch 生態&技術峯會 | 阿里雲 Elasticsearch 雲原生內核

本篇內容是阿里巴巴集團技術專家魏子珺帶來的阿里雲Elasticsearch雲原生內核
分享人:阿里巴巴集團技術專家魏子珺

關於阿里雲Elasticsearch雲原生內核,本文將通過三個部分展開介紹:

  • 阿里雲Elasticsearch內核概覽
  • 雲原生Elasticsearch定義
  • 阿里雲原生Elasticsearch實踐

一、阿里雲Elasticsearch內核概覽

(一)阿里雲ES的優勢

下面這個對比圖可以很好地說明阿里雲ES相比開源ES 的優勢。

先看內圈,開源ES針對通用硬件設施,而阿里雲ES內核則是針對阿里雲基礎設施深度定製的內核,可以最大地發揮阿里雲基礎設施的性能,以及成本方面的優勢。然後,看最外圈,開源ES內核爲了適應ES豐富的使用場景包括搜索,可觀察性等,無法做到功能和性能兼顧,而阿里雲ES內核依託於阿里雲ES的服務可以做很多場景化的優化和功能增強,在搜索和觀察性等方面會比自建的ES更有優勢。內核在中圈,向下運行在阿里雲基礎設施,向上依託於阿里雲ES服務。可以看到,阿里雲ES內核相比開源ES自建集羣,不論在成本、性能、穩定性和功能上都會更具優勢。

(二) 基於用戶需求的內核建設

用戶對阿里雲ES內核的需求,主要是以下三個方面:

1、簡單
存儲容量能夠不斷擴充,計算有足夠的彈性,用戶不需要操心資源的問題。

2、好用
開箱即用,不用進行一系列複雜的部署和配置,直接根據場景提供最優的配置即可,還要有豐富的檢索功能可以使用。

3、性價比
阿里雲ES做到價格足夠低,性能足夠好,足夠穩定。

結合上述的需求,我們從下面四個方面展開內核建設。

1、成本節約
第一,我們提供計算存儲分離的增強版ES,成本上節省了副本的開銷,保證足夠的彈性,可按需使用。第二,支持冷熱分離,成本更低地存儲介質。第三,Indexing Service,這是我們全新發布的產品,對寫多讀少的場景有很大的成本節約。第四,索引數據壓縮,我們新增的壓縮算法可以比默認的壓縮方式提升45%的壓縮率。

2、性能優化
第一,我們研發的ElasticBuild相比在線的寫入能有三倍的性能提升。第二,我們還研發了物理複製功能,從最早支持計算存儲分離到現在的支持通用版的ES,物理複製通過segment同步而不是request同步的方式,減少了副本的寫入開銷,所以有一個副本的情況下,寫入性能能有45%左右的性能提升,副本越多,提升越明顯。第三,bulk聚合插件,在協調節點聚合下載的數據,降低分佈式的長尾效應,在寫入吞吐高、分辨數多的場景寫入吞吐能有20%以上的性能提升。第四,時序查詢優化,針對range查詢,可以直接跳過不在range範圍內的segment,結合時序策略可以獲得更好的查詢性能提升。

3、穩定性提升
第一,我們研發了集羣限流插件,能夠實現索引,節點,集羣級別的讀寫限流,在關鍵時刻對指定的索引降級,將流量控制在合適的範圍內。第二,慢查詢隔離池的特性,它避免了異常查詢消耗資源過高導致集羣異常的問題。第三,協調節點流控插件,它集成了淘寶搜索核心的流控能力,針對分佈式環境中偶發節點異常導致的查詢抖動,能夠做到秒級切流,最大程度降低業務抖動概率,保證業務平穩地運行。第四,monitor插件,它採集了集羣多維度的指標,可以提供全方位的監控。

4、功能增強
第一,向量檢索插件,是基於阿里巴巴達摩院Proxima向量檢索庫實現,能夠幫助用戶快速地實現圖像搜索、視頻指紋採樣、人臉識別、語音識別等等場景的需求。第二,阿里NLP的分詞插件,它是基於阿里巴巴達摩院提供的阿里NLP的分詞技術,支持阿里內部包括淘寶搜索、優酷、口碑等業務,提供了近1G的海量詞庫。 第三,OSS的Snapshot插件,它支持使用阿里雲OSS的對象存儲來保存ES的Snapshot。 第四,場景化的推薦模板,可以針對不同的業務場景提供成本、性能的優化。

以上的這些特性都能在我們阿里雲ES官方文檔中看到,歡迎大家使用。

二、雲原生ES的定義

(一)雲原生Elasticsearch如何定義

首先看一下什麼是雲原生。阿里巴巴雲原生公衆號前段時間推出了一篇文章《什麼是真正的雲原生》,總結了雲原生的定義:第一,彈性、API自動化部署和運維;第二,服務化雲原生產品;第三,因雲而生的軟硬一體化架構。

上圖是雲原生架構的白皮書封面,這是由阿里雲二十位雲原生技術專家共同編寫,已經正式對外發布,歡迎大家閱讀。

那麼,什麼是雲原生ES?

  • ES的雲服務,開箱即用,能用API自動化部署和運維
  • 計算存儲分離,彈性可伸縮
  • 能充分利用雲基礎設施,網絡、存儲和算力等

以上三點就能對應最開始提到的三個圈: 服務,內核,和基礎設施,這樣纔是雲原生ES。

(二)雲原生 Elasticsearch如何設計

第一,它必須是計算存儲分離的架構,這樣才能提供更加彈性的計算能力和無限的存儲空間。第二,可以支持冷熱分離,冷熱的節點都要是計算存儲分離的架構。冷節點使用高性價比的對象存儲,相比熱節點可以有90%的成本節約。第三,Serverless的用戶真正關心的是索引的使用,而不是ES集羣的維護。Serverless讓用戶的關注點從集羣的維度可以下沉到索引維度。

(三)雲原生Elasticsearch內核挑戰

實現這樣的雲原生內核,挑戰是非常大的,主要的挑戰分爲下面三個方面:

1、熱節點的分佈式文件系統
第一,分佈式文件系統自身的穩定性保證,ES對Latency非常敏感,它提供性能和穩定性與本地盤相當的分佈式文件系統,這個挑戰本身就非常大。第二,ES在實現一寫多讀時,如何防止出現多寫的情況。ES數據是在內存,讀寫需要的內存狀態數據、數據是如何保持一致性的,這些都是很大的挑戰。

2、冷節點的對象存儲
對象存儲提供的是HTTP接口,所以需要去適配。另外,對象存儲的單次IO Latency非常高,所以只有在冷節點相對Latency不敏感的場景纔有機會使用。如何解決Latency最高的問題也是很有挑戰。最後是對象存儲無法使用到操作系統的pagecache和預讀能力,所以要用對象存儲,這些能力必須在ES側實現。

3、Serverless
最難解決的就是多租戶的共享和隔離的平衡問題,如果不同索引直接產生相互的影響,在雲上是不可接受的。如果不共享,就意味着資源無法充分利用。如何平衡共享和隔離的問題,這是Serverless最大的挑戰。 第二是體驗,基於索引的使用如何提供和雲原生ES一樣的體驗也是需要考慮的問題。 第三是資源監控,如何評估索引的使用資源也是一個挑戰。

三、阿里雲原生Elasticsearch實踐

1、計算存儲分離

計算存儲分離核心的訴求是彈性,它不只是像雲原生ES那樣支持動態的添加節點、自動Shard搬遷,而是徹底的彈性。對於ES來說,它的核心訴求是兩點:Shard秒級搬遷和Replication秒級增加。這樣才能解決熱點的問題,和高低峯快速的動態擴容的問題。如果擴縮容還要遷移Shard的數據,彈性是不夠的。徹底的彈性一定是Shard搬遷,Replication擴充,數據是不動的,只是調整DataNode對Shard的映射。要實現這樣的彈性,就必須做到計算存儲分離。

阿里雲對ES存儲分離內核的實現如下:

  • 數據存儲在分佈式文件系統上,由分佈式文件系統保證數據的可靠性
  • 同一個Shard的多個副本數據只保存一份
  • 一寫多讀的場景,這樣就不再依賴於ES自身的replication,可以減少寫入的開銷。
  • 索引擴Shard,無需複製數據,秒級增加只讀Shard
  • Shard搬遷無需遷移數據,秒級切換DataNode

核心技術之一:內存物理複製,實現replica的近實時訪問

Segment同步的實現細節:

圖中描述的是ES物理複製的狀態機,核心是爲了解決segment同步亂序的問題。通用的物理複製功能也是一樣的實現,主要區別在於計算存儲分離只需要複製實時生成的segment,對於後續產生的segment,強制提交commit,確保segment落盤,來防止大的segment進行復制。而通用的物理複製,外界的segment也是需要複製的,這種segment往往會比較大。所以這裏有一個關鍵的優化,爲了防止大segment複製導致的主從可見性差距過大,主shard在從shard複製完成後纔會打開最新的segment。

下圖介紹了物理複製保證數據一致性的方式。

核心是保證checkpoint的一致性,通過將主shard的checkpoint同步到從shard來實現。結合這張圖可以看下流程,當數據寫進來的時候,主shard會更新checkpoint,在第二步刷新segment時,第三步將segment複製到從shard時,會帶上checkpoint,第四步從shard會用這個checkpoint更新自己的local checkpoint來保證主從shard使用了相同的checkpoint,這樣就實現了數據一致性的保證。

核心技術之二:兩階段IO fence
核心要解決的問題是防止多寫。通過分佈式文件系統的管控側將異常節點加入黑名單,直接從根本上防止了異常節點的顯露。

上圖展示了整體的流程,在主Shard節點異常的時候,MasterNode 首先發現主Shard的異常,然後將主Shard所在的節點加入黑名單。第三步,這個節點切斷了IO的權限,徹底失去了寫的能力。第四步,master通知從Shard晉升成主Shard。第五步,從Shard晉升成主Shard後,就開始正常地讀寫數據。

我們的計算存儲分離的架構通過阿里雲增強版進行售賣。計算存儲分離除了彈性的特點外,由於一寫多讀的特點,在性能、成本上都有顯著的提升。我們測試了線上阿里雲增強版ES和原生ES在同樣規格配置的性能對比情況,從表格的最右一列紅色的標識可以看到,不論在translog同步還是異步的場景,一個副本的情況下,性能都有超過百分之百的提升,副本越多,性能提升越明顯。

總結一下計算存儲分離的特點:首先它是秒級彈性擴縮容;第二,由於不寫副本,所以寫入性能能有100%的提升;第三,由於多個副本存儲一份數據,所以存儲成本呈倍數降低。

計算存儲分離——熱節點
想要使用我們計算存儲分離的ES集羣,可以選擇圖中所示的日誌增強版,歡迎大家使用。

計算存儲分離——冷節點
熱節點通過分佈式文件系統實現了計算存儲的分離,冷節點也需要實現計算存儲分離才能實現彈性。冷節點這部分我們還在研發階段,所以這次分享給大家的是一些思考的內容。

冷節點的成本是第一要素,所以對象存儲成了首選。對象存儲相比分佈式文件系統和塊存儲等特點非常鮮明。劣勢,大都在挑戰中提及到,這些劣勢相比其他存儲,無論從易用性和性能上都無法跟分佈式文件系統和塊存儲相比,所以這些熱節點很難直接使用對象存儲。但是冷節點不同,冷節點核心考慮的是成本,因此它也有一些優勢。它的成本比SSD雲盤便宜近90%,可以真正的按需使用,不用預先準備存儲空間。另外可以提供12個9的可靠性,所以也可以不用存儲副本,這又是一半以上的成本節約。基於這些優勢,對象存儲成了最好的選擇。

如何最大減少它的劣勢帶來的影響,這要從ES的特點說起。ES在可觀察性、安全的方向上,冷熱數據明顯,日誌長期存在SSD上成本過高,所以可以考慮冷熱架構。第二,ES在search的時候很消耗CPU,因此可以利用計算時異步地扒取對象存儲的數據,減少IO等待的時間。第三點是冷數據基本上無寫入,所以對寫入性能要求也不高。以上的三點就是ES冷數據使用對象存儲的原因。

Indexing Service
Indexing service是我們即將重量級發佈的新產品,這是我們在serverless嘗試的一個產品,是針對寫入方面的性能優化。相比查詢的多樣性,寫入會相對簡潔明瞭。Indexing service,從功能方面,提供了寫入托管服務,滿足高併發持續數據寫入,降低了業務集羣的CPU開銷,它適用在日誌、監控、APM等時序場景,它解決的最大痛點是寫多讀少,而且很多時序場景下寫遠多與讀,業務需要消耗大量的節點資源來滿足寫入。Indexing service 可以極大的降低這部分場景的成本開銷。

Indexing service 有以下三個方面的特點:
1、完全兼容原生的 API
2、按量付費,按寫入吞吐和QPS實際需求付費
3、寫入能力可秒級快速彈性擴縮

下圖展示了Indexing service是如何實現的:

1、第一,請求轉發,請求發到用戶ES集羣,用戶使用雲原生API操作ES,ES內核會將開啓託管的索引寫入請求,轉發到Indexing Service。這裏可以展開再縮小,對於不再寫入的索引,用戶就可以取消協助託管,釋放存儲成本。Indexing service結合Data stream和over功能可以有非常好的用戶體驗,因爲新生成了索引後,老索引就不再寫入。我們在內核上做了優化,在生成新索引的時候就會自動取消託管。

2、第二步,在寫入 Indexing service 後,內部會經過分佈式的 QoS 模塊,進行寫入的流量控制,來阻止資源的過度消耗。

3、第三步,跨集羣的物理複製, Indexing Service 構建的索引是通過物理複製到用戶集羣的。

4、最後是 Indexing Service 內部會持續地運行原數據同步的 task ,實時地同步用戶集羣託管的索引 metadata。

Indexing Service將於2021年2月全新上線,實現ES在時序日誌場景的降本增效。 Index server 可以解決時序日誌數據高併發寫入瓶頸,優化集羣寫入計算資源成本,降低運維的複雜度。Indexing Service 無論從寫入性能,成本節約,還是彈性伸縮的能力方面都能帶來不一樣的體驗,大家可以敬請期待。

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章