云平台存储是用来存储数据的,简单的进行数据分类分为应用和数据库数据,其中数据库数据的安全可靠性、完整性、一致性、高性能等要求一直是存储领域里关注的热点,也是传统行业一直担心数据库上云时云平台无法满足数据库的要求。本议题将从数据库性能热点话题入手,谈谈云平台存储项目中如何设计并解决性能热点问题。
本期为大家带来《迈向YB数据时代》2022年夏季刊“集成实施”栏目中的议题四:
关系数据库的性能热点问题,在配置层面及使用层面如何解决?
孔再华 民生银行科技部数据库架构师:
从实际需求来看,关系型数据库上云存在着性能、成本、可用性以及易维护几大核心优势,对于数据库云平台存储方案,互联网数据库云平台存储方案无法落地企业私有云,直接使用分布式存储是行不通的,集中式存储方案性能则会更好,本地盘方案也存在做不到Serverless和无法扩容的问题。因此数据库云平台存储方案还需要进一步探索优化。
一、关系型数据库云原生实践
当遇到云平台存储这个课题时,恰逢笔者在探索关系型数据库上云之路中,也遇到了要如何解决云环境下关系型数据库使用存储的问题。在讨论云平台存储之前,不妨先思考一下为什么企业的关系型数据库也要上私有云?
当前有很多公有云厂商提供了云数据库的服务,适合中小企业以低成本使用数据库。而金融行业公司出于对数据安全以及自身体量和管理经验的考量,更多的还是在考虑私有云的建设。
云原生存在众多收益点:例如标准化、自动化、DevOps集成、故障容忍自愈、平台无关、弹性伸缩、资源整合等等。企业在近几年的探索中,对于私有云的建设和管理也日趋成熟。因此对于无状态的应用迁移至云环境是天然适合的。然而对于传统关系型数据库能否上云,的确有很多需要顾虑的方面。
从技术发展趋势来看, 企业传统架构在走向云,传统运维管理也走向DevOps管理,这两大趋势还是相辅相成的。从实际需求来看,传统关系型数据库上云也存在几大核心优势:
1. 性能优势
轻量化的容器相对于虚拟机的性能优势是非常明显的。这也是企业虚拟化走向容器化的最核心因素。运行在虚拟机上的数据库性能对比同样配置的物理机或者是容器,差异是非常明显的。因此对于运行在虚拟机上的数据库定位,就是容量低性能需求低的业务场景,仅仅是利用虚拟化的高可用性和资源整合优势。因此容器化才是关系型数据库的适用方向。
2. 成本优势
容器化对于资源整合是拥有巨大优势的。参考笔者近期对操作系统CPU数据的分析,可以看到90%的系统CPU使用率在10%以下。当前银行很多都是两地三中心的灾备建设,资源的闲置非常大。如果能够利用好私有云的资源整合优势,将大大降低银行成本。关系型数据上云就是要在保障性能的情况下,实现资源整合,减少成本。
3. 可用性优势
云原生的另外一大优势就是高可用性。因此笔者也一直致力于探索数据库上云符合云原生而不是把容器纯粹当个虚拟机来管理。所以笔者设计开发了openGauss数据库的Operator,把数据库的管理提到Kubernetes这一层,实现数据库节点的故障发现和自愈,充分利用云原生的技术优势。
4. 易维护优势
数据库上云后,实现了更高层次的标准化和自动化,让统一管理更容易实现。云环境的弹性能力也让维护、迁移、扩缩容等维护任务更简单高效。上述优势是数据库上云的动力,然而这里面有个核心问题需要解决:数据库是有状态的服务,也就是数据库上云是依赖存储的。而我们在维护数据库的过程中会发现,其实存储是数据库运行过程中性能最慢的环节。
二、数据库云平台存储方案思考
在数据库云原生方案设计初期,笔者先学习参考了大厂公有云上数据库的云原生方案对于存储的定义和解决方法,也对分布式存储的情况进行了调研。
1. 主流云原生数据库的存储解决方案
当前最具有代表性的云原生数据库是阿里的PolarDB(图1)和Amazon Aurora。这两家都是存算分离的方案。存储都是自己开发的分布式存储系统,通过硬件加速和对数据库的技术改造来解决数据库访问存储的性能问题。但遗憾这些方案无法落地企业私有云。

