我是如何一步步让公司的MySQL支撑亿级流量的(上)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 我是如何一步步让公司的MySQL支撑亿级流量的

1 主从读写分离

当我们面临高并发的查询数据请求时,可以使用主从读写分离的方式,部署多个从库分摊读压力。

大部分互联网业务都是读多写少,因此优先考虑DB如何支撑更高并发查询,首先就需要区分读、写流量,这才方便针对读流量单独扩展,即主从读写分离。


若前端流量突增导致从库负载过高,DBA会优先做个从库扩容上去,这样对DB的读流量就会落到多个从库,每个从库的负载就降了下来,然后开发再尽力将流量挡在DB层之上。


Cache V.S MySQL读写分离

由于从开发和维护的难度考虑,引入缓存会引入复杂度,要考虑缓存数据一致性,穿透,防雪崩等问题,并且也多维护一类组件。所以推荐优先采用读写分离,扛不住了再使用Cache。


1.1 core

主从读写分离一般将一个DB的数据拷贝为一或多份,并且写入到其它的DB服务器中:



  • 原始DB为主库,负责数据写入
  • 拷贝目标DB为从库,负责数据查询


所以主从读写分离的关键:



  • 数据的拷贝
    即主从复制
  • 屏蔽主从分离带来的访问DB方式的变化
    让开发人员使用感觉依旧在使用单一DB



2 主从复制

MySQL的主从复制依赖于binlog,即记录MySQL上的所有变化并以二进制形式保存在磁盘上二进制日志文件。

主从复制就是将binlog中的数据从主库传输到从库,一般异步:主库操作不会等待binlog同步完成。


2.1 主从复制的过程

从库在连接到主节点时会创建一个I/O线程,以请求主库更新的binlog,并把接收到的binlog写入relay log文件,主库也会创建一个log dump线程发送binlog给从库

从库还会创建一个SQL线程,读relay log,并在从库中做回放,最终实现主从的一致性


使用独立的log dump线程是异步,避免影响主库的主体更新流程,而从库在接收到信息后并不是写入从库的存储,是写入一个relay log,这是为避免写入从库实际存储会比较耗时,最终造成从库和主库延迟变长。

  • 主从异步复制的过程

image.png



基于性能考虑,主库写入流程并没有等待主从同步完成就返回结果,极端情况下,比如主库上binlog还没来得及落盘,就发生磁盘损坏或机器掉电,导致binlog丢失,主从数据不一致。不过概率很低,可容忍。



主库宕机后,binlog丢失导致的主从数据不一致也只能手动恢复。



主从复制后,即可:

  • 在写入时只写主库
  • 在读数据时只读从库



这样即使写请求会锁表或锁记录,也不会影响读请求执行。高并发下,可部署多个从库共同承担读流量,即一主多从支撑高并发读。


从库也能当成个备库,以避免主库故障导致数据丢失。


那无限制地增加从库就能支撑更高并发吗?

NO!从库越多,从库连接上来的I/O线程越多,主库也要创建同样多log dump线程处理复制的请求,对于主库资源消耗较高,同时受限于主库的网络带宽,所以一般一个主库最多挂3~5个从库。



2.2 主从复制的副作用



比如发朋友圈这一操作,就存在数据的:

  • 同步操作
    如更新DB
  • 异步操作
    如将朋友圈内容同步给审核系统


所以更新完主库后,会将朋友圈ID写入MQ,由Consumer依据ID在从库获取朋友圈信息再发给审核系统。

此时若主从DB存在延迟,会导致在从库取不到朋友圈信息,出现异常!

  • 主从延迟对业务的影响示意图

image.png



2.3 避免主从复制的延迟

这咋办呢?其实解决方案有很多,核心思想都是 尽量不去从库查询数据。因此针对上述案例,就有如下方案:

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
缓存 NoSQL 关系型数据库
亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证
你们有多少人是被面试官问到过Redis和MySQL的数据一致性如何保证的? 你们是否考虑过在高并发场景下,Redis与MySQL的同步会有哪些问题?该如何解决? 本篇文章会带大家详细了解,让你知其然,知其所以然,吊打面试官。
643 0
亿级电商流量,高并发下Redis与MySQL的数据一致性如何保证
|
SQL 资源调度 关系型数据库
双11特刊 | 一文揭秘云数据库RDS如何顺滑应对流量洪峰
从绿色低碳到硬核科技,看RDS如何用绿色科技助力2021“双11”?
799 0
双11特刊 | 一文揭秘云数据库RDS如何顺滑应对流量洪峰
|
SQL 弹性计算 运维
虎扑利用阿里云RDS自治数据库轻松应对欧洲杯流量洪峰
今年欧洲杯、美洲杯等热点赛事期间,国内最大的体育互联网平台虎扑迎来密集流量洪峰的大考,通过充分使用云上资源,尤其利用阿里云RDS数据库企业级自治能力,轻松应对创下新高的并发访问量。
1618 0
虎扑利用阿里云RDS自治数据库轻松应对欧洲杯流量洪峰
|
SQL 存储 运维
我是如何一步步让公司的MySQL支撑亿级流量的(下)
我是如何一步步让公司的MySQL支撑亿级流量的
183 0
|
1月前
|
安全 关系型数据库 MySQL
MySQL安全最佳实践:保护你的数据库
本文深入探讨了MySQL数据库的安全防护体系,涵盖认证安全、访问控制、网络安全、数据加密、审计监控、备份恢复、操作系统安全、应急响应等多个方面。通过具体配置示例,为企业提供了一套全面的安全实践方案,帮助强化数据库安全,防止数据泄露和未授权访问,保障企业数据资产安全。
|
15天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
53 3
|
21天前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
2月前
|
存储 运维 关系型数据库
从MySQL到云数据库,数据库迁移真的有必要吗?
本文探讨了企业在业务增长背景下,是否应从 MySQL 迁移至云数据库的决策问题。分析了 MySQL 的优势与瓶颈,对比了云数据库在存储计算分离、自动化运维、多负载支持等方面的优势,并提出判断迁移必要性的五个关键问题及实施路径,帮助企业理性决策并落地迁移方案。
|
8天前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
9天前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。

推荐镜像

更多