分布式系统,我们一般会采用计算和存储分离的架构来提高系统扩展的灵活性。而常见的存储架构主要有下面三种:
1. 共享存储(Shared Storage):
有一个分布式的存储集群,每个计算节点通过网络访问共享存储内容;
- 扩展性: 存储层扩展比较方便,但需要计算节点引入分布式协调机制保证数据一致性;
- 故障切换:计算节点故障直接切换到另外一个节点;
-
故障隔离性:单节点故障不会影响其他节点。
2. 存储分片(Shared Nothing):
每个计算节点自己挂载存储,一个节点只能处理一个分片的数据,各节点之间可以通信将数据汇总。
- 扩展性:扩展比较方便,但是需要计算和存储同时扩容;而且扩容后需要rebalance。
- 故障切换:节点failover需要等待数据加载完成才能提供服务;
-
故障隔离性:节点故障互不影响。
3. 存储计算分离(Storage Disaggreation):
存储和Shared Storeage一样共享一个分布式集群;计算和Shared Nothing一样进行分片,每个Shard只处理自己所在的分片。
- 一致性:计算层只需保证同一时刻只有一个计算节点保存数据。
- 扩展性:计算和存储可以分开扩展,不需要做rebalance;
- 故障恢复:计算节点故障,新节点可以直接从分布式存储拉取数据;