1. 概述
对于分布式系统,人们首先对现实中的分布式系统进行高层抽象,然后做出各种假设,发展了诸如CAP, FLP 等理论,提出了很多一致性模型,Paxos 是其中最璀璨的明珠。我们对分布式系统的时序,复制模式,一致性等基础理论特别关注。
在共识算法的基础上衍生了选举算法,并且为分布式事务提供了部分的支持。本文从常见的几种分布式存储系统看看实践中的分布式系统设计细节。理论结合实际,能更好地帮助我们加深理解。
2.分片
先来看看分片的定义:
The word “Shard” means “a small part of a whole“. Hence Sharding means dividing a larger part into smaller parts. In DBMS, Sharding is a type of DataBase partitioning in which a large database is divided or partitioned into smaller data and different nodes
分片是分布式存储系统绕不开的话题,分片提供了更大的数据容量,能够提升读写效率,提升数据可用性。
分布式存储系统
分片
备注
elasticsearch
每个index 进行分片,即 shard
shard计算,shard = hash(routing) % number_of_primary_shards
kafka
每个topic分析分片,即 partition
根据key来选择partition,也可以根据自定义partition算法实现 同一的user发送到同一 的partition
redis-cluster
对所有数据进行分片,hash slot 16384(2^14)
hash tags 确保数据分配到同一个slot:{123}:profile and user:{123}:account
3.复制
复制提升了数据的可靠性,复制分片还可以用来做read。在分布式系统重,有两种复制模式:
分布式存储系统
复制
备注
elasticsearch
primary 复制数据到 in-sync copies,同步复制
kafka
主分片复制数据到 ISR (in sync replica)
producer 可以配置 acks 和 min.insync.replicas 来调整一致性
redis-cluster
采用redis 的复制机制,异步复制
redis对性能非常敏感,所以采用的都是异步复制
4.一致性
不同的复制策略带来了不同的一致性,常见的一致性有
根据Ryan Barrett在Google I/O 2009 - Transactions Across Datacenters中的定义,elasticsearch/kafka/redis-cluster 都采用了 primary-backup model,primary-backup model 的特点是最终一致性,但是具体细节有所不同。
分布式存储系统
写入一致性
NWR 模型
备注
elasticsearch
最终一致性 (较强)
w(all write) , r(1)
需要refresh 到文件系统缓存才可见,flush操作到磁盘
kafka
最终一致性 (可调)
w(ack writes) , r(1)
ack = 0 最弱,ack = all 最强
redis-cluster
最终一致性 (较弱)
w(1) , r(1)
5.选举算法
选举算法的基础是共识算法,paxos是其中最璀璨的明珠,paxos在共识算法中的地位可以用这样表述:
Either Paxos, or Paxos with cruft, or broken
paxos 最早应用于google 的 Chubby (lock manager),zk是 Chubby的开源版本。
分布式存储系统
选举算法
备注
elasticsearch
bully/类raft
bully算法比较简单,谁大就选谁
kafka
zookeeper(zab)/kraft(raft)
redis-cluster
类raft
6.事务支持
存储系统中,事务是非常重要一部分,我们来看看各类组件是否支持分布式事务,以及他们是如何实现的:
分布式存储系统
事务支持
备注
elasticsearch
不支持
kafka
支持事务,基于2PC
redis-cluster
不支持跨节点的事物,支持单节点的事物
使用multi/exec/watch 来实现
7.总结
本文从分布式系统的几个方面探讨了elasticsearch,kafka,redis-cluster的细节,他们有很多共性,但是在许多方面也有很多不同。鉴于笔者对分布式系统的研究还不是很深入,如果错误,请指正。
8.参考
https://book.mixu.net/distsys/single-page.html
https://www.youtube.com/watch?v=srOgpXECblk
https://snarfed.org/transactions_across_datacenters_io.html
http://harry.me/blog/2014/12/27/neat-algorithms-paxos/
https://ramcloud.atlassian.net/wiki/download/attachments/6586375/raft.pdf
手机扫一扫
移动阅读更方便
你可能感兴趣的文章