• 企业架构LNMP学习笔记37


    1、能够理解读写分离的目的;

    2、能够描述读写分离的常见实现方式;

    3、能够通过项目框架配置文件实现读写分离;

    4、能够通过中间件实现读写分离;

    业务背景描述:

    时间:2014.6.-2015.9

    发布产品类型:互联网动态站点 商城

    用户数量: 10000-12000(用户量猛增)

    PV : 100000-500000(24小时访问次数总和)

    QPS: 50-100*(每秒访问次数)

    DAU: 2000(每日活跃⽤户数)

    之前业务中是单台MySQL提供服务,使用多台MySQL数据库服务器,降低单台压力,实现集群架构的稳定性和高可用性数据库的一致性和完整性 replication,通过业务比对和分析发现,随着活跃用户数增多,读取数据(查数据)的请求变多,故注重解决数据读取的压力。

    模拟运维设计方案:

    根据以上业务需求,在之前业务架构的基础上实现数据的读写分离。

    数据库中间件代理服务器:

    MySQL的读写分离介绍:

    1、读写分离的目的:

    实际是数据库负载均衡的方式。

    当数据库请求增多的时候,单例数据库不能满足业务的需求。需要进行数据库实例的扩容。多台数据库同时响应请求,也就是说对数据库的请求,进行负载均衡。

    但是由于数据库服务的特殊原因,数据库扩容基本要求:数据的一致性和完整性。所以要保证多台数据库实例的一致性和完整性,以MySQL为例来说,官方提供了 主从复制机制。

    读写分离:

    数据库的负载均衡不同于其他服务的负载均衡,数据要求一致性。基于主从复制的基础上,常见的数据库负载均衡使用的是读写分离方式。写入主数据库,读取到从数据库。可以认为读写分离,是一种特殊的负载均衡方式。

    可能出现的问题是刚写的数据读不到,实际业务中,读写分离存在的一个问题,不够实时性。

    对于要求实时性高的业务:

    1)缓存;读的时候读缓存;写主库,读缓存;

    2)可以读主

    3)添加完数据之后,有一个跳转的时间(5s),这5s可以进行主从复制。数据正在审核中。

    还要业务代码实现。降低服务器压力。

    2、读写分离常见的实现方式:

    ①业务代码的读写分离

    需要在业务代码中,判断数据操作是读还是写,读连接从数据服务器操作,写连接主数据库服务器操作

    以当前LNMP为例,需要通过PHP代码实现读写分离

    ②中间件代理方式的读写分离

    在业务代码中,数据库的操作,不直接连接数据库,而是先请求到中间件服务器(代理)

    由代理服务器,判断是读操作去从数据服务器,写操作去主数据服务器

    现在比较流行,还是MyCat。

    但是目前,官网出现上不去的情况。不知道是怎么回事。

    proxysql   是www.proxysql.com网站。

    可以看看这个。

    kingshared:这个也可以试下。要多读这方面的内容。

    那么如何进行选择呢?

    1)业务实现读写分离,操作方便,成本低,当前的开发框架基本支持读写分离。如果100台服务器呢?

    2)中间件代理服务器,除了能够实现读写分离,还可以作为数据库集群的管理平台。

    后面有多少服务器都不管。平滑升级。还起到监控的作用。

    常见的代理服务器都属于中间件。

  • 相关阅读:
    Vue基础知识点 — 组件
    物联网之点灯app按键事件绑定,远程开灯
    【Nginx】Nginx $remote_addr和$proxy_add_x_forwarded_for变量详解
    【毕业设计】Stm32 WIFI智能家居温湿度和烟雾检测系统 - 单片机 物联网 嵌入式
    容器的通俗讲解
    redis、rocketmq 高级面试考点
    单词记忆词典 python
    数学——图形题
    【数据结构】探索树中的奇妙世界
    【Python学习笔记】Python中的heapq
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/132792270