天天看點

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

開源最大的特征就是開放性,雲生态則讓開源技術更具開放性與創造性,Elastic 與阿裡雲的合作正是開源與雲生态共生共榮的典範。值此合作三周年之際,我們邀請業界資深人士相聚雲端,共話雲上Elasticsearch生态與技術的未來。
Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

本篇内容是阿裡巴巴集團技術專家魏子珺帶來的阿裡雲Elasticsearch雲原生核心

分享人:阿裡巴巴集團技術專家魏子珺

視訊位址:

https://developer.aliyun.com/live/246150

關于阿裡雲Elasticsearch雲原生核心,本文将通過三個部分展開介紹:

  • 阿裡雲Elasticsearch核心概覽
  • 雲原生Elasticsearch定義
  • 阿裡雲原生Elasticsearch實踐

一、阿裡雲Elasticsearch核心概覽

(一)阿裡雲ES的優勢

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

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

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

(二) 基于使用者需求的核心建設

使用者對阿裡雲ES核心的需求,主要是以下三個方面:

1、簡單

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

2、好用

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

3、成本效益

阿裡雲ES做到價格足夠低,性能足夠好,足夠穩定。

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

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

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自動化部署和運維;第二,服務化雲原生産品;第三,因雲而生的軟硬一體化架構。

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

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

那麼,什麼是雲原生ES?

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

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

(二)雲原生 Elasticsearch如何設計

Elasticsearch生态&技術峰會 | 阿裡雲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、計算存儲分離

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

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

阿裡雲對ES存儲分離核心的實作如下:

  • 資料存儲在分布式檔案系統上,由分布式檔案系統保證資料的可靠性
  • 同一個Shard的多個副本資料隻儲存一份
  • 一寫多讀的場景,這樣就不再依賴于ES自身的replication,可以減少寫入的開銷。
  • 索引擴Shard,無需複制資料,秒級增加隻讀Shard
  • Shard搬遷無需遷移資料,秒級切換DataNode

核心技術之一:記憶體實體複制,實作replica的近實時通路

Segment同步的實作細節:

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

圖中描述的是ES實體複制的狀态機,核心是為了解決segment同步亂序的問題。通用的實體複制功能也是一樣的實作,主要差別在于計算存儲分離隻需要複制實時生成的segment,對于後續産生的segment,強制送出commit,確定segment落盤,來防止大的segment進行複制。而通用的實體複制,外界的segment也是需要複制的,這種segment往往會比較大。是以這裡有一個關鍵的優化,為了防止大segment複制導緻的主從可見性差距過大,主shard在從shard複制完成後才會打開最新的segment。

下圖介紹了實體複制保證資料一緻性的方式。

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

核心是保證checkpoint的一緻性,通過将主shard的checkpoint同步到從shard來實作。結合這張圖可以看下流程,當資料寫進來的時候,主shard會更新checkpoint,在第二步重新整理segment時,第三步将segment複制到從shard時,會帶上checkpoint,第四步從shard會用這個checkpoint更新自己的local checkpoint來保證主從shard使用了相同的checkpoint,這樣就實作了資料一緻性的保證。

核心技術之二:兩階段IO fence

核心要解決的問題是防止多寫。通過分布式檔案系統的管控側将異常節點加入黑名單,直接從根本上防止了異常節點的顯露。

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

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

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

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

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

計算存儲分離——熱節點

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

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

計算存儲分離——冷節點

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

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

冷節點的成本是第一要素,是以對象存儲成了首選。對象存儲相比分布式檔案系統和塊存儲等特點非常鮮明。劣勢,大都在挑戰中提及到,這些劣勢相比其他存儲,無論從易用性和性能上都無法跟分布式檔案系統和塊存儲相比,是以這些熱節點很難直接使用對象存儲。但是冷節點不同,冷節點核心考慮的是成本,是以它也有一些優勢。它的成本比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是如何實作的:

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

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 無論從寫入性能,成本節約,還是彈性伸縮的能力方面都能帶來不一樣的體驗,大家可以敬請期待。

Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

阿裡雲Elastic Stack

】100%相容開源ES,獨有9大能力,提供免費 X-pack服務(單節點價值$6000)

相關活動

更多折扣活動,請

通路阿裡雲 Elasticsearch 官網 阿裡雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費 阿裡雲 Logstash 2核4G首月免費 下載下傳白皮書:Elasticsearch 八大經典場景應用
Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心
Elasticsearch生态&技術峰會 | 阿裡雲Elasticsearch雲原生核心

繼續閱讀