京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展
数字化时代,数据库对任何企业而言都是其应用的核心资源。MySQL作为当前最流行的关系型数据库,虽然是开源软件,但是其简单易懂、易于部署管理,且具有ACID特性、强大的SQL查询等特点,被各种业务系统作为关键的核心存储。
随着业务量的发展和数据量的增长,单机版本的数据库很难满足业务需要,而MySQL最常见的性能扩展方法是“读写分离”,其本质是将访问压力分散到多个MySQL节点上,但存储压力并没有分散,“分库分表”可以分散访问和存储压力,但是实现难度维护成本都会大幅增加。
▲读写分离架构图▲
-
-
业界实现MySQL的“读写分离”有两种常见方法,_客户端实现和代理实现,_两种方法各有利弊,需要结合各自业务特点、系统架构、运维能力来选择实现。因为引入代理会使系统架构更加复杂,同时代理自身要考虑性能、高可用、稳定性等因素,中小公司一般使用客户端方法实现读写分离。而大公司有资源去投入数据库代理的开发和维护,当接入的业务越多,带来的价值就越明显。
首先说下客户端实现方法,例如java语言可以基于MyBatis和Hibernate简单封装后,即可实现读写分离,架构图如下:
代理实现方法,需要引入数据库代理,实现读写分离和数据库管理功能,代理兼容SQL协议,对于客户端来说代理就是数据库,架构图如下:
对比两种架构的优缺点:
无论哪种架构,实现逻辑并不复杂,但是有一个细节需要特别注意:_MySQL主从复制延迟。_
MySQL的复制是异步的,尽管针对不同延迟的原因有响应的优化方案,但是延迟是客观存在的,是不可能百分百避免的。当只读出现较大延迟的时候,就会出现数据不一致,读到的数据是主库提交前的,称之为“过期读”,这时业务上可能就会出现问题。常见的解决方法有:
京东智联云RDS-MySQL支持“读写分离代理”功能,创建只读实例后,开启读写分离代理,就可以在程序中配置读写代理的地址,由读写代理实现读请求被自动转发到只读实例,写请求被自动转发到主实例。目前MySQL5.6-8.0,Percona和Mariadb都支持开启只读代理。详细介绍信息见:https://docs.jdcloud.com/cn/r...
下面从该功能的数据面和控制面来介绍下基本原理和最佳实践。
用户在创建读写分离代理的时候会配置只读库延迟、健康检查、负载均衡策略等参数,根据用户业务特点,实现读写分离功能。
京东智联云“读写分离代理”创建界面如下:
最佳实践:只读实例延迟阈值根据业务特点配置,默认时间是100s,强烈建议该值_大于_检查时间间隔时间。
通过RDS控制台,可以管理“读写分离代理”的整个生命周期,包括创建、修改配置、删除和开启公网访问。除此之外,“读写分离代理”还可以感知转发MySQL实例的高可用切换、修改配置流程、只读实例的创建和删除。
“读写分离代理”虽然会在客户端与数据库之间引入代理转发请求,会有性能损耗,但是后端是有多个只读节点响应请求,京东智联云的只读实例数据量最大是8个,所以在用户业务读请求很大的情况下,使用“读写分离代理”是提升性能的最佳方法。
通过上述内容,想必大家已经对MySQL是如何用读写分离的方法保障高性能扩展有了初步了解,如果还想进一步体验MySQL 服务,请点击_【阅读原文】_链接体验试用。
以上是 京东智联云MySQL读写分离最佳实践 ,轻松搞定数据库高性能扩展 的全部内容, 来源链接: utcz.com/a/43957.html