分布式数据库
1.数据分片
解决单表存储与访问压力,要应用中实现join
硬编码
只能用一种方式分片,对应用程序增加的复杂度,但伸缩性差
映射表外部存储
方案灵活,可以改变分片方式,但一次查找变成了两次查找,对应用程序增加了复杂读,伸缩性差
分布式数据库中间件MyCat
插件实现分片,对应用程序透明
Amoeba/Cobar架构
mycat的前身,支持服务器集群,系统组件如下
路由配置
集群伸缩方法
提前分12片(一开始规划好),存在三个服务器,加服务器后,先将每个服务器中的一个数据库通过主从复制到新服务器上,然后在将原来三个服务器迁移的数据库删除,这样不需要改变路由规则,只需要改变数据库的地址即可
数据库部署方案
单一服务与单一数据库
单一服务,主从复制实现数据库伸缩
两个web服务及两个数据库,业务分库
综合部署
2.NoSql
cap原理
一致性consistency、可用性availability、分区耐受性partition tolerance不可同时满足,当网络分区失效时,要么取消操作,数据一致但系统不可用,继续写入,数据一致性就得不到保证
解决数据库一致性:最终一致性
cassandra分布式解决方案
投票解决,三个节点,两个节点成功
hbase架构
分布式系统脑裂,此处zookeeper解决?
一个key对应一个HRegionServer,保证了数据的一致性,数据存储在HFile里,只能追加,HFile数据存储结构LogStructedMergeTree(LSM树),只写内存,一个树足够大的时候就合并,写数据非常快,读最新数据也快
acid/base
NoSql做不到acid,出现了base理论
原子性atomicity、一致性consistency、隔离性isolation、持久性durability
base
基本可用basically available 允许损失部分可用性
软状态soft state 允许不同的数据副本之间数据同步存在延迟
最终一致性 eventually consistent 数据最终保持一致
Doris案列
3.zookeeper
分布式系统脑裂
分布式中,不同服务器获得互相冲突的数据信息或指令,导致整个集群陷入混乱,数据损坏
分布式一致性算法paxos
三个角色proposer、acceptor、learner
zab协议
zookeeper对paxos算法进行了简化,使用了zab,角色leader、follower
树状记录结构
应用:配置管理、master选举、集群管理
临时节点做负载均衡
评论