資訊處理流程 | 生成 | 收集 | 儲存 | 使用 |
---|---|---|---|---|
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。
他主打的功能包括:
Weaveworks 是一家提供 Kubernetes 服務的公司,除了商業產品之外,也有許多開源專案,例如:
同時,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 首版書皮,圖片來源:Wiki
了確保 Cortex 具有高可用性,Cortex 預先會將資料複製到多台機器上。這樣當某台機器發生故障時,其他機器能夠立即接管,確保資料不會遺失。然而,資料不是隨機分散在多台機器上;為了確保資料平均分配和查詢效能,需要一個良好的分配策略。這時就需要使用 Consistent Hashing,這是一種複雜的演算法,用於確保資料均勻分配並能容忍節點的動態增減。
一般的 Consistent Hashing 有個問題,就是當增加或減少機器時,可能會導致大量的資料重新分配。因此,需要一種能減少資料移動的 Hashing 策略,這就是 Hash Ring 的作用。Hash Ring 是 Consistent Hashing 的一種實現方式,它能減少節點變更時的資料重新分配,進而維持查詢效能。
在 Cortex 中,Hash Ring 的資料是透過 Key-Value Store 儲存的,可選用的 Key-Value Store 包括:
在 Lab 的 multi-instance 範例中,需要額外建立的 Consul 就是用來儲存 Hash Ring 的資料。
範例程式碼:09-cortex
啟動所有服務
docker-compose up -d
檢視服務
admin/admin
關閉所有服務
docker-compose down
啟動所有服務
docker-compose up -d -f docker-compose.multi.yml
檢視服務
admin/admin
關閉所有服務
docker-compose down -f docker-compose.multi.yml
從架構設計的角度來看,Cortex 和 Mimir 有著許多相似之處,例如同樣使用了 Hash Ring 確保高可用性,主打的功能也大致相同。這主要是因為 Tom Wilkie 在 2018 年加入 Grafana Labs 之後,該公司便開始積極投入 Cortex 的開發,並將其大量應用於其他產品,例如 Grafana Loki 和 Grafana Tempo。然而,越來越多的軟體公司基於 Cortex 開發其產品,卻沒有對 Cortex 本身提供對等的貢獻,因此 Grafana Labs 決定依循 Cortex 的脈絡獨立發展全新的 Mimir。
總體來說,Cortex 是一個強大的長期儲存解決方案,並且擁有悠久的發展歷史。其高可用性、高可擴展性,以及多樣的儲存選項,使其成為許多人在長期儲存方案上的首選。即便缺乏 Grafana Labs 的大力支持,Cortex 在開源社群中還是保有一定的活躍度和廣泛的應用場景。