高性能架构模式
1. 读写分离
集群模式下主机写,从机读,即通过复制将数据同步到从机。
读写分离可以使用代码封装或中间件封装
- 代码封装淘宝的tddl
- 中间件,mysql-proxy、mysql router、atlas
解决主从复制的延迟的几种方法
- 写操作后的读操作指定发给数据库主服务器
- 读从机失败后再读一次主机
- 关键业务读写操作全部指向主机,非关键业务采用读写分离
2. 分库分表
数据量大时,数据库会遇到瓶颈。此时读写性能下降,索引性能也会下降,备份和恢复时间较长。
分表
- 垂直分表
主子表,不常用,且字段较长的数据可以分表 - 水平分表
如历史表,如何切分子表,按照路由方式分- 范围路由,id在一段内,一般在100w-2000w间。缺点:分布不均
- hash路由,列值除法余数,优点分布均有。缺点:扩充新表麻烦,所有数据都要重新分布
- 配置路由,单独表配置用户和表的对应,灵活。缺点:每次查询均多查一次,如路由表太大则会遇到瓶颈
分库分表后出现的问题及解决
- join操作:因为不同库,无法使用
- 解决方案:可多次查询后合并
- count汇总:多次查询后相加,效率低
- 解决方案:可以做一个记录表,定时更新记录表里面的值,order by汇总后排序
- 分布式事务:多库同时保存的问题
- 解决方案:两阶段提交或三阶段提交
- 成本问题:可能涉及到服务器增加,导致成本上升
总结
高性能架构主线通过读写分离,分库分表进行解决