分布式知识 -- 分布式数据存储
本文最后更新于:1 个月前
⚡系统评估标准
⚡CAP 原则
⚡BASE 理论
⚡数据组织方式
⚡数据存储层 (数据如何存储、查询)
-
分库分表
垂直、水平切分
-
路由机制
-
取模算法
按字段取模(对 hash 结果取余数 ( hash() mod N),N为数据库实例数或子表数量)是最为常见的一种切分方式。
缺点:
当某一台机器宕机,本应该落在该数据库的请求就无法得到正确的处理,这时宕掉的实例会被踢出集群,此时算法变成hash(userId) mod N-1,用户信息可能就不再在同一个库中了。
-
范围限定算法
按照 时间区间 或 ID区间 来切分
缺点:
由于连续分片可能存在数据热点,比如按时间字段分片,可能某一段时间内订单骤增,可能会被频繁的读写,而有些分片存储的历史数据,则很少被查询
-
-
难点:
-
连接查询
-
事务
-
-
分片
-
分片是将原本一张数据量较大的表 t_order 根据分片键,拆分生成数个表结构完全一致的小数据量表 t_order_0、t_order_1、···、t_order_n,每张表只存储原大表中的一部分数据,当执行一条SQL时会通过
分库策略
、分片策略
将数据分散到不同的数据库、表内。 -
分片算法
分片算法可以理解成一种路由规则。
-
分片策略只是一个概念,它由具体的分片算法和分片健组合而成,分片算法做具体的数据分片逻辑。
-
分片流程
SQL 解析 -> 执⾏器优化 -> SQL 路由 -> SQL 改写 -> SQL 执⾏ -> 结果归并
-
-
⚡数据缓存层
redis 三种模式
-
主从 master-slave
-
一主一从
-
一主多从
-
树状主从
-
-
哨兵 sentinel
-
集群 cluster
同步方式:
解决问题:
缺陷:
⚡缓存出现的问题
-
大量 null 值使缓存失效
解决:布隆过滤器
⚡事务
⚡强一致性
-
二段式提交
-
三段式提交
-
分布式锁
⚡弱一致性(最终一致性)
-
Paxos
-
Raft
提一句:分布式锁实际上是为了实线分布式进程同步使用的,和分布式事务本来关系不大,但是我们可以通过分布式锁完成分布式进程之间的通信进而实现分布式事务
⚡数据分布
-
hash 值对实例数量进行取模
虽然方便,但是存在实例数目增加或者减少的情况,不好
-
一致性 Hash 算法
⚡故障恢复
自动选举
本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 。转载请注明出处!