50W+ 小程序开发者背后的数据库降本增效实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 50W+小程序开发者背后的数据库降
本增效实践
TDSQL-C Serverless 研发负责人
杨珏吉
2. 大纲
腾讯自研上云使用 Serverless 数据库的实
践
• 计算存储分离对 Serverless 的影响
• TDSQL-C Serverless 数据库特点
• 总结和展望
•
3. 腾讯自研上云使用 Serverless 数据库的实践
4. 微信小程序
简化客户端发布流程
5. 微信小程序开发者面临问题
云服务成本高
•
•
个人、小团队开发者
按时付费不划算、包年包月不灵活
资源利用率低
•
•
•
开发测试环境
活动结束后,申请的资源浪费
用户规模小
后端配置复杂
•
•
云产品太多,如何选择,学习成本大
多种产品配置,运维成本大
6. 微信云托管-简化小程序开发运维流程
7. 微信云托管-架构简介
8. 微信云托管-数据库选择
A 云托管后端自行管理分库
•
•
•
管理复杂度高
不同业务间相互影响
资源成本高
B 使用 TDSQL-C Serverless
•
•
•
无需管理数据库分库
业务间隔离性好
Serverless 计费模式对用户友好
小程序
A 小程序
B 小程序
C 小程序
A 小程序
B 小程序
C
Docker Docker Docker Docker Docker Docker
TDSQL-C
Serverless TDSQL-C
Serverless TDSQL-C
Serverless
MySQL
DB
DB
DB
9. 腾讯乐享
10. 腾讯乐享-架构简介
客户 B
客户 A
客户 C
接入层
逻辑层
数据层
乐享 H5
乐享权限服务
乐享API服务
乐享直播服务
11. 腾讯乐享-SaaS 服务痛点
通过 MySQL 实例按公司分库
• 大部分公司社区使用度比较低
• 公司活动可能带来资源相互影响
公司A
公司B
公司C
乐享后台
固定规格 16 核 32G
MySQL
DB
DB
DB
12. 腾讯乐享-SaaS 解决方案
出于管理便利性依然分库
•
得益于 TDSQL-C Serverless 的按量计费
特点,帮助降低乐享 80% 的成本
公司A
公司B
公司C
乐享后台
TDSQL-C Serverless
DB
计费贴近实际使用
DB
DB
13. 计算存储分离对 Serverless 的影响
14. Serverless = FaaS + BaaS
函数即服务 FaaS (函数计算)
•
•
•
•
•
•
无需运维
以 API 形式提供服务
实时弹性伸缩
按调用次数计费
无使用无费用
高可用
后端即服务 BaaS
•
•
•
•
•
无需运维
以 API 形式提供服务
按实际使用计费(访问次数)
无使用无费用
高可用
用户浏览器
CDN
静态内容
动态内容
函数计算
云数据库
对象存储
15. 传统数据库实现 Serverless 难点
目前常用业界云数据库
✓
×
×
×
帮助开发者实现高可用、自动备份
自动扩缩容
按使用量计费
无使用无费用
传统云数据库 传统云数据库
计算资源10% 计算资源90%
云原生数据库 TDSQL-C - 计算存储分离
90%
10%
60%
计算层
TXSQL
VS
存储资源90%
存储资源10%
同机部署计算和存储,剩余资源难以利用
存储池
50%
解耦计算与存储,资源利用率高,跨机扩容快
存储层
TXSTORE
16. 打个比方-租房-解耦需求
两个朋友一起租房,周末一起打主机游戏
或
两房
两房一厅
两房
门口传送到按
次付费的游戏
室
两房
隔壁有按次付
费的游戏室
17. Serverless = FaaS + BaaS
用户浏览器
CDN
只有计算
函数计算
云数据库
对象存储
只有存储
18. TDSQL-C 架构图
设计原则
- 复用云上已有的成熟组件
TXSQL RW
计算层
同步 Redo
计算层
DBClient
- 基于 TXSQL 内核,复用bugfix和新特性
TXSQL RO
DBClient
- 物理复制:准实时同步redo到备机(<1ms)
- 日志下沉:通过 DBClient 组件,实现日志分发
读 Page
写 Redo
存储层
- 统一存储平台:基于 CBS 打造 HiSTOR 存储平台
数据安全:复用副本同步,故障自动迁移,数据校验
DBStore
DBStore
存储层
备份/回档:快照以MB粒度并发(速度达GB/s)
成本:提供SSD、混存、EC版本,满足多种场景
- 可计算存储:增加 DBStore 插件
数据多版本:通过日志回放,返回指定版本数据
算子下推:加速条件查询
COS
备份
19. TDSQL-C Serverless 数据库特点
20. Serverless 数据库三个目标-像自来水一样
自动扩缩容 按使用量计费 无使用无费用
根据业务负载扩缩容实例,开发 以实际使用的负载进行计费,开 无数据请求时,不对计算资源计
者无需预测负载并提前扩容资源 发者无需为自己没有使用到的资 费
源付费
21. 场景-慢查询
大固定规格将承担更
多成本
业务偶发慢查询
- 通常消耗较多 CPU 资源
小固定规格将无法满
足慢查询性能,甚至
影响在线业务
22. 场景-活动
大固定规格将承担更
多成本
活动期间高负载
小固定规格将无法满
足活动需求,甚至影
响在线业务
23. 场景-定时任务
大固定规格将承担
更多成本
每天夜间清理过期数据、生
成报表等
每个月初计算上月的账单
小固定规格将无法满
足全表扫描性能,甚
至影响在线业务
24. TDSQL-C Serverless 自动扩缩容
✓ 购买时指定最小-最大规格
比如: [1核 2G, 2 核
4G]
能满足用户需求吗?
CPU
Mem
自动扩缩容
根据业务负载扩缩容实例,开发
① 低负载
CPU 使用 0.1 核
Buffer pool 使用 1G
其他内存 使用 100MB
② 高负载-触发扩容前
CPU 使用 1 核
Buffer pool 使用 1G
其他内存 使用 500MB
③ 高负载-触发扩容后
CPU 使用 1.8 核
Buffer pool 使用 2G
其他内存 使用 500MB
者无需预测负载并提前扩容资源
资源限制为 1核 2G
资源限制为 2核 4G
25. TDSQL-C Serverless 自动扩缩容
✓ 购买时指定最小-最大规格
✓ CPU、内存资源限制到最大规格
比如: [1核 2G, 2 核
4G]
✓ CPU、内存不存在扩容时间
✓ Buffer pool 根据监控分钟级调整
CPU
自动扩缩容
根据业务负载扩缩容实例,开发
者无需预测负载并提前扩容资源
Mem
① 低负载
CPU 使用 0.1 核
Buffer pool 使用 1G
其他内存 使用 100MB
② 高负载-触发扩容前
CPU 使用 1.8 核
Buffer pool 使用 1G
其他内存 使用 500MB
资源限制为 2核 4G
③ 高负载-触发扩容后
CPU 使用 1.8 核
Buffer pool 使用 2G
其他内存 使用 500MB
26. 问题-计费近似
1.1 核按 2 核计费?
0.6 核按 1 核计费?
27. 场景-小规格实例
小于 1 核的负载、微服
务
28. TDSQL-C Serverless 按使用量收费
✓ 每 5 秒进行一次资源使用采样
✓ CCU(TDSQL-C Compute Unit)= max(CPU, MEM/2, 最小规格)
✓ 按实时的 CCU 进行计费
按使用量计费
以实际使用的负载进行计费,开
发者无需为自己没有使用到的资
源付费
时刻点 CPU(核) MEM(GB) 最小规格(核) CCU
10:12 0 0.1 0.25(0.25核 0.5G 内存) 0.25
10:13 3 1.0 0.25 3
… … … 10:18 0 1.6
…
…
0.25
0.8
29. 场景-归档数据库
业务数据长期不访问
- 不对 CPU 和内存进行计费
相比与直接存对象存储,当用
户想使用时可以立刻提供更强
的分析能力
30. 场景-低频访问的业务
- 个人博客
- 垂直社区论坛
- 微信小程序
每天请求量少,请求结
束后无计算资源收费
31. 场景-开发测试环境
工作时间:周一至
周五的工作时间使
用时则收费
下班时间:夜
间以及周末不
使用不收费
32. TDSQL-C Serverless 无使用无费用
✓ 10 分钟内没有用户连接,回收计算资源,无计算资源扣费
✓ 收到用户请求时,自动唤醒计算资源,继续提供数据库服务
用户访问
接入层
无使用无费用
计算层 TXSQL
无数据请求时,不对计算资源计
费
存储层 DBSTORE
管控平台
监控与计费
33. TDSQL-C Serverless 无使用无费用
✓ 10 分钟内没有用户连接,回收计算资源,无计算资源扣费
✓ 收到用户请求时,自动唤醒计算资源,继续提供数据库服务
用户访问
接入层
监控与计费
无使用无费用
无数据请求时,不对计算资源计
费
管控平台
存储层 DBSTORE
34. TDSQL-C Serverless 无使用无费用
✓ 快速恢复:广播小表获取 VDL(最后连续一致性日志点)
✓ BP并行初始化: 多线程初始化 BP chunk + lazy 初始化 block mutex
✓ 事务系统并行化:多线程加载 undo page
last-vdl
vdl
• Running阶段:vdl推进后,将该vdl值异步持久化到后端(last-vdl)
• Recovery阶段:
① 从后端获取last-vdl(checkpoint)
无使用无费用
无数据请求时,不对计算资源计
费
② 广播所有相关小表获取>=last-vdl的lsn序列(lsn1,len1)(lsn2,len2)…
③ 使用败者树获取最后连续点(vdl)
④ 给有大于vdl日志的小表发送truncate命令进行日志截断
日志下沉
写日志
35. 总结和展望
36. 满足初创企业述求
- 低成本:按 CPU 使用量收费,无使用
无费用
- 减少运维人力:单主节点高可用,智能
管家诊断 SQL
- 迭代试错快:发货速度快,回档 GB 每
秒,搁置项目暂停实例
- 用户数激增:自动扩缩容
- 小微项目:小规格实例
如果说中小企业是一片片沿溪而耕的农田……
37. 满足初创企业述求
那么我们的愿景就是建一座大坝来管理好上游的水资
源,用来灌溉下游企业
TDSQL-C Serverless:
- 自动扩缩容:瞬间能达到最大规格负载
- 按使用量计费:按 CPU 使用量,单位秒粒度
- 无使用无费用:冷启动 2 秒
38. Take away
降本增效实践:
- 解耦资源的相互依赖关系
- 尝试使用 Serverless 化的云组件
云计算的发展:
- 从面向硬件资源到面向用户服务
39.