一、业务增长MySQL带来的业务痛点分析:
1. 性能瓶颈:
- 随着公司的业务快速发展,数据库中的数据量猛增,访问性能也变慢了,单台MySQL实例无法应对和满足大规模数据管理和请求访问,导致数据库性能下降,成为瓶颈。
- 关系型数据本身就比较容易形成系统瓶颈,无论是从单机存储容量、连接数、处理能力都有限。
- 当单表的数据量达到1000W以后,由于查询和操作的维度较广,哪怕使用了MySQL从库读写分离、优化索引等操作时,性能还是无可避免严重下降。
2. 数据强一致性同步延迟:
- 当架构增加Redis、RabbitMQ等消息队列
- OLTP的大数据量统计数据类异构表同步只能满足业务的T+1
- 系统架构中,异步设计方案中的中间件故障,导致数据重传、数据丢失
二、数据库应用的类型:
Item | 区分 | OLAP | OLTP |
---|---|---|---|
1 | 名称 | 在线分析处理(Online Analytical Processing) 在线事务处理 | (Online Transaction Processing) |
2 | 作用 | 处理企业级的决策分析、战略分析以及业务分析等 | 处理企业级的常规业务操作,如公司的采购、销售、存储、支付等 |
3 | 侧重点 | 多维数据分析技术和聚合算法,方便分析数据 | 强调数据的精确、事务的原子性和并发性 |
4 | 数据类型 | 历史性、汇总性、非实时性、不可变性数据 | 实时的、明细的、实时性的、可变性数据 |
5 | 场景 | 数据仓库 | 常规业务操作 |
6 | 查询模式 | 采用复杂的算法和存储结构,如多维数据库和立方体结构 | 需要简单的SQL语句,如基本的、事务相关的查询 |
7 | 性能要求 | 更高的存储要求和处理能力 | 快速且稳定的响应速度,可扩展性和高可用性 |
8 | 应用场景 | 企业级的决策支持和战略分析等领域 | 采购、销售、库存管理、银行交易等领域,极短的时间内快速响应用户请求,从而保证业务的正常运行 |
所以,在日常的企业级应用中,OLAP和OLTP针对不同的业务场景,有不同的解决方案。OLAP主要用于企业级决策和战略分析,需要快速的数据查询和分析技术。相反,OLTP主要用于企业日常操作,需要快速的数据更新和处理技术。
三、项目中的优化手段之《分库分表》:
1. 业务痛点:
- 由于数据量过大而导致数据库性能降低的问题
2. 解决的问题:
- 优化单一表数据量过大而产生的性能问题,使得单个表的数据量变小,提高检索性能,一定程度上可以缓解查询性能瓶颈
- 避免IO争抢并减少锁表的几率
- 解决业务层面的耦合,业务清晰
- 能对不同业务的数据进行分级管理、维护、监控、扩展等
- 高并发场景下,在一定程度的提升IO、数据库连接数、降低单机硬件资源的瓶颈
- 有些系统中使用的“冷热数据分离”,备份历史库
- 在高并发和海量数据的场景下,分库分表能够有效缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件资源的瓶颈
3. 带来新的问题:
- 跨库join(安全性等方面考虑,一般是禁止跨库join的)
- 分布式事务
- 业务复杂度增加
- 投入的硬件成本也会更高
- 跨分片的复杂查询,跨分片事务等
- 跨节点关联查询
- 跨节点多库进行查询时,limit分页,order by排序问题,就变得比较复杂
- 主键避重,主键值ID无法保证全局唯一
- 公共表、参数表、数据字典表等都是数据量较小,变动少,每个数据库都保存一份
四、TDSQL-C MySQL Serverless解决的痛点:
TDSQL-C MySQL Serverless实例提供了CPU、内存的实时弹性能力,构建云上资源架构下的MySQL产品新形态。
1. 常规业务下的痛点:
Item | 业务方案 | 业务痛点 | Serverless实例解决方案 |
---|---|---|---|
1 | 自建MySQL实例 | (1). 需要购买大量的云服务器构建MySQL集群,设备成本费用高 (2). 专人运维成本,部署业务 (3). 双11等活动时,提前负责服务的扩缩容 |
(1). 按量收费,不使用不收费 (2). 云函数计算,从CI/CD到服务部署,扩缩容,全部自动完成,客户可以更专注于业务代码 |
2 | 传统的云数据库 | (1). 提供多种内存/CPU规格给用户购买 (2). 用户只能按最大负载量购买满负载配置,即使没有使用到,也需要为选中的规格付费 |
(1). 自动扩缩容,访问量上来时自动扩容,降低时自动缩容,用户不需要关注规格 (2). 按照实际使用的资源付费 (3). 不使用不计费,如果没有访问,不应该收费 |
2. Serverless数据库特点:
举个场景:如果自己想要出行就只能购买汽车、摩托车,现在可以直接通过滴滴等第三方平台使用打车服务,只需输入目的地即可,不需要再关注买车的坑、开车怕被撞和汽车保养的问题,核心诉求得到了更好的满足。
Serverless数据库可以看做,直接在云上直接购买虚拟机,部署业务,负责服务的扩缩容,从CI/CD到服务部署,扩缩容,全部自动完成,用户只需要更专注于业务代码即可。
Serverless数据库的基本特点是无需运维、以API方式提供服务、按实际使用计费、无使用无费用等。
3. 在业务波动较大的场景下,普通实例和Serverless实例资源使用和规格变化情况如下图所示:
由上图可以看到,在业务波动较大的场景下:
Item | 数据实例 | 资源低谷期 | 资源高峰期 | 灵活性 |
---|---|---|---|---|
1 | 普通实例 | 在低谷期浪费的资源较多 | 在高峰期资源不足,业务受损 | 比较固定的资源 |
2 | Serverless实例 | 在低谷期可以动态弹性释放不需要的资源,从而减少了资源浪费 | 在高峰期也能完全满足业务需求,保证业务不受损,提高了系统的稳定性 | 动态弹性伸缩能 |