• 从零开始学架构三 高性能


    从零开始学架构三 高性能

    读写分离

    读写分离的基本实现是:

    1. 数据库服务器搭建主从集群,一主一从、一主多从都可以。
    2. 数据库主机负责读写操作,从机只负责读操作。
    3. 数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。
    4. 业务服务器将写操作发给数据库主机,将读操作发给数据库从机

    细节:主从 复制延迟分配机制

    解决主从复制延迟有几种常见的方法:

    1.写操作后的读操作指定发给数据库主服务器
    例如,注册账号完成后,登录时读取账号的读操作也发给数据库主服务器。这种方式和业务强绑定,对业务的侵入和影响较大,如果哪个新来的程序员不知道这样写代码,就会导致
    一个bug。
    2.读从机失败后再读一次主机
    这就是通常所说的“二次读取”,二次读取和业务无绑定,只需要对底层数据库访问的API进行封装即可,实现代价较小,不足之处在于如果有很多二次读取,将大大增加主机的读操
    作压力。例如,黑客暴力破解账号,会导致大量的二次读取操作,主机可能顶不住读操作的压力从而崩溃。
    3.关键业务读写操作全部指向主机,非关键业务采用读写分离

    分配机制

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

    1.程序代码封装(基于Hibernate进行简单封)

    程序代码封装指在代码中抽象一个数据访问层(所以有的文章也称这种方式为“中间层封装”),实现读写操作分离和数据库服务器连接的管理。例如,基于Hibernate进行简单封
    装,就可以实现读写分离

    2. 中间件封装

    中间件封装指的是独立一套系统出来,实现读写操作分离和数据库服务器连接的管理。中间件对业务服务器提供SQL兼容的协议

    特点:

    1. 能够支持多种编程语言,因为数据库中间件对业务服务器提供的是标准SQL接口。
    2. 数据库中间件要支持完整的SQL语法和数据库服务器的协议(例如,MySQL客户端和服务器的连接协议),现比较复杂,细节特别多,很容易出现bug,需要较长的时间才能稳定。
    3. 数据库中间件自己不执行真正的读写操作,但所有的数据库操作请求都要经过中间件,中间件的性能要求也很高。
    4. 数据库主从切换对业务服务器无感知,数据库中间件可以探测数据库服务器的主从状态。例如,向某个测试表写入一条数据,成功的就是主机,失败的就是从机
    5. 开源数据库中间件方案中,MySQL官方先是提供了MySQL Proxy,现在MySQL官方推荐MySQL Router。MySQL Router的主要功能有读写分离、故障自动切换、负载均衡、连接池等
    6. 奇虎360公司也开源了自己的数据库中间件Atlas,

    分库分表

  • 相关阅读:
    跨源资源共享(CORS)
    7.9 restful api
    7.8 http redirected
    7.7 设置http首部
    7.6 request form post
    7.5 URL 解析
    7.4 http request post get
    7.3 ip host反解析
    7.2 tcpclient 基本web
    7.1 获取所有网卡ip地址
  • 原文地址:https://www.cnblogs.com/liguo-wang/p/10909985.html
Copyright © 2020-2023  润新知