数据库架构

数据库架构设计思路

1.可用性
2.读性能
3.一致性
4.扩展性

单库:一个数据库
分片:解决数据量太大的问题,也就是通常说的“水平切分”
一旦引入分片,势必有“数据路由”的概念,哪个数据访问哪个库

路由规则通常分为3种:
1.范围:range
优点:简单,容易扩展
缺点:个库压力不均
2.哈希:hash
优点:简单,数据均衡,负载均衡
缺点:迁移麻烦
3.路由服务:router-config-server
优点:灵活性强,业务与路由算法解耦
缺点:每次访问数据库前多一次查询
大部分互联网公司采用的第二种方案:哈希分库,哈希路由

分组:解决可用性问题,通常通过主从复制的方式来实现

数据库架构设计思路

1.如何保证数据可用性
2.如何提高数据库读性能
3.如何保证一致性
4.如何提高扩展性

对于可用性

解决思路就是冗余
如何保证站点的可用性?复制站点,冗余站点
如何保证服务的可用性?复制服务,冗余服务
如何保证数据的可用性?复制数据,冗余数据

数据的冗余,会带来一个副作用,一致性问题

1.如何保证数据库“读”高可用?
冗余读库
主库只写,多个从库读
副作用:读写有延时

2.如何保证数据库“写”高可用?
冗余写库
采用双主互备的方式
副作用:双写同步,数据冲突(使用不同的初始值,步长为从库的数量)

还可以“双主当主从用”
仍然是双主,但只有一个主提供服务(读+写),另一个主是“shadow-master”,只用来保证高可用,平时不提供服务
优点:读写没有延时,读写高可用
缺点:不能通过加从库的方式扩展读性能,资源利用率50%,一台冗余主没有提供服务

如何扩展读性能

1.建立索引(不同库建立不同的索引)
2.增加从库(从库越多,同步越慢)
3.增加缓存

如何保证一致性

1.中间件(如果某一个key有写操作,在不一致的时间窗口内,中间件会将这个key的读操作也路由到主库上)
2.强制读主(指的是db与缓存间的不一致)
建议为所有cache中的数据设置一个超时时间

如何提高数据库的扩展性

1.扩展的话势必需要数据迁移

前提是采用“双主当主从用”
首先,加倍扩容
扩容步骤:
1.将主库(shadow-master)提升
2.修改配置,2库变4库(原来MOD2,现在MOD4)

收尾工作:
1.将旧的双主同步解除
2.增加新的双主(shadow-master)
3.删除多余的数据

猜你喜欢

转载自blog.csdn.net/qq_29842929/article/details/79674580
今日推荐