Cassandra (6) Consistency Levels and Replication Strategies

很久很久以前我們建 KEYSPACE 的時候指定了 class 和 replication_factor。

CREATE KEYSPACE redsox WITH replication = {
  'class': 'SimpleStrategy', 
  'replication_factor': 1 
};

其中 class 指的是 Replication Strategies。 而 replication_factor 和 Consistency Levels 有關。

1. Consistency Levels:

Cassandra 在 CAP 理論裡是屬於 AP 型的,但 Cassandra 讀寫具有可調一致性。

以寫入來說系統最少會達到要求的一致性,一旦達到要求的一致性寫入就視為成功,而其他寫入會在背景持續進行。

常用的一致性設定如下:

  1. ONE, TWO and THREE: 用數字設定一致性
  2. QUORUM:用 replication factor 設定一致性,等於 replication factor / 2 + 1
  3. ALL: 所有 replicas 的 responce

replication factor 代表你希望的資料副本數量,consistency level 則是讀寫成功與否的標準。

在 cqlsh 裡可以用 CONSISTENCY 查詢 consistency level:

cqlsh> CONSISTENCY ;
Current consistency level is ONE.

在 scala app 中可以這樣設定 consistency level:

val queryOptions = new QueryOptions()
queryOptions.setConsistencyLevel(ConsistencyLevel.QUORUM)

val cluster = Cluster.builder().
                withQueryOptions(queryOptions).
                addContactPoint("192.168.0.128").
                build()

2. Replication Strategies:

複製策略依照能否跨 DC 分成 SimpleStrategy 和 NetworkTopologyStrategy 兩種。


3. SimpleStrategy:

SimpleStrategy 會將資料放在同 DC 不同節點中。



4. NetworkTopologyStrategy:

NetworkTopologyStrategy 會跨 DC 分散資料,總副本量等於每個 DC 的複製因子加總。



Reference:

[1] Cassandra: The Definitive Guide(2nd Edition), Jeff Carpenter and Eben Hewitt, O’Reilly Media(2016)

留言

熱門文章