数据库读写分离

基本原理:将数据库的读写操作分散到不同的节点上。

基本实现:

    1. 数据库服务器搭建主从集群,一主一从,一主多从都可以;

    2. 数据库主机负责读写操作,数据库从机只负责读操作;

    3. 数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据;

    4. 业务服务器将数据库写操作发送给数据库主机,将读操作发送给数据库从机。

关键问题点:

    1. 主从复制延迟;

        常见解决方法:

            a. 写操作之后的读操作指定发给数据库主服务器。

                场景:注册完账号之后,登陆时读取账号的读操作也发送给数据库主服务器。

                影响:和业务强绑定,对业务侵入和影响比较大。

            b. 读从机失败后再读一次主机。二次读取

               优点:与业务无绑定,只需要对底层的数据库访问API封装即可,实现代价较小

               缺点:若存在大量二次读取时将大大增大主服务器的压力。

           c. 关键业务的读写操作全部指向主机,非关键业务采用读写分离。

               场景:用户管理系统中,用户的登陆注册读写操作全部访问主机,用户介绍,爱好等业务可以采用读写分离。

    2. 分配机制,将读写操作区分开来,然后访问不同的服务器。一般有两种方式,程序代码中封装和中间件封装。

        a. 程序代码中封装,在程序代码中抽象一个数据访问层,实现读写操作分离和数据库连接的管理。

            特点:

                (1)实现简单,可根据业务做较多定制化功能。

                (2)每个编程语言都要自己实现一次,无法通用,重复开发工作量大。

                (3)故障情况,如发生主从切换,可能需要所有系统都修改配置并重启。

        b. 中间件封装,独立一套系统出来,实现读写操作分离和数据库服务器连接管理。

            特点:

                (1)能够支持多种编程语言;

                (2)支持完整的SQL语法和数据库协议,实现较为复杂,细节较多,容易出现bug,需要较长时间才能稳定;

                (3)中间件自己不执行数据库的读写操作,但所有的读写请求都要经过中间件,对中间件的性能要求比较高;

                (4)数据库主从切换业务系统无感知,数据库中间件可以探测数据库主从服务器的切换状态。例如向某个测试表写入一条数据,成功则时主机,失败则是从机。

posted @ 2022-11-23 14:31  夜雨声入眠  阅读(160)  评论(0编辑  收藏  举报