介绍
我的上一篇文章实现了mysql的主从复制结构,今天这篇继续将如何实现读写分离。
读写分离是指:针对数据库的写操作(插入、更新、删除等)访问主数据库,读操作访问从数据库。
因为一般网站的读请求的数量是远远大于写请求的,所以读写分离模式往往可以有效的提升系统的性能的。
读写分离属于应用层面上的实现,思路也比较简单,就是手动解析数据库请求,如果是读请求就将其转发到从数据库,如果是写请求就将其转发到主数据库。不过要写好还是比较难的,涉及到对JDBC的二次封装、负载均衡等。目前市面上已有比较成熟的方案,比如MySQL Router(官方),Apache shardingsphere 等。
Apache shardingsphere
是目前比较流行的实现方式,本篇文章也使用该框架实现读写分离。
Apache shardingsphere 简介
Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。
功能有:读写分离,数据分片、分布式事务、数据迁移、数据加密、联邦查询、影子库等功能。
主要有以下两部分构成:
ShardingSphere-JDBC
ShardingSphere-JDBC 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。是在开发时需要引入的框架。
ShardingSphere-Proxy
ShardingSphere-Proxy 定位为透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。
针对 Springboot 项目的实现
引入依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId