首页 > 数据库 >客户说|从4小时到15分钟,一次分布式数据库的丝滑体验

客户说|从4小时到15分钟,一次分布式数据库的丝滑体验

时间:2024-03-11 15:45:14浏览次数:24  
标签:15 数据库 节点 大促 识货 PolarDB 分布式

文 / 识货运维总监 瞿晟荣

识货APP致力于为广大用户提供专业的网购决策指导,为喜欢追求性价比的网购朋友带来及时劲爆的运动、潮流、生活、时尚等网购优惠资讯,产品覆盖国内外主流购物商城。它提供了全球范围内的时尚品牌、潮流单品的信息,帮助用户发现和购买最新、最热、最具性价比的时尚商品。近年来,各大电商平台上的商品信息持续增加,海量商品信息增加了消费者的选购成本。识货从用户视角出发,不断整合行业渠道供给,降低发现和筛选成本,帮助用户更高效地购买到最具性价比的产品。

 

1. 业务高速发展,平台挑战加剧

识货作为一个购物商城,为用户提供最核心的价值就是性价比。它提供的商品比价、价格订阅等特色服务为消费者在选购商品时提供了及时而精准的推荐。这一切归功于识货的数据加工平台,它负责收集同类商品全网渠道的价格信息、折扣信息、满减政策,并计算出同类商品在不同平台不同渠道的售价,通过数据服务平台推送给消费者,以便于准确锁定性价比最高的渠道。然而,随着商品种类的不断增加,大促政策的日趋复杂,数据加工平台面临着巨大的挑战。

 

1.1 大促期间,数据加工性能难以保证

现在各渠道平台大促期间满减、折扣越来越多样,越来越复杂。商品价格变更瞬息万变,为了在第一时间向消费者推送最及时的价格信息,数据加工性能尤为关键。在以往大促期间,最核心的价格变更动作就需要数小时完成,导致大促期间经常会接到业务部门的投诉,比如商品渠道价格波动、更新不及时等。我们也曾尝试使用更大规格的MySQL(104核),通过增加多个只读节点、读写分离、业务模块剥离等一系列举措,但问题始终得不到有效解决。

 

1.2 传统读写分离,延迟不可控,稳定性堪忧

为了缓解数据加工的压力,我们尝试剥离部分只读业务,通过只读实例实现读写分离,这也是大部分业务都会做的选择。然而,识货的情况有些特别,核心数据加工场景的复杂度和并发度都非常高,对数据库的写压力非常大,高峰期单单写的QPS就能突破20万,所以主备延迟是摆在我们面前很严峻的问题,当只读业务长时间读不到准确的数据时,我们又会被迫将其临时搬回主实例,又进一步加剧了主实例的压力,陷入了无穷的死循环当中。同时,过高的主备延迟,也给数据库自身稳定性带来了极大风险。

 

1.3 商城扩品在即,平台处理能力捉襟见肘

识货的GMV已突破百亿,规模持续增长,预计未来几年商城将扩品3~5倍,对识货整个数据加工平台的存储和计算能力都是非常严峻的考验。目前核心业务数据库已经是最高规格,升无可升,在过去的几年大促里,资源使用率偏高,处理能力急需突破。

 

2. 集中分布式一体化,性能提升400%

在过去的几年里,识货试图通过各种方式突破加工平台的性能瓶颈,也调研过市面上主流的分布式数据库产品,尝试通过分布式数据库的替换来解决当下问题。但是,市面上分布式数据库产品的架构、技术各不相同,为了发挥其最佳性能,都需要遵循各自的最佳实践。然而,识货的核心渠道库是自2012年创业以来的第一个库,经过十多年的沉淀,积累了众多业务模块,相互依赖关系错综复杂,且开发设计完全是单机习惯。一来很难将业务进行剥离,二来短期内也不具备分布式改造的可能,所以我们一直未能坚定地迈出分布式升级这条道路。

 

在我们踌躇不前、极度迷茫的时候,阿里云瑶池数据库技术团队从实际情况出发,为我们指出了一条不一样的分布式升级道路。PolarDB分布式版(PolarDB for Xscale,简称PolarDB-X)是集中分布式一体化的分布式数据库,对每一个表来说,既可以打散到不同的节点,也可以单节点存储。我们核心库的特点是表的个数非常多,并且单表体量也达到了亿级别,数据量仍然保持持续增长的势头。结合这两个特性,阿里云瑶池数据库技术团队给出了如下方案:

 

  • 按业务模块区分,各个模块的表:

 

 

以单表形式存储在不同节点;

 

  • 通过不同规格的DN支撑不同业务的特性,避免同一规格的DN带来的资源浪费;

 

  • 通过Locality能力,确保任何表都具备任意节点间腾挪的能力,应对未来业务模型发生变化。

 

识货运维总监瞿晟荣表示:“这就好比我们拿出一个大规格的DN当作收纳桶,所有理不清业务逻辑的表先统一放在这里,一些核心流程上的关键业务表,我们进行单独的DN处理,上面通过CN统一管理调度,对业务代码完全无感,而底层已经悄悄完成了分布式的改造。”

 

在进行分布式改造后,经过大促实战验证,数据处理能力提升6倍,价格变更场景性能提升4倍从小时级别缩短到分钟级别

 

 

 

 

 

3. 平滑迁移,性价比提升500%

PolarDB分布式版除了提供极致的MySQL兼容,确保识货APP业务代码0修改之外,在整个迁移过程中,也提供了丰富的手段,助力我们完成丝滑地迁移。

 

