iT邦幫忙

2023 iThome 鐵人賽

DAY 9
1

Cortex Logo

資訊處理流程 生成 收集 儲存 使用
Cortex

延續前篇關於 Prometheus Long Term Storage 的議題,本篇將重點介紹Cortex。Cortex 目前是 CNCF 的 Incubating Project,最初由當時服務於 Weaveworks 的現任 Grafana CTO Tom Wilkie 和 Prometheus 作者 Julius Volz 共同發起。該專案在 2016 年首度公開時,專案名稱為 Project Frankenstein;後來經過多次更名,終於在 2018 年由 Weaveworks 將其捐贈給 CNCF,並定名為Cortex

他主打的功能包括:

  1. 長期儲存:Cortex 會將數據先保存在 Block Storage 中,再上傳至 Object Storage 以實現長期存儲,支援的 Object Storage 服務有:AWS S3Google Cloud StorageAzure Blob StorageOpenStack Swift
  2. 快速查詢:資料會分散儲存在多台機器上,Cortex 透過並行處理和快取等方式,有效提升查詢速度。
  3. 單一資料源:Cortex 能將多個 Prometheus 的資料整合,讓使用者能透過單一資料源查詢所有 Prometheus 資料。
  4. 水平擴展:Cortex 可在多台機器上運行,並能透過增加機器來提升服務的吞吐量和儲存容量。

Cortex Pipeline

Weaveworks 是一家提供 Kubernetes 服務的公司,除了商業產品之外,也有許多開源專案,例如:

  1. Weave Net:Kubernetes 網路解決方案,能讓使用者在不同環境中建立網路,並透過 Weave Net 讓不同的環境的容器彼此能夠連線。
  2. Weave Scope:Kubernetes 監控方案,可以監控 Cluster 中的 Pod、Service、Node 等。

同時,Weaveworks 也是 GitOps 的大力推廣者。GitOps 是透過 Git 進行版本控制,以簡化和自動化部署和運營流程。這一理念是由 Weaveworks 共同創辦人和現任 CEO Alexis Richardson 提出的。值得一提的是,Alexis Richardson 在創立 Weaveworks 前,是 RabbitMQ 的主要開發者之一,這是一個現由 VMware 持有的 Message Queue 工具。

在 Weaveworks 首次公開 Frankenstein 的簡報中,最一開始便展示了「科學怪人」首版的書皮,上頭寫著「Frankenstein; or, The Modern Prometheus」。如果沒有特別留意,台灣讀者可能只會知道這本書叫作「Frankenstein」(法蘭肯斯坦)或是「科學怪人」,而不會注意到後面的副標題「or, The Modern Prometheus」。之所以會有這個副標提是因為 Frankenstein 的作者認為 Prometheus 實際是一個魔鬼而不是英雄,因為他將火帶給人類,從而引誘人類陷入食用肉食的惡習;而 Frankenstein 是書中的科學家主角(沒錯,Frankenstein 不是科學怪人的名字,在書中它甚至沒有名字),就像是現代的惡魔,透過屍體組合出一個可怕的怪物。撇除書名恐怖的寓意,從字面上看,可以讀作 Frankenstein 是新一代的 Prometheus,不得不佩服歐美人在為專案命名上的巧思。

Frankenstein 首版書皮
Frankenstein 首版書皮,圖片來源:Wiki

Concepts

高可用性(High Availability)與 Hash Ring

了確保 Cortex 具有高可用性,Cortex 預先會將資料複製到多台機器上。這樣當某台機器發生故障時,其他機器能夠立即接管,確保資料不會遺失。然而,資料不是隨機分散在多台機器上;為了確保資料平均分配和查詢效能,需要一個良好的分配策略。這時就需要使用 Consistent Hashing,這是一種複雜的演算法,用於確保資料均勻分配並能容忍節點的動態增減。

一般的 Consistent Hashing 有個問題,就是當增加或減少機器時,可能會導致大量的資料重新分配。因此,需要一種能減少資料移動的 Hashing 策略,這就是 Hash Ring 的作用。Hash Ring 是 Consistent Hashing 的一種實現方式,它能減少節點變更時的資料重新分配,進而維持查詢效能。

在 Cortex 中,Hash Ring 的資料是透過 Key-Value Store 儲存的,可選用的 Key-Value Store 包括:

  1. Consul
  2. Etcd
  3. Gossip 的 memberlist

在 Lab 的 multi-instance 範例中,需要額外建立的 Consul 就是用來儲存 Hash Ring 的資料。

Lab

範例程式碼:09-cortex

Quick Start

Single Cortex Instance

  1. 啟動所有服務

    docker-compose up -d
    
  2. 檢視服務

    1. Prometheus: http://localhost:9090
    2. Grafana: http://localhost:3000,登入帳號密碼為 admin/admin
      1. 點擊左上 Menu > Dashboards > Grafana Stats,即可看到透過 Provisioning 建立的 Dashboard
  3. 關閉所有服務

    docker-compose down
    

Multi Cortex Instances

  1. 啟動所有服務

    docker-compose up -d -f docker-compose.multi.yml
    
  2. 檢視服務

    1. Prometheus: http://localhost:9090
    2. Grafana: http://localhost:3000,登入帳號密碼為 admin/admin
      1. 點擊左上 Menu > Dashboards > Grafana Stats,即可看到透過 Provisioning 建立的 Dashboard
  3. 關閉所有服務

    docker-compose down -f docker-compose.multi.yml
    

Goals

  1. 建立 Cortex,供 Grafana 查詢與 Prometheus 寫入
    1. Single Instance: 使用 docker-compose.yml
    2. Multi Instances: 使用 docker-compose.multi.yml
      1. Multi Instances 需要額外的 Key-Value Store 同步多個 Cortex,這裡使用 Consul
  2. 建立 Prometheus 透過 remote write 的方式將資料寫入 Cortex
  3. Grafana 使用 Cortex 當作 Prometheus Data Source

小結

從架構設計的角度來看,Cortex 和 Mimir 有著許多相似之處,例如同樣使用了 Hash Ring 確保高可用性,主打的功能也大致相同。這主要是因為 Tom Wilkie 在 2018 年加入 Grafana Labs 之後,該公司便開始積極投入 Cortex 的開發,並將其大量應用於其他產品,例如 Grafana Loki 和 Grafana Tempo。然而,越來越多的軟體公司基於 Cortex 開發其產品,卻沒有對 Cortex 本身提供對等的貢獻,因此 Grafana Labs 決定依循 Cortex 的脈絡獨立發展全新的 Mimir。

總體來說,Cortex 是一個強大的長期儲存解決方案,並且擁有悠久的發展歷史。其高可用性、高可擴展性,以及多樣的儲存選項,使其成為許多人在長期儲存方案上的首選。即便缺乏 Grafana Labs 的大力支持,Cortex 在開源社群中還是保有一定的活躍度和廣泛的應用場景。

參考資料

  1. Project Frankenstein: A multitenant, horizontally scalable Prometheus as a service
  2. Alexis Richardson on Why GitOps is a Game Changer
  3. Guide To GitOps
  4. The History of GitOps
  5. Wiki: Frankenstein
  6. Consistent Hashing Algorithm: 應用情境、原理與實作範

上一篇
Mimir - 收羅萬象的智者
下一篇
Thanos - 統御 Prometheus 群集的霸者
系列文
時光之鏡:透視過去、現在與未來的 Observability30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言