副本与分区
数据是企业最重要的资产。当数据量从 GB 级迈向 TB 级、当单机数据库开始出现性能瓶颈时,我们需要把数据分散到多个节点上——这就是副本与分区。
但分散数据不是简单的「把数据切成 N 份」。副本(Replication) 要解决的是数据高可用问题:一份数据在多个节点上保留副本,任意一个节点宕机不影响数据可用性。分区(Partitioning) 要解决的是水平扩展问题:把数据按某个维度(如用户 ID、订单 ID)分散到多个节点,单机存储不够就加节点。
Cassandra 这样的系统同时实现了副本和分区:副本保证了 durability(持久性),分区保证了 scalability(可扩展性)。但副本也带来了新问题:多个副本之间如何保持一致?当某个副本不可用时,写入的数据去哪了?读请求应该路由到哪个副本?
本模块将讲解主从复制、多主复制、无主复制三种副本模型,以及 Quorum、Hinted Handoff、反熵等保证数据最终一致性的机制。