有趣的幾個分布式系統一致性特性

2021-10-23 11:10:38 字數 2591 閱讀 3786

一.問題描述

最近思考了下,在分布式系統的一致性方面,有幾個系統很有意思。

一致性包括讀寫兩方面。讀的一致性,和寫的一致性,在儲存系統中體現的不一樣。

因為在使用場景中,因為場景需要,各個分布式系統,實現的結果/支援的特性也不一樣。比如資料庫、訊息系統、快取、搜尋系統、檔案系統、註冊服務發現系統。這些系統因為要支援其對應的場景,實現的結果也不一樣。

二.舉例子

舉例子,就舉幾個有趣的例子。

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 保證單程序的寫順序 同步變數的一致性 弱一致性 釋放...