

# 背景及方案

## 背景

数据显示，关系型数据库在OLTP业务下96.87%都在等待读I/O，而处理器计算仅仅占了5.3%，这说明要提高数据库的QPS性能，关键的一点是提高系统的IO能力。

另一个数据表明， 大多数业务对数据库的访问，是读大于写。 典型的如电商、O2O、互联网金融等业务，读写比例可以达到 5:1 甚至 10:1 。

提高IO能力的方法， 除了升级硬件， 提升单个节点的磁盘I/O能力之外， 还有一个重要的方法是读写分离。 可以部署一主多从的主从复制集群，
进而将读请求分发给多个数据库节点并行处理。考虑到大部分业务对数据库的访问以读居多， 读写分离能够给数据库性能带来明显的增益。

首先，多个节点并行读取，能够提供几倍于单个节点的磁盘数据读取能力；

第二，由于将读请求分摊到多个节点， 单个节点的I/O也得以减轻， I/O等待时间得以减小。

最终，整个系统的I/O能力得到有效提升。

对于OLAP业务而言， 由于需要涉及大量的内存存储和计算， CPU和内存可能成为瓶颈，读写分离也具有一定的意义。
通过将数据分析请求分流到多个节点，可以让不同的数据分析操作，在多个节点并行地执行，
节点之间互不干扰， 充分发挥并行处理的优势。

## 方案

UDB目前已提供完整的读写分离方案，具体做法如下：

1、在UDB控制台上， 创建好1个主库多个从库。

2、在UDB控制台上进入读写分离页面，并开启读写分离，
从而创建出读写分离中间件。该中间件作为业务程序和1主多从集群之间的代理，中转业务程序发往主库和从库的请求。

3、读写分离中间件将识别业务SQL请求的类型，如果是写请求，则一律转发到主库，
如果是读请求，则根据某种分发规则（分发规则可配置），将读请求分发到主库或者从库。

4、读写分离中间件具有独立的IP。 使用读写分离中间件时，客户将业务的数据库访问地址，直接切换到该IP即可，无需修改业务程序代码，
支持标准SQL、系统命令、事务、视图、存储过程、触发器等MySQL功能。

UDB读写分离中间件是永久免费的， 客户只需要创建好主从库，主从库均处于正常运行状态，即可开启并使用读写分离中间件，无需额外费用。NVMe机型及SSD机型MySQL（普通版/高可用版）均支持创建读写分离中间件。