图1:采用了存算分离方案的PolarDB数据库架构图
2. 集中式和分布式存储方案
云环境下采用分布式存储是看起来非常完美的方案,除了性能。因此我们也对主流的分布式存储做了测试。从测试的部分结论来看,测试Ceph发现在写入并发稍高的情况下,IO的响应时间是比较高的,基本上不能满足数据库的应用需求。而事实上我们也做了在容器环境下数据库使用分布式存储的压测,性能也不好。从这点来看,直接使用分布式存储是行不通的,这也是为什么那些公有云大厂的数据库存储方案要做很多硬件和技术上的改造。
采用集中式存储方案,虽然对于组网会有一定的要求,但性能特点上更符合数据库的应用特点,对比分布式存储方案性能更好。
3. 本地盘方案
这种方案是一种当前关系型数据库对云原生存储的需求妥协。没有特别合适的云原生存储情况下,我选择了用本地盘来保障高性能,因此也无法做到Serverless,数据库节点不可漂移。数据库的高可用只能依赖主从切换的方式来实现。下面是当前的方案架构图(图2):

图2:本地盘方案架构图
如图2所示,本地盘通过TopoLVM插件来管理,可以说是非常不完美的方案。除了做不到Serverless之外,本地盘的扩容也是个问题。如果有更合适的云平台存储方案,这个设计将被进一步改进。当前笔者也在研究数据库适配更高性能的集中式和分布式存储方案, 希望可以取得比较好的效果。
三、数据库云平台存储方案优化方向
关系型数据库比较依赖存储性能。最近分析诊断了一个重要系统的SQL响应率低的情况。大致就是一个重要系统发现每天都有几十笔以上的超过20ms的慢SQL。SQL比较简单平均都在1ms以内。服务器是高配机型,存储用了本地RAID卡带SSD。最终分析是在系统有其他IO背景压力情况下,数据库的IO响应时间上升导致。可见IO响应时间对于关系型数据库的重要性有多高。
关系型数据库的IO写行为主要分数据写和日志写。其中数据写是异步的,基本吞吐量够就没什么性能问题。但是日志写是顺序的,一旦其中一个IO慢,就会导致数据库的写交易堵塞,这也是IO延时如此重要的原因。
因此优化数据库云存储方案的最主要方向就是要高性能(低时延),其次是Serverless云原生服务。
1. 高性能(低时延)
实现高性能的方案有下面一些方向:
1)采用硬件加速。例如采用RDMA,NVMe等更快的传输协议。采用保电缓存来提高速度。
2)数据日志分离。例如数据和日志分盘实现资源隔离,日志盘采用更高服务级别的盘。
3)减少背景压力的影响。例如利用QoS限制不同的应用采用不同的资源控制。
4)减少数据库自身IO行为。例如传统的思维是利用更大的缓存,提高命中率。而激进点,直接改造数据库的技术架构,减少IO读写需求。这个也是当前几个大厂普遍使用的方式。
2. Serverless云原生服务
在云环境下实现Serverless是非常重要的,数据库Pod能够跨Node节点漂移需要云环境里的存储插件和存储协作支持。云原生环境下存储插件的高级服务也非常重要。
1)声明式的存储全生命周期管理,支持创建,删除,扩容PV和PVC等。轻松实现存储分配和回收。
2)声明式QoS管理,做好资源管控隔离。
3)高可用能力支持,故障迁移,在线扩容等。
最后总结,云平台存储需要像本地盘一样快,像分布式存储一样好用。
胡晶玉 海通证券数据库架构师:
关系型数据库的性能问题的产生很大程度上都是因为热点问题的存在,热点问题主要是因为硬件、数据库参数配置、数据库设计、应用程序设计、数据库日常维护对于性能的影响。只有在问题发生前发现问题、解决问题,才能避免性能问题的发生。
Bryan 某国有大型银行资深架构师:
类似双十一这样具有高并发、大数据量、持续时间短的业务场景容易引发数据热点问题,但是,系统优化不仅需要在数据库层面采用业务解耦、业务限流、分库分表等方式进行优化,更需要系统的架构优化,是一项复杂且优化迭代的事情。
2008年阿里创办双十一购物节,至今已经过去十多年。如今各类网商购物节、秒杀活动、春节购票、纪念币预约等各类抢购活动层出不穷。这些商业活动在技术上对项目的架构设计要求较高,也成为检验程序员技术功底的试金石。即使一些多年研发经验的程序员,也可能因没有类似业务场景而缺少实战经验,没有设计优化思路。所以,本文拟结合个人经验,浅析对数据库热点数据场景的设计和优化。
这些业务场景一般具有高并发、大数据量、持续时间短的特点。以双十一购物节为例,国有大型银行的个人账号数量在十亿级别。零点时TPS峰值可高达2万多TPS,但是,一般持续数十分钟就开始快速下降。如果系统难以支撑这段业务高峰期,就可能会出现业务请求响应缓慢或者系统Hang住等生产故障,从而引发社会舆情,影响企业声誉,甚至引起监管部门关注。
在技术层面上,数据热点的高并发请求,可分为两类:
一类是非关联数据的大量操作,如日志流水记录等。短时间内购物流水记录保存到数据库,但这类任务没有因果、时序等关联关系,后面读取时因各不相关而不会成为热点数据。这类场景解决方案相对容易,一般有分库分表、消息队列等方式。分库分表可将数据存储分散到多个数据库或者数据表,处理请求时可将业务请求引流到对应的数据库或者表中。具有良好扩展性的消息队列(如Kafka、Pulsar等)可缓存瞬时的大量读写请求,通过拉长处理时间降低数据库压力。
一类是关联数据的高频操作,如商品库存量、账户余额等。秒杀场景中数据库商品存量会被高频修改。为防止并发操作出错,每次修改时进行数据资源加锁。锁操作具有排他性,所以其他操作必须等待锁资源的释放。这就是大家熟知的热点数据问题。这类场景与具体业务相关,没有一成不变的解决方案,整体解决思路就是“分而治之”,将热点压力分布到不同时间或者不同空间。下面就结合笔者多年工作经验,介绍一些常见的方法。
1. 业务解耦。由于热点数据操作具有排他性,资源锁定时间越短,其他操作的等待时间越短。数据资源锁定通常在一个数据库事务内完成,因此,尽量将一个长事务拆成多个短事务。以商品秒杀为例,消费者只关注瞬间抢到心仪商品,后续付款时间要求已不再那么高。因此,一个完成抢购、付款的事务可拆成2个事务;一个完成付款、短信通知的事务可拆成2个事务。这种业务操作解耦需要技术人员与业务人员做好需求分析,达成一致意见。
2. 业务限流。从并发量看,“接入层→服务层→数据层”的请求链路会形成一个并发请求量逐步降低的倒三角形,接入层数十万的TPS请求到达数据层时,可能只有几百并发。以秒杀场景为例,接入层并发量可达日常的数百倍,甚至上千倍。可以通过接入层的负载均衡等进行限流,部分请求尚未真正到达数据库已被处理,有效降低了数据库压力。响应客户端请求时需注意良好的用户体验,提示系统繁忙或者产品已抢光等。
3. 分库分表。将高频更新的数据进行拆分,保存到多个数据库或者数据表中。比如,商品库存量是10万件,将其拆分成100条库存记录,每条库存记录是10万/100=1000件。客户请求可均衡分发到这100条库存记录对应的服务层。20万TPS的请求分散到每条库存记录就变成了20万/100=2000并发,极大降低了并发压力。
4. 数据缓存。对一些频繁读取的数据,可通过内存缓存提升读写速度,降低数据库压力。这类数据一般具有读多写少的特点。以银行个人客户信息为例,将转账、取款等多场景最常读取的客户信息数据缓存到Redis,可有效应对每日几十亿次的查询,对于大内存的服务器,甚至可缓存全量数据。个人客户信息更新频度低,修改时同步更新缓存中数据,可能增加增、删、改等写操作的延迟,但因这类操作频度低,在可接受范围内。设计时需关注缓存雪崩和缓存击穿等问题。
5. 硬件优化。从硬件上看,数据库操作兼具IO密集型和计算密集型的特点。高配CPU可提升SQL解析和执行速度;较大内存可缓存更多数据,提升缓存命中率,降低磁盘IO压力;高IOPS磁盘可加速数据定位和查找。开放平台的商用服务器,1T内存和NVMe硬盘已日渐成为业界主流。对于热点数据的数据库可通过这种垂直扩容的方式进行硬件优化升级。
6. 错峰处理。结合数据库特点和业务处理高峰值,可对部分业务处理进行提前或者延迟处理。比如,银行在每晚零点进行日终切换,并启动批量处理。在双十一等特殊业务场景时,零点还要面对高并发的支付压力,数据库压力较大。可以通过错峰处理的模式降低数据库压力,提前完成日终切换,延迟启动零点后的日终批量。由于峰值具有持续时间短的特点,按照经验,大概00:30AM即可启动日终处理。动账通知消息则先缓存到消息队列,由消息平台通过异步形式逐渐完成动账短息发送。
数据库的数据热点问题源自高并发的业务请求,但是,系统优化不仅需要数据库的优化,更需要系统的架构优化,是一项复杂且优化迭代的事情。实践是检验一切的唯一标准,在完成优化改造后,还需要使用全链路压测实测系统服务能力,找出性能瓶颈点。每年双十一、纪念币预约等重要时点,银行业一般会提前数月设定优化目标,通过不断的优化和实测优化系统,最终确保顺利度过业务交易高峰期。
通过几位实践经验非常丰富的专家分享,希望让大家对云平台存储有更深入的理解,消除顾虑,为未来更多的应用迁移上云和通过云原生技术重构业务提供帮助。
阅读更多《迈向YB数据时代》精彩内容,请识别以下二维码:

