摘要
亞馬遜平臺,基于成百上千萬,分布于世界各地的服務器和網(wǎng)絡組件,為眾多網(wǎng)站提供服務。
本文呈現(xiàn)了Dynamo的設計與實現(xiàn),亞馬遜部分核心業(yè)務所使用的高度可用的實時在線鍵值存儲系統(tǒng)。在特定的場景下犧牲了一定的一致性來維護可用性,對對象版本,沖突解決做了拓展,為開發(fā)者提供了新式的接口。
引言
Amazon:
高度去中心化,松散耦合(聯(lián)系緊密卻獨立),面向服務的架構。
Dynamo:
1.綜合多種知名技術來實現(xiàn)可拓展性和可用性;
2.保證最終一致性。
背景
現(xiàn)有的復制架構技術,過于局限,且太重視一致性,而導致可用性不高。
滿足ACID性質的,可用性都不高。Dynamo不提供任何分離保證,且只允許單鍵更新。?
Dynamo:
1.增量式拓展性
單次可以加入一臺主機(節(jié)點)。
2.對稱性
每個節(jié)點上的職責是一致的。
3.去中心化的
更偏向于點對點的去中心化技術。
4.異質性
可以根據(jù)機器的能力,分配相應比例的工作負載。
相關工作
P2P系統(tǒng)
- Freenet,Gnutella,P2P文件分享系統(tǒng)。
- Pastry,Chord,使用特定的路由機制,確保查詢可以在一定的條數(shù)內(nèi)得到回應。
- Oceanstore,提供在分布式數(shù)據(jù)上支持序列化更新,全局事務持久性存儲服務。
分布式文件系統(tǒng)/數(shù)據(jù)庫
- Ficus,Coda,犧牲了一致性來提高可用性。
- Farsite,通過復制架構來完成高度可用性和可拓展性。
- Google File System(GFS),單一中心服務器,多分支服務器分割存儲。
- Bayou,分布式關系型數(shù)據(jù)庫,支持無網(wǎng)操作,保證最終一致。
Dynamo:
支持無網(wǎng)狀態(tài)下讀寫操作,高速讀寫,使用多種沖突解決機制,維護最終一致性,基于可靠網(wǎng)絡環(huán)境設計。
架構
分布式架構要處理的問題:
負載均衡
錯誤檢測
錯誤恢復
架構同步
過載處理
狀態(tài)轉換
并發(fā)控制
工作計劃
請求編組
請求路由
系統(tǒng)監(jiān)測與警報
配置管理
身份信息
本文專注于Dynamo的核心技術,如下表所示Partioning
?Consistent Hashing
?Incremental Scalability
?High Availability for writes
?Vector clocks with reconciliation during reads
?Version size is decoupled from update rates
?Handling temporary failures
?Sloppy Quorum and hinted handoff
?Provides high availability and durability guarantee when some of the replicas are not available.
?Recovering from permanent failures
?Anti-entropy using Merkle trees
?Synchronizes divergent replicas in the background.
?Membership and failure detection
?Gossip-based membership protocol and failure detection.
?Preserves symmetry and avoids having a centralized registry for storing membership and node liveness information.
系統(tǒng)接口
get(key),返回內(nèi)容,及與內(nèi)容沖突矛盾的對象。
put(key,context,object),根據(jù)key確定確認對象寫入位置,再將副本寫到磁盤上。
分配算法
一致性哈希,分配到一個首尾相接的環(huán)空間上。一個節(jié)點對應環(huán)上多個位置節(jié)點。
一對多好處:
1.如果節(jié)點故障,可以將工作均派給相同節(jié)點。
2.新加入節(jié)點,可以從其他節(jié)點中獲取工作內(nèi)容。
3.滿足了異質性。
復制架構
每個數(shù)據(jù)對象在多個站點上備份。
數(shù)據(jù)版本
Dynamo保證最終一致性,故而更新操作可以同時傳播到全部站點。