OB 君: 蚂蚁金服资深技术专家虞舜将在本文为大家分享蚂蚁金服数据库所面对的业务挑战, 解读 OceanBase 的自治数据库体系, 解密 OceanBase 在天猫双 11 大促期间的稳定性解决方案, 探索 OceanBase 在蚂蚁金服的智能运维实践之路. 本文整理自 OceanBase TechTalk 技术沙龙杭州站上虞舜的演讲视频以及 PPT.
前言
OceanBase 是一款通用的分布式关系数据库, 有很多独特的特点. 比如数据库的多租户, 高可用, 极致弹性伸缩能力. 如果把 OceanBase 当作单库使用, 就没有办法把 OceanBase 的分布式能力发挥到极致.
近几年来, 传统数据库的基础领域方面突破越来越少, 而在人工智能和机器学习所驱动的自治数据库方面却屡屡获得重大进展. 在今年的数据库顶级峰会 SIGMOD 中, 有多篇优秀论文都与自治数据库领域关系密切, 我们能越来越清晰地感受到, 人工智能与数据库的结合已经成为了大势所趋. 其实, 不仅学术界如此, 越来越多的商业数据库巨头也已经将重心转移到了自治化数据库之上.
关于 OceanBase
OceanBase 为何被称为金融级数据库呢? 在蚂蚁, OceanBase 部署在非常廉价并且经常发生故障的服务器上, 而正是在这些不可靠的服务器上, 建立了支撑支付宝, 网商银行以及整个蚂蚁金服如此巨大业务量的 OceanBase 数据库, 在出现机器宕机时能够在极短时间内恢复. 2017 年的天猫双 11 当天, 蚂蚁每秒钟需要处理大约 25.6 万笔交易支付以及 4200 万次 SQL 请求.
OceanBase Milestone
那么首先我们一起来回顾一下 OceanBase 这几年的重要里程碑事件: 2010 年 6 月, OceanBase 正式立项; 2011 年, 淘宝收藏夹上线; 2014 年, 支付宝交易系统上线; 2016 年, 支付宝账务系统上线; 2017 年, OceanBase 开始商业银行推广, 至今已在多家商业银行上线运行.
OceanBase 至今已成功应用于支付宝全部核心业务: 交易, 支付, 会员和账务等系统, 网商银行和印度 Paytm 以及阿里巴巴淘宝收藏夹, P4P 广告报表等业务. 从 2017 年开始, OceanBase 开始服务外部客户, 包括南京银行, 浙商银行, 人保健康险平台等.
目前, OceanBase 技术团队正在如上图所示的几个方向上开展研究工作, 包括 HTAP, 全局快照, 兼容性等等. 本文分享的主题则是其中一个重要的研究方向 -- 智能化数据库.
蚂蚁数据库的挑战和应对之道
对于蚂蚁金服而言, 数据库方面的挑战可以主要分为 5 个方面: 高并发交易, 低成本交易, 精细化高可用, 国际化以及高效的研发运维支撑.
智能驱动的 Self-Driving Database
为了应对上述数据库方面的挑战, 蚂蚁需要更加智能的自治数据库来提升整体的效率和稳定性. 在蚂蚁我们做了几个方面的实践, 比如数据库配置的自调优 (Self/Auto Tuning), 遇到故障时候的自愈(Self/Auto Healing) 以及面对容量, 利用率以及成本问题的自伸缩(Self/Auto Scaling). 其实, 智能驱动的自治数据库就像是自动驾驶汽车一样, 目标是希望让大部分的事情都由数据库自己完成, 让 DBA,SRE, 业务研发能够更加专注地做好业务.
SIGMOD 以及业界趋势
自治数据库近年来无论是在学术界还是工业界都是比较火的, 学术界的 SIGMOD 2018 里的两篇论文:"Query-based Workload Forecasting for Self-Driving Database Management Systems" 和 "P-Store: An Elastic Database System with Predictive Provisioning" 和蚂蚁目前正在做的工作比较接近. 此外, 在工业界, Oracle 将 Autonomous Database 作为一个重要的方向, 提升 Oracle 在数据库市场上的竞争力.
智能化数据库系统的架构
如上图, 这是蚂蚁定义的智能化数据库系统的架构, 包括感知, 决策, 执行等模块, 其实, 简单而言它是一个典型的控制系统. 站在数据库的角度来看, 整个系统的目标就是让 Response Time 最小, 吞吐量最高, RT 时间最小.
智能化数据库系统的输入可能是负载模型或者系统事件, 这两者就构成了系统所需要感知的元素. 举例而言, 比如 OceanBase 系统感知到了一次 SSD 磁盘 IO 抖动, 因为蚂蚁数据库系统中有海量的 SSD, 这样的抖动每天都会发生, 有些抖动只发生一次就会恢复, 而另外一些抖动可能因为 SSD 固件 Bug, 物理故障等因素无法自动恢复, 可能会 Hung 死系统. 智能化的数据库系统首先将会通过数据和算法感知到 IO 问题, 然后将信息同步给决策系统 -- 数据库大脑, 数据库大脑会决策这样的问题出现之后应该如何解决. 例如, 在蚂蚁, 当系统感知到业务异常时, 大脑会快速的根据数据和算法判断异常的根因以及可行的方案, 当识别到 SSD 有问题时就会做出剔除 SSD 或者 OceanBase Server 的决策, 实现 Response Time 的快速恢复.
在上图所示的智能化数据库系统架构设计中, 系统层面使用了很多的机器学习算法, OceanBase 层面也做了大量的能力扩展和防护措施, 比如上面谈到的 SSD 或 Server 的剔除能力, OceanBase 在执行操作之前会进行 leader 切换以及副本完整性检测, 避免影响业务. 智能数据库系统的优化策略与人的决策过程非常相似, 比如 DBA 优化 SQL 时会先判断哪里存在问题, 这就完成了第一步 "感知", 之后再进行第二步 "决策", 根据经验判断应该执行的操作, 第三步, 是执行这个操作从而达到优化系统或者恢复故障的目的.
智能化数据库系统的三大组件
智能化基石
要建立上述的智能数据库系统, 需要坚实, 灵活的基础能力支撑, 包括一下几个方面:
第一点是灵活可扩展, 可定制的 OceanBase, 例如, 开放数据库内核的能力, 使得平台或者工具可以任意干预 SQL 的计划和执行策略, 任意切换主节点并修改资源配置, 通过精心设计和实现这些内核能力, 避免决策错误时对系统产生不良的影响.
第二点是自动化, 稳定并且具备强大数据处理能力的平台. 举例而言, 如果数据库通过对历史数据的分析和计算, 确定在未来三天内或三个月内将会出现容量不足的情况, 那么就可以决策自动进行容量, 而这一点建立在资源 "池" 化的基础上比如容器, 如果数据库建立在物理机上, 这就使得扩容变得异常困难.
在蚂蚁, 数据库建立在容器之上, 需要时调用 API 直接扩容容器即可, 不需要时调用 API 归还容器即可, OceanBase 自动对数据进行迁移和均衡, 整个过程业务系统无感知, 这样的容量伸缩方式也已经经历了多次双 11 的实战检验. 此外, 蚂蚁的数据库平台能够处理 2017 双 11 每秒 4200 万的 SQL 采集和计算, 而每条 SQL 都会被记录到系统中, 之后通过机器学习算法可以识别出 SQL 执行情况的变化.
最后就是数据库专家的经验, 无论国内外, 阿里和蚂蚁的数据库工程师的经验和能力都是很强的, 不断将这些经验转化成为自治数据库需要的规则和算法, 来提升整体系统的能力, 让蚂蚁 OceanBase 的数据库体系逐步提升, 逼近一个经验丰富的数据库工程师.
感知
具备了智能化基石之后, 我们再来深入讨论构建智能化数据库系统的三个组件. 首先, 是感知系统, 对于感知系统而言, 它目标是理解数据库上运行了什么样的业务, 并对上面的工作负载 (Workload) 进行建模, 负载建模常用的一些算法, 比如随机过程, 回归以及 RNN 等在上述的论文中有所介绍, 完成负载建模后, 可以通过模型预测未来工作负载的变化, 比如是否存在流量的突增 (导致的容量不足) 等, 让数据库系统提前作出反应, 比如建立索引, 增加资源等.
另外一点就是 "统一事件", 这一点较为抽象,"统一事件" 用来建模数据库系统里面真实发生的事情, 所处的状态, 比如有没有 Server 宕机, 有没有 Partition 发生迁移, 或者某些关键指标的是否发生了变化等, 为了感知这些事件, 智能数据库系统中使用 Anomaly Detection 相关的算法 (例如 LSTM,ARIMA,HoltWinters 以及 Ensemble 等算法) 来识别这些变化并生成相应的事件.
决策
在智能数据库系统中, 决策是使用 AI 或机器学习的一个非常重要的场景. 决策的本质是给定一个输入, 比如系统里面发生的事件, Metric Data 以及 Workload 等, 输出就是 Action Plan, 而优化的目标就是使得 RT 时间最小, TPS 时间最大和成功率最高, 这一点无论是在银行还是在蚂蚁金服内部都是一样的.
蚂蚁数据库目前所采用的策略主要有两种, 一种是基于经验的决策, 依靠蚂蚁 DBA 专家的经验建立一颗决策树, 在判断当前的情况符合决策树中的分支时, 决策执行提前设定好的预案. 另外一种是基于学习的决策, 这部分可以使用聚类或者控制理论算法来实现, 在蚂蚁我们使用了最朴素的策略. 这方面最大的挑战就是如何积累学习所需要的数据, 因为机器学习的很多算法需要大量数据进行训练, 蚂蚁为了积累这些数据开发了 DB 风险回归平台, 其能够以 95% 的程度仿真线上系统的工作负载, 通过自动的在这些工作负载上注入的异常和优化策略, 达到积累数据的目的.
执行器
除了执行决策产生的 Action Operator, 执行器模块还有两个目标, 就是实现幂等以及最小化系统影响. 蚂蚁金服技术团队对于执行器做了抽象, 将其抽象为 Operator 模型, 这个模型中具有可免疫和可回滚的特点, 也就是说在 Operator 或 Action 执行的时候就能够知道预期产生的结果, 并且保证产生预期的结果, 其背后就是基于数据或者规则进行的分析判断.
智能化的最佳实践案例
智能化大促
接下来结合蚂蚁金服的两个具体场景为大家分享智能化的具体实践. 第一个场景是智能化大促, 如下图所示的是蚂蚁金服的简化架构图. 可以看出整个链路非常复杂, 支付的核心链路需要经过很多的系统, 之前都是通过人工方式判断大促场景有几个核心链路, 并人工计算每个系统大约需要处理多少 SQL 以及需要多少机器, 这样非常容易出现计算错误或者遗漏.
此外, 还有一些系统可能并不重要, 但是还是占用了很多机器, 这其实是不合理的. 因此在 618 大促过程中, 蚂蚁金服实现了通过智能方式计算出到底哪些系统和链路是与大促相关的, 在计算出精细化的容量之后就能够实现机器的自动扩容, 之后系统就可以自动实现重新负载均衡.
智能化大促的第二点工作就是持续优化. 每年在蚂蚁内部都会上线很多新系统, 对于大促相关的业务系统, 需要驱动其持续进行优化, 而由于业务迭代太快, 所以这一点无法靠人工完成, 需要能够自动识别整个系统的瓶颈和问题, 并提供优化建议.
第三点就是用户无感知压测, 蚂蚁的线上系统在运行真实业务流量的同时, 也会运行用于检测系统容量的测试流量. 由于双 11 的流量压力非常大, 因此在进行线上压测的时候很容易造成故障, 故障随着 RPC 的传导可能会造成整条链路出现问题, 进而影响用户体验. 针对这个问题, 通过对历史数据的学习和建模, 计算下一次再增加压力是否会造成失败, 从而避免压测影响到用户.
第四点是资源利用率的提升, 蚂蚁将数据库放到容器里面之后也就形成了一个非常大的分布式系统. 该系统的部分业务和双 11 相关, 另外一些则没有关系, 与双 11 有关系的业务系统的 CPU 会非常忙绿, 而没有关系的业务系统的 CPU 将会非常空闲, 想要将系统的资源利用率提升上去就需要 rebalance 等智能化方法.
蚂蚁金服针对于复杂的链路实现了容量预测模型, 与此同时还会对于业务类型进行刻画, 判断链路是否与双 11 相关, 以及其属于 IO 密集型还是 CPU 密集型. 当将这些业务模型刻画好之后, 就能够清楚地了解业务情况, 进而可以实现很多事情, 比如从全局的角度将与双 11 相关与不相关的业务合并部署到同一台机器上, 更合理的利用资源, 而且这些都是系统自动化实现的, 无需人工参与.
另外一点就是持续进行优化, 这包括资源优化和计划状态, 蚂蚁的数据库系统采集了线上运行的所有 SQL 以及 SQL 的运行数据, 对每条 SQL 都进行了参数化以及分库分表归一化建模, 从而了解每条 SQL 大概会访问多少数据, 访问了哪条索引, 最优策略应该是什么样的. 其效果就是对于线上运行的所有核心业务的每一条 SQL, 都可以判断哪条 SQL 不是最优的, 或者数据库访问资源过多需要修改, 并通过钉钉 "@" 具体相关人员进行改进.
稳定性
第二个具体场景就是稳定性, 这里列举了支付宝经常使用的三个场景: 移动支付, 乘公交地铁以及购买理财产品, 而在这些场景对实效性, 成功率等要求时非常高, 在蚂蚁金服这样的体量下, 任何一点点异常都会影响非常多的用户, 促使蚂蚁对稳定性的要求越来越高, 既要具备城市级容灾能力, 也要具备精细化的异常恢复能力.
蚂蚁金服 OceanBase 的容灾机制
下图来自于 Google, 其大概列举了系统中经常会出现的异常类别. 在过去的几年里, 蚂蚁金服投入了大量的资源, 进行架构改造升级, 实现机房, 网络等基础设施层面故障的快速恢复能力. 蚂蚁金服也正在设计系统来发现非通断式异常, 并快速, 自动的将这些异常修复.
Zone/Region 级别容灾
如下图所示的是蚂蚁金服的数据架构, 在业务和数据库中间件的数据架构层能够保证当某一个机房挂掉可以立即切换到另外一个机房. 左侧的图则是 OceanBase 的 "三地五中心" 的设计, 即使某个城市故障都不会影响服务使用, 这样的架构现在依旧在不断进行优化和打磨.
Self-Healing - 精细化异常恢复
精细化异常恢复的主要目的是自动化解决数据库系统的异常. 这里列举了几个例子, 比如下图列举了三个非通断异常: Bad SQL,IO Hung 以及 Software Bug. 目前, 蚂蚁内部的目标就是在 5 分钟之内恢复这些异常, 这显然无法通过人工完成, 而需要自动化手段, 比如基于专家经验的决策树和机器学习决策. Self-healing 会引入一个问题, 那就是如何防止自动化决策错误导致问题恶化, 而目前蚂蚁能够做到了切主不杀事务, 幂等控制和柔性强切以及其他系统防护的工作.
下一步计划
对于未来的计划而言, 首先要让蚂蚁的所有业务域都运行在自治的数据库中, 不再需要 DBA 进行日常维护, 希望能够通过智能数据库解决 90% 以上的问题, 而让 DBA 和架构师更加专注于架构发展和平台设计. 此外, 蚂蚁还希望将经过内部验证的功能和服务来赋能蚂蚁金融云和更多银行等金融机构.
OceanBase 技术交流群
- 想了解更多 OceanBase 背后的技术秘密?
- 想与蚂蚁金服 OceanBase 的一线技术专家深入交流?
来源: https://yq.aliyun.com/articles/689478