一.問題描述
最近思考了下,在分布式系統的一致性方面,有幾個系統很有意思。
一致性包括讀寫兩方面。讀的一致性,和寫的一致性,在儲存系統中體現的不一樣。
因為在使用場景中,因為場景需要,各個分布式系統,實現的結果/支援的特性也不一樣。比如資料庫、訊息系統、快取、搜尋系統、檔案系統、註冊服務發現系統。這些系統因為要支援其對應的場景,實現的結果也不一樣。
二.舉例子
舉例子,就舉幾個有趣的例子。
1.consul的一致性讀和kafka的一致性寫。
很有趣,consul的讀,get 乙個key from consul cluster。 支援3種:
a.讀follow。client讀consul cluster中 乙個follow 結點就可以返回。
b.讀leader。從leader結點讀,能保證相對一致。(如果網路分割槽/選主期間/選主前期就不一致了)
c.讀所有結點。從所有node讀資料,都一致則返回給client。這個能保證強一致。
所以,consul 在讀一致上,刻意這麼做給client更多選擇。來做讀取速度、一致性、併發吞吐量 上 做權衡。
而kafka 的 publish msg(寫訊息)。正好與consul的讀類似。也可以分3種:
a.client publish msg 到 server cluster 的乙個結點,就返回。(如果topic 做了多個partition,以partition為單位對應broker)
b.寫成功m個節點。
c.寫成功all 個節點。
所以很有趣,consul 讀支援3種,kafka 寫支援3種。
2.rabbitmq 集群。
rabbitmq集群的有趣之處是:
a.生產msg 可以直接 publish到 leader or follow 結點。
b.消費 msg ,必須 要 從leader上消費。
c.如果出現網路分割槽,follow要被踢出cluster。
d.為了防止迴圈寫入,rmq 實現了 a->b->c->d->a 環形同步。
e.rabbitmq的消費msg,是強一致的。必須cluster中存活的node都消費完msg,才server response ack to client。
3.es和kafka 集群。
es和kafka 的特別之處是,在資料儲存上,支援資料分片。
a.es叫 shard,kafka叫partition。
b.es把乙個index 拆分成多個shard,乙個shard對應比如3個副本,乙個副本可以用1個節點,可以部署9個節點,打散分片和index。
c.kafka把乙個topic拆分成多個partition,乙個partition可以有3副本,個副本可以用1個節點,可以部署9個節點,打散分片和topic。
d.es可以對index按照時間再拆分/歸檔,比如jaeger的es索引,包含trace,span,就按天建index。
4.redis cluster 與consul 無中心化和有中心化
a.為了解決 集群的結點的狀態資訊,做資訊交換資料同步,都用gossip。無中心化。
b.而集群內,儲存資料/server層結點的資料同步,redis 用 非同步replication,consul用 raft。有中心化。
c.選主的邏輯都類似。得用gossip。依靠更多結點參與。以保證少數服從多數。極端例子就是,如果client不認可這個server為新主,但其他server認可這個node為新主,這樣就沒意義了,因為client連不上這個server,這個新主選出來就沒意義。
5.三層網路集群問題
這個在redis cluster, consul,特別是 client cluster -> proxy cluster -> server cluster 這種架構中存在。
a.client 之間,proxy 之間,server 之間,各自組成乙個集群網路。相當於3個集合 c-set, p-set, s-set
b.上面 c-set 和 p-set 之間要通訊,所以又組成乙個網路。 c-set----p-set
c.上面 p-set 和 s-set 之間要通訊,所以又組成乙個網路。 p-set----s-set
這就很複雜了,如果網路/集群狀態發生變化,如何選新leader,這要保證新leader被大多數結點認可。
6.資料複製
有的集群複製是序列,a->b->c ,有的是 a->
a.hdfs 和 rabbitmq 集群,就是 第一種。
b.mysql ,redis,kafka,zookeeper,consul ,es 就是第二種。
c.paxos比raft就更複雜了。
以上幾個問題,很有趣。
遺留個問題,redis cluster 的雙機房雙向同步,不改原始碼,不好做。
分布式系統 一致性模型
分布式系統中乙個重要的問題就是資料複製,資料複製一般是為了增強系統的可用性或提高效能。而實現資料複製的乙個主要難題就是保持各個副本的一致性。本文首先討論資料複製的場景中一致性模型如此重要的原因,然後討論一致性模型的含義,最後分析常用的一致性模型。資料複製主要的目的有兩個 可用性和效能。首先資料複製可...
分布式系統 一致性模型
原創 阿里云云棲社群 2019 03 13 13 00 00 分布式系統中乙個重要的問題就是資料複製,資料複製一般是為了增強系統的可用性或提高效能。而實現資料複製的乙個主要難題就是保持各個副本的一致性。本文首先討論資料複製的場景中一致性模型如此重要的原因,然後討論一致性模型的含義,最後分析常用的一致...
分布式系統一致性分類
找到了一篇比較詳細的介紹。詳細連線 大概內容 一致性的角度 以資料為中心的一致性模型 以客戶為中心的一致性模型 保證最低的序列化,以達到最好的效率。以資料為中心的一致性模型 一致性模型 嚴格一致性 因果一致性 順序一致性 fifo一致性 fifo 保證單程序的寫順序 同步變數的一致性 弱一致性 釋放...