转自:Codee君。作者:Coding君
一、MySQL 架构演进路线
互联网系统通常会经历下面的阶段:
单机 MySQL↓主从复制↓读写分离↓分库分表↓分布式数据库
每一步都是为了解决新的瓶颈。
二、阶段一:单机 MySQL
最简单架构:
应用│MySQL
特点:
部署简单成本低
适用场景:
小型系统早期创业项目数据 < 1000万
问题:
单点故障性能有限无法扩展
三、阶段二:主从复制架构
为了解决:
高可用
引入:
主从复制
架构:
应用│主库│binlog│从库
优点:
数据备份读压力分担
缺点:写压力仍然集中
四、阶段三:读写分离
当系统访问量增大:读请求远多于写请求
通常比例:
读 : 写 = 10 : 1
于是引入:
读写分离
架构:
应用│Proxy层│┌─────┴─────┐│ │主库 从库│ │从库 从库
读请求:从库
写请求:主库
常用组件:
ProxySQLMyCatShardingSphere
优点:
读能力扩展
问题:
写压力仍然集中
五、阶段四:分库分表
当单库写入压力过大时:
主库写入瓶颈
需要:
分库分表
架构:
应用│分片路由│┌──────────┼──────────┐│ │ │shard1 shard2 shard3│ │ │MySQL MySQL MySQL
每个库只存一部分数据。
例如:
order_0order_1order_2order_3
分片规则:
order_id % 4
优点:
写能力扩展存储扩展
缺点:
架构复杂跨库查询困难
六、阶段五:分布式数据库
当系统规模达到:
百亿数据百万 QPS
传统 MySQL 架构会变得非常复杂。
这时候可能选择:
分布式数据库
例如:
TiDBCockroachDBOceanBase
架构示意:
应用│SQL Layer│分布式存储│多节点集群
优点:
自动分片自动扩容高可用
缺点:
成本高学习成本高
七、常见 MySQL 集群方案
目前主流方案有:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
八、Vitess 架构(大规模 MySQL)
Vitess 是 YouTube 开源的:
MySQL 分布式中间件
架构:
应用│VTGate│┌────┼────┐│ │shard1 shard2│ │MySQL MySQL
特点:
自动分片SQL 路由水平扩展
很多公司在用:
YouTubeSlackShopify
九、TiDB 架构
TiDB 是:
分布式 HTAP 数据库
架构:
应用│TiDB│┌──┴──┐│ PD │└──┬──┘│TiKV 集群
特点:
自动分片强一致在线扩容
适合:
大数据量复杂查询
十、架构选型建议
不同规模系统建议:
– 初创公司
单机 MySQL
– 中小系统
主从复制+读写分离
– 大型互联网系统
分库分表+Proxy
– 超大型系统
VitessTiDBOceanBase
十一、互联网典型架构
典型互联网 MySQL 架构:
应用│API Gateway│ProxySQL│┌────────┼────────┐│ │ │shard1 shard2 shard3│ │ │主从 主从 主从
特点:
读写分离分库分表高可用
十二、架构选型核心原则
数据库架构选型必须考虑:
数据规模并发量团队能力运维成本
核心原则:
简单优先逐步演进不要过度设计
十三、今日总结
MySQL 集群架构演进:
单机→ 主从复制→ 读写分离→ 分库分表→ 分布式数据库
架构目标:
高可用高性能高扩展
常见方案:
MySQL + ProxySQLVitessTiDB
想了解更多干货,可通过下方扫码关注

可扫码添加上智启元官方客服微信👇

17认证网








