技術(shù)文章:分布式系統(tǒng)模式之Consistent Core
維護(hù)較小的集群可提供更強(qiáng)的一致性,以允許大型數(shù)據(jù)集群協(xié)調(diào)服務(wù)器活動(dòng),而無需實(shí)現(xiàn)基于 quorum 的算法。
問題
線性化是最強(qiáng)的一致性保證,可以保證所有客戶端都能看到最新提交的數(shù)據(jù)更新。提供線性化以及容錯(cuò)功能需要在服務(wù)器上實(shí)現(xiàn)共識算法,例如 Raft,Zab 或Paxos。
盡管共識算法是實(shí)現(xiàn) Consistent Core 的基本要求,但客戶端交互的各個(gè)方面(例如客戶端如何找到leader,重復(fù)請求的處理方式等)都是重要的實(shí)現(xiàn)決策。關(guān)于安全性和活躍性,還有一些重要的實(shí)現(xiàn)注意事項(xiàng)。Paxos 僅定義共識算法,但是 Paxos 文獻(xiàn)中沒有很好地記錄其他實(shí)現(xiàn)方面的內(nèi)容。Raft非常清楚地記錄了各種實(shí)現(xiàn)方面以及參考實(shí)現(xiàn),因此是當(dāng)今使用最廣泛的算法。
當(dāng)集群需要處理大量數(shù)據(jù)時(shí),它需要越來越多的服務(wù)器。對于服務(wù)器集群,存在一些共同的要求,例如選擇特定的服務(wù)器作為特定任務(wù)的 master ,管理組成員信息,將數(shù)據(jù)分區(qū)映射到服務(wù)器等。這些要求需要強(qiáng)大的一致性保證,即線性化 。實(shí)現(xiàn)也必須是容錯(cuò)的。一種常見的方法是使用基于 Quorum 的容錯(cuò)共識算法。但是在基于 Quorum 的系統(tǒng)中,吞吐量會隨著集群的大小而降低。
解決方案
實(shí)現(xiàn)一個(gè)較小的3到5個(gè)節(jié)點(diǎn)的集群,該集群可提供線性化保證和容錯(cuò)能力。單獨(dú)的數(shù)據(jù)集群可以使用小型一致性集群來管理元數(shù)據(jù),并使用諸如 Lease 之類的機(jī)制來進(jìn)行集群范圍的決策。這樣,數(shù)據(jù)集群可以擴(kuò)展大量的服務(wù)器,但是仍然可以使用較小的元數(shù)據(jù)集群執(zhí)行某些需要強(qiáng)一致性保證的操作。
Figure 1: Consistent Core
一個(gè)典型的consistent core接口是這樣的:
public interface ConsistentCore {
CompletableFuture put(String key, String value);
List
Consistent Core至少提供了一種簡單的鍵值存儲機(jī)制。它用于存儲元數(shù)據(jù)。
元數(shù)據(jù)存儲
使用諸如Raft之類的共識算法來實(shí)現(xiàn)存儲。它是“Replicated Write Ahead Log”實(shí)現(xiàn)的示例,其中復(fù)制由Leader and Followers處理,High-Water Mark用于跟蹤通過Quorum進(jìn)行的成功復(fù)制。
支持分層存儲
Consistent Core通常用于存儲數(shù)據(jù),例如:組成員身份或跨服務(wù)器的任務(wù)分配。一種常見的使用模式是使用前綴來限制元數(shù)據(jù)的類型。例如 對于組成員身份,keys 將全部存儲為/servers/ 1,server/2等。對于分配給服務(wù)器的任務(wù),keys可以為/tasks/task1,/tasks/task2。通常使用特定前綴讀取所有鍵數(shù)據(jù)。例如,要獲取有關(guān)集群中所有服務(wù)器的信息,將讀取所有帶有前綴/servers 的 keys。
用法示例如下:
服務(wù)器可以通過使用前綴/servers 創(chuàng)建自己的 key 來向 Consistent Core 注冊自己。
client1.setValue("/servers/1", "{address:192.168.199.10, port:8000}");
client2.setValue("/servers/2", "{address:192.168.199.11, port:8000}");
client3.setValue("/servers/3", "{address:192.168.199.12, port:8000}");
然后,客戶端可以通過讀取key前綴 /servers 來了解集群中的所有服務(wù)器,如下所示:
assertEquals(client1.getValue("/servers"), Arrays.a(chǎn)sList("{address:192.168.199.12, port:8000}",
"{address:192.168.199.11, port:8000}",
"{address:192.168.199.10, port:8000}"));
由于數(shù)據(jù)存儲的這種分層性質(zhì),[zookeeper],[chubby]之類的產(chǎn)品提供了類似于接口的文件系統(tǒng),用戶可以在其中創(chuàng)建具有父節(jié)點(diǎn)和子節(jié)點(diǎn)概念的目錄、文件或節(jié)點(diǎn)。[etcd3]具有扁平化的鍵空間,可以獲取一系列鍵。
處理客戶端交互
Consistent Core功能的關(guān)鍵要求之一是客戶端如何與 Consistent Core 交互。以下方面對于客戶端使用 Consistent Core至關(guān)重要。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個(gè)字
最新活動(dòng)更多
推薦專題
- 1 腦機(jī)接口芯片,華為出了新專利!
- 2 今年諾獎(jiǎng)對人工智能的重視,給我們的基礎(chǔ)教育提了個(gè)醒
- 3 銀行業(yè)AI大模型,從入局到求變
- 4 巨頭搶布局,VC狂撒錢,為了能讓「AI讀心」這些公司卷瘋了
- 5 阿斯麥ASML:“骨折級”洋相,又成AI第一殺手?
- 6 蘋果市值創(chuàng)新高,iPhone 16能否助力突破4萬億美元大關(guān)?
- 7 一場“載入史冊”的發(fā)布會,讓馬斯克失去了4700億
- 8 百度谷歌比較研究2024:中美“遠(yuǎn)古AI龍頭”的現(xiàn)狀與趨勢
- 9 洞見AI風(fēng)潮 第二屆vivo藍(lán)河操作系統(tǒng)創(chuàng)新賽開啟招募
- 10 地平線開啟配售,阿里百度各砸5000萬美金,市值最高超500億
- 高級軟件工程師 廣東省/深圳市
- 自動(dòng)化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市