《迈向YB数据时代》
数据,作为企业最核心的战略资产,正在由于规模越来越大变成一只令人恐怖的怪兽。在人类数据应用规模即将进入YB时代的当下,如何存好、用好、管好海量数据成为大中型企业普遍面临的巨大挑战。《迈向YB数据时代》,由twt社区和华为存储用户俱乐部联合主办,凝结中国一线用户中应用创新技术专家的具有代表性、前瞻性的技术洞见、实战经验、同行共识,从趋势、架构、实施和运维四大方向,为中国大中型企业应对数据及存储管理中的重大应用挑战提供代表性的参考指南。“乘众人之智,则无不任也;用众人之力,则无不胜也。”让我们一同携手,从容迈向YB数据时代!
《迈向YB数据时代》2022年夏季刊以云平台存储为主题,帮助企业针对云平台存储建设,厘清需求、辨析不同需求场景下不同技术路线的利弊、指明建设关键点和挑战,形成有助于企业理性决策参考的用户群体共识。
2022年夏季刊【集成实施】议题二:云平台存储项目实施过程中的配置关键问题如何解决?
2022年夏季刊【集成实施】议题三:云平台存储平台实施过程中如何利用自动化配置?
点击阅读原文,到社区原文下与更多同行交流探讨↙↙↙

*本公众号所发布内容仅代表作者观点,不代表社区立场






