論文筆記:Dynamo: Amazon’s Highly Available Key-value Store (下)

BLSxiaopanlaile 2022-01-07 12:03:56 阅读数:311

dynamo amazon highly available key-value

Dynamo: Amazon’s Highly Available Key-value Store (下)

前言

這篇博文是上一篇博文的後續部分。重點大都在上篇中,為了完整性,這篇主要簡單收個尾。

六、Implementation

在這裏插入圖片描述

這個部分簡要介紹了一點實現的細節部分。說的是每個存儲結點主要包括三個主要的組件:

  1. 本地持久化存儲引擎(local persistence engine):dynamo允許上層的應用根據不同的存儲需求選擇不同的底層持久化引擎。paper中說到dynamo提供了BDB,mysql以及in-memory buffer(本質上來說這個應該算不上持久化引擎)這三種存儲引擎。
  2. 請求協調器(request coordinator ): 每一個讀或者寫請求都由一個Coordinator來協調完成。Coordinator會建立一個狀態機(按照我的理解就是一系列讀寫流程)來執行整個完整的讀(寫)操作。
  3. 成員及故障檢測器(membership and failure detection):這個部分paper中暫且沒有提到。


注:

  1. 具體的讀寫過程這裏就不說了,這裏簡單說點設計要點吧。在read的時候,Coordinator可能會執行read repair來給其它的副本提供丟失的數據;在write的時候,選取的coordinator並不一定是第一個,考慮到負載均衡的需要,coordinator有可能是perference list 中的任何一個。如果是先read後write的情况,系統會優先選取read操作時response最快的那個node結點。

七、Experiences & Lessons Learned

在這裏插入圖片描述

這一部分主要是介紹了設計dynamo的過程中的一些經驗。大概有以下幾點:

(1)、一般來說,在分布式系統中,性能(Performance)和持久性(Durability)是一對矛盾的特性。為了提供系統的持久性,一般會增加副本數,這樣的話,又會降低系統的性能(如果要保持一定的一致性,則必須要把相關的操作(讀或者寫)應用的更多的副本中去)。 這個時候就需要系統的使用者來進行trade-off 。 dynamo中給用戶提供了這種機制,使用者可以設定寫入的副本數,讀取的副本數, 即quorum機制。

(2)、對於數據partition來說,dynamo采用的是一致性hash算法。對於一致性hash算法中node選擇的虛擬節點問題(paper中稱作token),paper分析了三種不同的策略:

  1. T random tokens per node and partition by token value.
  2. T random tokens per node and equal sized partitions
  3. Q/S tokens per node, equal-sized partitions

這部分我也不是非常了解,以我的淺見來看, 策略2是過度策略,策略1和策略3的本質區別在於其是否把hash ring 分成相同大小的partition。前者采用簡單的隨機挑選策略,後者把整個ring分成Q個相等大小的range, 總共有S個node, 每個node 分配Q/S 個range; 後者的一個優點在於對於實現分割好的range,如果有node的加入或移除,不需要從相鄰的結點遍曆所有的data,只需要按照需求遍曆對應的range 就可以。

(3)、paper中說到的第三個learned point 就是數據什麼時候會產生不一致,即divergent version。 總的來說有兩個時候,一是在出現failure的時候(包括network partition,node failure 等); 二是在出現對同一個結點數據出現大規模並發寫的時候。

(4)、第四點講的是系統中的讀寫請求的路由問題。系統提供了兩種方案:一個是客戶端負責,另一個是由一個中間的load-balancer來負責。paper中的實驗錶明,前者的方案相對來說,效果更好些。

(5)、paper中第五點說明的是在系統中對於background tasks (比如說數據同步等)不應該過多的影響到正常的讀寫請求(foreground)。因此系統中設立了monitor, 用以檢測後臺任務的資源占用情况和正常請求的性能,並以此做出相應的feedback 處理。


注:influxdb內部實現的時候,好像也有類似的監控機制。

八、Conclusion

在這裏插入圖片描述

最後,稍微總結下。

對於dynamo系統來說,它是一個高可用的KV存儲系統。在整個系統的設計與實現中,有以下幾個要點:
(1)、為了保持系統的高可用,放弃了數據的强一致性,利用hinted-off 和anti-entropy(repica synchronization) 采用了最終一致性。

(2)、為了適應不同的應用需求(對於性能、持久化、一致性的不同要求),在實現具體的讀寫一致性的時候,使用了類似quorum的機制,給上層的開發者提供了(N,R,W)參數配置的能力。

(3)、采用了去中心化的結構,使用了gossip協議來“傳播” 系統的元數據信息(membership信息)。


參考

【1】、論文筆記-1:Dynamo: Amazon’s Highly Available Key-value Store
【2】、分布式存儲系統學習筆記(三)—分布式鍵值系統(1)—Amazon Dynamo

版权声明:本文为[BLSxiaopanlaile]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201071203554804.html