20. 读写分离如何在业务中落地

2023-08-07  本文已影响0人  木叶苍蓝

读写分离是业务开发中常用的技术手段
本文讲的是在什么业务场景下需要读写分离,读写分离实现的机制
以及实际生产中应用读写分离要注意的问题

什么时候需要读写分离

互联网大部分业务场景都是读多写少的
为了不让数据库的读成为业务瓶颈,同时也为了保证写库的成功率,一般会采用读写分离的技术来保证
读写分离就是分离读库和写库操作
从 CRUD 的角度,主数据库处理新增,修改,删除等事务性操作,而从数据库处理 SELECT 查询操作

具体实现:

读写分离的实现是把访问的压力从主库转移到从库
特别在单机数据库无法支撑并发读写,并且业务请求大部分为读操作的情况下
如果业务特点是写多读少,比如一些需要动态更新的业务场景,应用读写分离就不合适了
由于 MySQL InnoDB 等关系型数据库对事务的支持,一般会选择更高性能的 NoSQL 等存储来实现

MySQL 主从复制技术——binlog 日志

MySQL InnoDB 引擎的主从复制,是通过二进制日志 binlog 来实现
除了数据查询语句 select 以外
binlog 日志记录了其他各类数据写入操作,包括 DDL 和 DML 语句
binlog 有三种格式:Statement,Row 及 Mixed

主从复制过程

20230808150142.jpg

读写分离要注意的问题

分布式系统通过主从复制实现读写分离
解决了读和写操作的性能瓶颈问题
但同时也增加了整体的复杂性

主从复制下的延时问题

主从复制过程会存在一个延时,当主库有数据写入之后,同时写入 binlog 日志文件中
然后从库通过 binlog 文件同步数据,由于需要额外执行日志同步和写入操作,这期间会有一定时间的延迟
在某些对一致性要求较高的业务场景中,这种主从导致的延迟会引起一些业务问题
比如订单支付,付款已经完成,主库数据更新了,从库还没有
这时候去从库读数据,会出现订单未支付的情况

解决主从同步延迟的问题的方法:

主从复制如何避免丢数据

假设在数据库主从同步时,主库宕机,并且数据还没有同步到从库
就会出现数据丢失和不一致的情况
MySQL 数据库主从复制有异步复制,半同步复制和全同步复制的方式

总结

本文分享了读写分离的业务场景,MySQL 的主从复制技术
包括 binlog 的应用,主从复制的延时问题,数据库同步的不同机制
读写分离只是分布式性能优化的一个手段,不是任务读性能瓶颈都需要使用读写分离
还可以进行分库分表,以及利用缓存,文件索引等 NoSQL 数据库来提高性能

上一篇下一篇

猜你喜欢

热点阅读