3.1 热力分区图

 

 

 

集中式往分布式的演进过程中,数据会被打散到不同节点,大家普遍担心的问题是:关联的表是否被打散到了不同的节点带来了性能瓶颈?是否访问频繁的表被打散到了同一个节点上?导致该节点资源消耗过大。

 

为了解决上述困扰,PolarDB分布式版提供了热力分区的功能,通过可视化的方式,实时观测各个节点的容量瓶颈和访问瓶颈,准确定位大大降低了迁移和日常运维的难度。

 

3.2 智能压测

 

 

 

核心渠道库数据加工逻辑的大量信息是来自淘宝、亚马逊、拼多多等渠道的实时价格信息,在测试环境下无法模拟,导致我们无法在测试环境进行业务压测,这给割接带来了很大风险。阿里云提供了智能压测方案CMH-DOA(也称frodo),CMH-DOA可以全量录制原生产端MySQL的全量SQL,在目标端PolarDB分布式版进行完整回放。不仅保证执行顺序与生产保持一致,同时也支持倍速回放,能够模拟更大的生产压力场景。让我们对当前数据库实例的处理能力拥有非常好的判断基准,不仅降低了割接风险,也为未来大促扩容提供了很好的参考依据。该工具目前已开源,相信未来会帮助更多的开源或商业用户,让分布式这条路更加丝滑平顺:

标签:15,数据库,节点,大促,识货,PolarDB,分布式
From: https://www.cnblogs.com/aliyunyaochidatabase/p/18066203

相关文章

  • 如何在弹性云主机上部署高效的数据库系统
    本文分享自天翼云开发者社区《如何在弹性云主机上部署高效的数据库系统》,作者:二进制诗人在当今云计算的时代,弹性云主机(ElasticCloudCompute,EC2)为我们提供了前所未有的灵活性和扩展性,使得在云端部署高效的数据库系统成为可能。本文将从选择合适的云服务配置、优化数据库配置、......
  • 洛谷题单指南-线性表-P3613 【深基15.例2】寄包柜
    原题链接:https://www.luogu.com.cn/problem/P3613题意解读:此题很容易想成用二维数组求解,但是最多有10^5*10^5个寄包柜格子,二维数据会爆空间,题目明确各自一共不超过10^7,所以需要动态数据结构vector。解题思路:vector的问题在于需要提前明确空间大小,才能进行随即访问操作,否则可......
  • 洛谷题单指南-线性表-P3156 【深基15.例1】询问学号
    原题链接:https://www.luogu.com.cn/problem/P3156解题思路:简单的数组题,唯一需要注意的是读写的数据量比较大,输入输出最好用scanf、printf100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=2e6+5;inta[N],n,m;intmain(){scanf("%d%d",&......
  • CF1599
    CF1599BubbleCup14-FinalsOnlineMirror(Unrated,ICPCRules,TeamsPreferred,Div.1)CF1599Alink题意给你一个长度为\(N\)的质量为\(A_1,A_2,\dots,A_N\)的数组\(A\)。每个数组中的值表示各个砝码的重量。所有砝码的质量均不相同。你可以把每个砝码放在天平......
  • LeetCodeHot100 283. 移动零 11. 盛最多水的容器 15. 三数之和 42. 接雨水
    283.移动零https://leetcode.cn/problems/move-zeroes/description/?envType=study-plan-v2&envId=top-100-likedpublicvoidmoveZeroes(int[]nums){intr=0;for(inti=0;i<nums.length;i++){if(nums[i]!=0){......
  • 大型数据库应用——一些笔记
    这学期选了大型数据库应用,主要是和java一起用的,然后这里是一些笔记,可能会加上之前的一些笔记,之前学过数据库原理。一、介绍一些数据库1数据库分类数据库根据数据结构可分为关系型数据库和非关系型数据库。非关系型数据库中根据应用场景又可分为键......
  • vs2019单独重新安装python37_64失败解决办法(bilibili上我最早写的是https://www.bilib
    上个周末的时候,我发现用vs2019编写python的时候。代码高亮出现了奇怪的问题,进入解决方案的时候,print还是蓝色的,但是过了几秒钟后就变为黑色了,因此在最开始的时候我试图通过换一个皮肤和在管理扩展里面找扩展来解决,但是还是有相关问题。于是到vs2019对应的python文件夹找问题,目录是......
  • 分布式锁——JVM锁、MySQL锁解决多线程下并发争抢资源
    分布式锁——JVM锁、MySQL锁解决库存超卖问题引入库存扣案例需求背景电商项目中,用户购买商品后,会对商品的库存进行扣减。需求实现根据用户购买商品及商品数量,对商品的库存进行指定数量的扣减publicStringdeductStock(LonggoodsId,Integercount){//1.查询商品......
  • 分布式锁实现——Redis
    分布式锁分布式锁的视线方式Redis实现分布式锁Zookeeper实现分布式锁MySQL实现分布式锁Etcd实现分布式锁实现分布式锁注意的点互斥性可重入性锁超时,防死锁锁释放正确,防误删阻塞和非阻塞公平和非公平Redis实现分布式锁的特点Redis是高性能的内存数据库,满足高......
  • 最新版Access数据库软件下载
    MicrosoftAccess是由微软发布的关系数据库管理系统(RDBMS)。它将MicrosoftJet数据库引擎与图形用户界面和软件开发工具结合在一起,是MicrosoftOffice的成员之一。Access的主要功能包括:创建和管理数据库存储和组织数据访问和分析数据共享和保护数据Access的优势包......