数据库读写分离技术及实现方式
在数据库的应用中,为了提高数据库的安全性,高可用性,以及业务系统对高并发的需求,除了需要使用主从复制以为,还需要使用数据库读写分离技术。
读写分离原理
所谓读写分离,即把对数据库的读取和写入(增/删/改)操作分开到不同的database server上(如下图),以提高数据库操作效率,和高并发性能。在数据库写入操作不频繁的场景中,也可以让负责写入操作的server分担一部分读取的压力。
实现读写分离的两种方式
-
应用程序层面实现,即:在应用程序代码中,指定读取数据的服务器和写入数据的服务器。
优点:
1)安装即用;
2)降低了一定的部署难度;
3)访问压力在一定级别下,性能很好
缺点:
1)系统架构调整,程序代码就需要跟着改变;
2)难以实现高级应用,如:分库、分表;
3)不适用于大型应用场景。 -
使用专门的中间件实现.
优点:
1)系统架构设计更灵活;
2)可以实现一些高级控制,如:failover,监控,透明化水平拆分等。
3)可以使用一些技术手段提高mysql的性能。
4)对业务代码影响小,并且更安全。
缺点:
需要一定的开发运维团队支持。
常见的中间件
- Mycat,社区爱好者在阿里Cobar的基础上二次开发的版本。
- Cobar,阿里开发的中间件,管理间件3000个mysql实例。
- Oneproxy,支付宝团队基于mysql官方proxy思想,使用c语言编写的一款商业收费中间件,注重性能和稳定性。
- Atlas,360团队基于mysql官方proxy思想,使用c语言编写的一款中间件,高并发下可能不稳定。
- Kingshared,前360Atlas团队成员使用GO语言编写,正在完善中。(2019年)