存储空间压缩6倍 ,多点DMALL零售SaaS场景降本实践

🧑‍💼 作者简介

冯光普:多点 DMALL 数据库团队负责人,负责数据库稳定性建设与 DB PaaS 平台建设,在多活数据库架构、数据同步方案等方面拥有丰富经验。

杨家鑫:多点高级 DBA,擅长故障分析与性能优化,喜欢探索新技术。

多点 DMALL 作为中国及亚洲最大的零售云解决方案数字零售服务商,是中国唯一的端到端全渠道零售云解决方案服务商,目前,其业务据点覆盖六个国家和地区,商业模式受到广泛验证,其发展历程可以说是中国乃至世界零售数字化进程的缩影。

但在业务高速增长、成果光鲜亮丽的背后,多点 DMALL 也面临着诸多来自零售 SaaS 场景和业务系统瓶颈的挑战,本文针对零售 SaaS 场景数据处理的痛点,从业务视角出发,讲述多点 DMALL 如何在做到保障业务数据库稳定可靠的同时,还能兼顾更高的读写性能与更低的存储成本。

图片

多点 DMALL 服务对象横跨国内、海外等众多零售商,在国内有物美、中百等大型商超,覆盖麦德龙、Seven Eleven 711 便利店等跨国零售商。同时,还为众多海内外品牌商提供服务,让品牌商、供应商、零售商能够链接起来,让数据和信息更好地流动,让服务对象能够更好地支撑服务 C 端用户。

从生产商、品牌商、供应商,再到各个商场门店的零售商,最后到消费者,不难想象,超长的服务链路会产生超级庞大的数据量,系统的复杂度也将随着数据量呈指数级增长。在此背景下,多点零售 SaaS 系统数据库面临三大难题:

第一,运维复杂度高。多点 DMALL 使用微服务架构,全流程业务环节多,系统应用规模大,对应数据库的数量超过了 500 个。且随着系统不断迭代,数据的规模还在持续增加,运维管理难度越来越大。

第二,业务增长快,水平扩展需求增多。随着业务的增长,我们制定了出海战略,需要在海外展开业务,基于地区数据安全法的要求,需要独立部署一整套全新的系统去承接海外业务流量。在初始的部署阶段,对后期业务规模及数据增长速度是难以准确预估的。因此,数据库资源在初始阶段的分配就变得十分困难。为了节约成本,常见的做法是给到较少的部署资源。但很快我们发现,业务的快速增长,数据的增长特别迅猛,带给我们的是如何快速扩容这一难题。

第三,需要在同一个集群中服务大量商家。便利店/连锁商超的 SKU(最小存货单位)规模,从几千到几万,我们很难做到给每个商家独立部署一套系统。因此,我们 SaaS 系统支持上百个中小商家客户,所有商家产生的数据,在底层共享数据库资源。还有一个显著特点,在我们系统中存在非常大的单个租户,比如大型连锁商超,我们希望能让大型连锁商超所在的租户与其他租户有一定的资源隔离。

综上,我们希望数据库能够支撑庞大数据规模,还能应对数据快速增长。

图片

为了解决上述难题,我们开始了数据库选型。由于分布式数据库支持更大的容量规模,具备透明扩展的能力,提供金融级数据安全,并且可以提高开发效率以及降低运维成本,能够更好地支撑业务发展。因此,我们坚定地认为它是数据库未来的趋势,此次选型仅调研了分布式数据库产品。

(一)基于业务的选型考虑因素

首先,从扩展性考虑,我们有很多 MySQL 单库数据量超过了 4TB,并且还在快速增长。我们将最大 MySQL 切换到分布式数据库后,数据增长到了 29TB。对于数据快速增长及面临的 MySQL 容量瓶颈,DBA 非常担忧:

  • 要么我们不断推动研发清理数据,做数据归档,然而结果往往很被动,因为研发的重点工作是业务需求迭代;

  • 要么继续扩展磁盘,如果是在云上,扩展空间比较容易,云厂商提供的块存储单盘可以达到 32TB 甚至更大,但数据继续增长,仅仅是将风险延后, 治标不治本, 后续会更加被动。

当然,我们还可以选择分库分表的方案,但这是一件操作繁琐、风险很高的事情,且需要耗时数月,因为 SQL 能力有损,代码改造不可避免。

因此,我们希望利用分布式数据库透明可扩展的能力,平滑支撑业务快速增长。

首先,从运维成本考虑,在保证系统稳定性前提下,降低运维复杂度。假设 MySQL 中的一个 database 是一颗蛋,一个 MySQL 实例是一个篮子,那么部署 1000 个 database,应该放到多少 MySQL 实例中?把哪些库放在同一个实例中?如果把两个对资源要求都很高的重要库放在同一个实例中,就有可能会互相抢占资源。还有,例如支付类的数据量虽然不大,但对业务的要求很高,也不能和其他库放在同一个实例中。

因为业务不同,优先级不同,数据增长速度不同,QPS 要求不同,所以 DBA 常常需要 “挪蛋”。哪怕抛开资源成本不谈,本身的运维挑战就很大,我们希望分布式数据库可以解决这个问题,帮助 DBA 去自动 “挪蛋”。

图片

其次,从高可用考虑,期望保证集群高可用能力。运维 MySQL 集群,我们基本都是使用 MHA、Orchestrator 去实现高可用,但他们都是“外挂”形式的,本质上是解决不了网络分区导致的脑裂问题,因为数据库和 HA 组件之间,是两个独立的软件,不在同一个进程里,他们之间没有一致性协同控制。

对于 MySQL,Group Replication 这类高可用架构,其内置实现的高可用是可靠的,它与 OceanBase 或者 TiDB 等分布式数据库一样,是基于Paxos 或者 Raft 分布式一致性协议,可以实现 RPO=0,RTO<30s。

图片

(二)产品选型测试数据

基于上述选型因素,我们选择了原生分布式数据库 OceanBase,并进一步对比了 OceanBase 与MySQL 在表读写、表只读、表只写等方面 QPS 的表现,以及二者在存储成本方面的表现。下表为此次测试相关配置。

OceanBase

MySQL

社区版本

v4.1.0

v5.7.16

内存配置

租户memory_size 16G

innodb_buffer_pool_size 16G

单机器配置

32C RAID10 SSD

32C RAID10 SSD

刷盘配置

默认强制刷盘

sync_binlog=1

innodb_flush_log_at_trx_commit=2

并发数

5,10,20,30,60,120

5,10,20,30,60,120

测试模式

read_write,read_only,write_only

read_write,read_only,write_only

单次测试时间

300s,共18种测试(并发数x测试模式)

300s,共18种测试(并发数x测试模式)

每种测试方法

obd test sysbench(obd自带)

会先 prepare、再 run、再cleanup

sysbench prepare

sysbench run

sysbench cleanup

在 OceanBase 与 MySQL 配置相同的情况下,对比 10 张 3 千万 sysbench,我们发现当并发数小于 200 的时候,MySQL 的表现略好于 OceanBase。但无论是 QPS 还是延迟,随着并发数的上涨,OceanBase 的性能都会逐渐接近 MySQL。

(三)OceanBase 不同配置的对比

对于单机部署的模式,选择通过连接 OBProxy 访问 OBServer 还是直接 OBServer,也会影响其在 10 张 3 千万 Sysbench 表读写 QPS 的表现。

我们来看选择连接 OBProxy 和选择直连 OBServer 时的表现,可以看到直连 OBServer 性能比通过 OBProxy 连接的性能高 30-50%。

所以对于单机部署的模式来说,我们建议直接 OBServer,避免通过 OBProxy 访问 OBServer 多走一次网络带来的额外代价。

图片

在不同租户内存配置下,性能也会有所不同。可以看到 32GB 租户内存相比 16GB 租户内存,性能提升约 14%。

(四)OceanBase 与 MySQL 表空间对比

在生产环境监控快照场景,将 20 张表共 5 亿数据量从 MySQL 迁移 OceanBase,表空间占用降低 6 倍。 

图片

基于上述测试数据,我们最终决定上线 OceanBase,总的来说:

  • 生产环境监控快照场景 MySQL 存储(单副本)对比 OceanBase 存储(单副本),数据压缩率为 6:1,OceanBase 的数据压缩比优秀;

  • 单机部署并且连接 obproxy,在并发度较低时,OceanBase QPS 和平均延迟表现稍逊 MySQL(最低 QPS 也过万,租户内存越高 QPS 性能越好;最低平均延迟 3ms)。在并发度逐渐上升的过程中,OceanBase 各项性能的提升比例会高于 MySQL(当并发度超过 200 之后,OceanBase 各项性能会逼近甚至超过 MySQL);

  • MySQL 一层架构、OceanBase 二层架构(obproxy + observer,单机部署时直连 observer 比连 obproxy 性能会提升 30%~50%)。每多一层,网络层面的延迟消耗会增加。

图片

第一,OceanBase 是单机分布式一体化数据库。从两个方面来讲:单机是指性能可以像 MySQL 单机一样做到低延迟、高性能;分布式是指当我们需要去规模化扩容时可以轻松扩展。那这两个特性可以帮我们解决什么问题呢?

从业务发展阶段及价值来看,在业务初期,数据量较小,享受 MySQL 般极致性能;在业务高速增长期,可以透明扩展,几乎不限容量;在业务的全生命周期里,可以轻松做到不改代码、不停机迁移,并保证高性能。

第二,OceanBase 作为原生的分布式数据库,天然具备分片自动迁移、负载均衡的可扩展能力,可以在业务无感知的情况下透明扩缩容。基于 Paxos 协议的极致追求,OceanBase 4.x 版本进一步的极致优化,可以做到 RPO=0,RTO<8s,保证系统高可用。

第三,OceanBase 通过最小化分布式开销的架构设计保证数据库高性能,而 OceanBase 的高压缩比相对 MySQL 节省成本6倍以上。同时 OceanBase 多租户十分契合 SaaS 客户的业务场景,资源隔离、扩缩容非常容易。

分布式数据库的数据处理涉及内存、磁盘、网络交互,在延迟方面,内存中读写数据在 0.1 微秒级别,SSD 延迟约为 0.1 毫秒,机房内网络延迟约为 0.1 毫秒,同城机房间延迟约 3 毫秒。整体来看,内存的读写延迟与 SSD、网络之间,相差了 100-1000 倍;吞吐方面,内存读写可达到 100GB/s,而 SSD 约为 1~2 GB/s,万兆网络约为 1.2GB/s,内存与 SSD、网络之间,吞吐能力相差约 100 倍,差了两个数量级。

MySQL 作为单机数据库,InnoDB 和 Server 层是在同一进程中,数据交互非常高效,在性能和延迟方面,基本是无敌的。但对于分布式数据库来说,往往采用了计算存储分离架构,由于计算和存储层之间网络 I/O 开销不可避免,这种设计上就带来的性能瓶颈很难被优化。

OceanBase 的架构设计独特之处就是 SQL引擎,存储引擎,事务引擎实现在一个进程里,OBServer 既做计算又做存储。应用通过 OBProxy 连接 OBServer 集群,OBSever 节点会把数据路由信息上报给 OBProxy,OBProxy 在接收到应用层 SQL后,根据路由信息,直接转发 SQL 到最合适的 OBSever 上去执行。如果数据都在 1 个 OBServer 节点上,那么 SQL 执行过程就是单机的,类似于 MySQL,最大程度减少了网络 I/O 。

图片

(一)为什么 OceanBase 性能更好

当数据量大时或者更高并发时, OceanBase 性能明显优于MySQL, 于是我们对OceanBase 架构进行深入研究。

第一,OceanBase 同时兼具单机低延时、分布式高吞吐特性。在面对生产业务数据时,OceanBase 单机事务占比可以达到 80% 以上,因为 OceanBase 中,数据分片的粒度是一个表或分区。因此,如果更新的只是一张非分区表,或者分区表的单个分区,那么它必定是一个单机事务。更进一步,如果事务中涉及的多个表,都在同一台机器中,也会是单机事务。

第二,通过 Table group 优化跨机 join,可以将跨机事务优化成单机事务。分区粒度的设计,可以保证 80% 的事务是单机的,再通过 Table group 机制优化高频的跨机 join 后,单机事务占比可以进一步提升,如果整个业务中有 90% 以上的事务都是单机事务,性能肯定会很好。

第三,系统会通过 Query 优先级的区分,使得小查询优先,大查询最多占用 30% 工作线程,通过 arge_query_worker_percentage 配置,在没有小查询时,大查询可用到 100% 工作线程。整个机制类似于高速公路通行规则,例如,高速公路有 3 条车道,如果 3 条车道都有车,那么后车很难超车。如果制定一个规则,大车只能走最右侧车道,小车还有两个车道可以通行,这样的运行机制就能很好地预防慢 SQL、大查询堵塞或拖垮系统。

以上三点,来自于架构设计,以及实践中的优化,是保证 OceanBase 高性能的原因。那么,为什么 OceanBase 能够在拥有更高性能的同时,成本却更低呢?

(二)为什么 OceanBase 成本更低?

OceanBase 使用 LSM-Tree 存储引擎,同时支持编码压缩和通用压缩,具有高压缩比,根据我们的测试数据(见下图)可看出集群存储空间相比 MySQL节省 75%,成本更低。

图片

随着多点 DMALL 业务的发展,数据量激增,节点数也在呈指数级变化,眼看着MySQL 的成本很快将超过 OceanBase。如下图所示,6 倍压缩是我们在真实生产环境中得到的测试结论。未来业务数据一直增长,OceanBase 可以不停地加新的节点,而对应的存储成本的增长却是远远慢于 MySQL的。

图片

(三)OceanBase 的多租户和资源隔离能力

OceanBase 的多租户特性更契合 SaaS 场景,从租户间的资源隔离能力与租户的弹性伸缩能力可见一斑。

  • 租户之间的资源隔离能力:OceanBase 的多租户是从CPU、 内存、I/O 上进行物理隔离,这非常关键,保证了业务之间不会出现资源争抢,相互影响,不会因为一个业务而影响其他的租户。

  • 租户的快速弹性伸缩能力:对于一个租户而言,假设有 3 个 Zone,每个 Zone 有 2 台机器,一共 6 台机器,每台机器 有 1 个资源单元。如果想去扩容,只需要一条 SQL语句,就可以加上 Zone 4、加上 Zone 5,变成更多的 Zone,从 6 个资源单元变成了 10 个,轻松完成水平扩容。同时垂直类的扩容也很简单,比如初期给定的资源是 2C8G,业务增长后,又不想加机器,可以把资源单元从 2C8G 变更为 6C12G,整个过程是动态无损的,业务无感知。这对 DBA 来讲也是一条 SQL 就能搞定,极大降低了工作量。因此,多租户能力很好地解决了 SaaS 场景需要部署一套系统,想要节省成本且方便后期扩容的需求。

图片

图片

多点 DMALL作为 SaaS 场景服务商,本身面临着数据库多、数据增速快、资源成本高、运维难度大等诸多痛点。分布式数据库可以很好地支撑业务增长,提升开发效率,解放 DBA,是未来数据库转型坚定的方向。经过探索测试,验证了 OceanBase 在扩展性、性能、成本方面的优势,符合当前业务发展的需求,且多租户能力方面与零售 SaaS 场景非常契合,后续必定会有更加深入的合作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/69659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口参数校验

方式一&#xff1a;使用hibernate-validator注解方式参数校验 类似的框架太多了。缺点&#xff1a;返回的提示信息顺序不太确定 文档&#xff1a;https://hibernate.org/validator/documentation/ 参考资料&#xff1a;https://blog.csdn.net/weixin_45080272/article/details…

实战 - Restful APi 格式规范

文章目录 1. 特征2. 优点3. 动作1. GET 获取资源2. POST 创建资源3. PUT 整体替换4. PATCH 部分替换5. DELETE 删除资源 4. 示例 RESTful是一种API的设计风格&#xff0c;他和GraphQL &#xff0c;JSON-RPC&#xff0c;WebService类似&#xff0c;用于定义在CS、BS架构下暴露服…

OpenCV(十二):图像透视变换

目录 1.透视变换介绍 2.计算透视变换矩阵getPerspectiveTransform(&#xff09; 3.透视变换函数warpPerspective() 4.demo 1.透视变换介绍 透视变换是一种将原始图像映射到目标图像平面上的投影变换&#xff0c;又称为四点变换。 透视变换矩阵的一般形式如下所示&#xff…

Etherpad安装手册(win10 64位电脑)

Etherpad安装手册 我使用的为win10 64位电脑 一、按照教程下载安装Etherpad 按照该文章下载安装&#xff0c;下面记录我的过程 1.下载etherpad 2.解压缩etherpad到d盘 3.双击start.bat&#xff0c;启动编辑器服务 注意&#xff1a;可能出现问题如下图&#xff0c;跳转二 4.在…

websocket--技术文档--spring后台+vue基本使用

阿丹: 给大家分享一个可以用来进行测试websocket的网页&#xff0c;个人觉得还是挺好用的. WebSocket在线测试工具 还有一个小家伙ApiPost也可以进行使用websocket的测试。 本文章只是基本使用--给大家提供思路简单实现&#xff01;&#xff01; 使用spring-boot建立一个服…

【Vue】 Vue3 安装说明,适合小白新手

1、独立版本 我们可以在 Vue.js 的官网上直接下载最新版本, 并用 下载 Vue.js https://unpkg.com/vuenext 2、使用 CDN 方法 以下推荐国外比较稳定的两个 CDN&#xff0c;国内还没发现哪一家比较好&#xff0c;目前还是建议下载到本地。 Staticfile CDN&#xff08;国内&am…

Java低代码开发:jvs-list(列表引擎)功能(一)配置说明

在低代码开发平台中&#xff0c;列表页是一个用于显示数据列表的页面。它通常用于展示数据库中的多条记录&#xff0c;并提供搜索、排序和筛选等功能&#xff0c;以方便用户对数据进行查找和浏览。 jvs-list是jvs快速开发平台的列表页的配置引擎&#xff0c;它和普通的crud 具…

什么是SpringCloud Eureka服务注册与发现

&#x1f600;前言 本篇博文是关于SpringCloud Eureka 介绍&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&…

CS420 课程笔记 P4 - 以16进制形态编辑游戏文件

文章目录 IntroductionFinding save filesStringsUnicodeExample!Value searchHealth searchConclusion Introduction 这节课我们将学习编辑十六进制&#xff0c;主要用于编辑保存文件&#xff0c;但十六进制编辑涉及的技能可以很好地转移到&#xff1a; Save file editingRe…

Flutter实现CombineExecutor进行多个异步分组监听,监听第一个异步执行的开始和最后一个异步执行结束时机。

1.场景 我们在调用接口时&#xff0c;很多时候会同时调用多个接口&#xff0c;接口都是异步执行&#xff0c;我们很难知道调用的多个接口哪个会最后执行完成&#xff0c;我们有时候需要对最后一个接口执行完成的时机监听&#xff0c;所以基于该需求&#xff0c;设计了CombineE…

Shell 运算符及语法结构

目录 一、Shell运算符 1.1 表达式expr 1.2 运算操作 1.3 操作实例 二、Shell条件判断 2.1 基本语法 2.2 值、权限、类型、多条件判断 三、Shell流程控制 3.1 if 流程语法 3.2 case 流程语法 3.3 for 流程语法 3.4 内部运算符 3.5 while循环流程语法 四、Shell读…

如何将两个pdf合并成一个?pdf合并技巧分享

在日常工作过程当中&#xff0c;我们经常需要处理一些文件&#xff0c;而文件的处理往往是琐碎的&#xff0c;想要提高工作效率&#xff0c;需要选择一些合适的方法&#xff0c;并掌握一定的技巧&#xff0c;那么&#xff0c;如何将两个pdf合并成一个?pdf合并技巧有哪些呢?接…

AFG EDI 解决方案

AFG一直是汽车行业出境物流的专家&#xff0c;不仅运输汽车&#xff0c;同时也提供模块化IT解决方案&#xff0c;用于接收、控制、互联以及整个车辆调度过程的可视化和监控。 对于物流行业而言&#xff0c;如果已经确定了供应链整合的目标&#xff0c;但却没有明确的计划及足够…

mac下配置JDK环境

一、下载安装 下载地址&#xff1a;Java Downloads | Oracle&#xff0c;选择适用于Mac OS的JDK版本&#xff0c;点击下载即可。 下载完之后&#xff0c;直接安装&#xff1a; 安装过程非常简单&#xff0c;按“继续”按钮一直下一步即可。 二、配置环境变量 上一步骤&#x…

Opencv 图像金字塔----高斯和拉普拉斯

原文&#xff1a;图像金字塔----高斯和拉普拉斯 图像金字塔是图像中多尺度表达的一种&#xff0c;最初用于机器视觉和图像压缩&#xff0c;最主要用于图像的分割、融合。 高斯金字塔 ( Gaussian pyramid): 高斯金字塔是由底部的最大分辨率图像逐次向下采样得到的一系列图像…

企微SCRM营销平台MarketGo-ChatGPT助力私域运营

一、前言 ChatGPT是由OpenAI&#xff08;开放人工智能&#xff09;研发的自然语言处理模型&#xff0c;其全称为"Conversational Generative Pre-trained Transformer"&#xff0c;即对话式预训练转换器。它是GPT系列模型的最新版本&#xff0c;GPT全称为"Gene…

指针进阶(一)

指针进阶 1. 字符指针面试题 2. 指针数组3. 数组指针3.1 数组指针的定义3.2 &数组名VS数组名 3.3 数组指针的使用4. 数组传参和指针传参4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参 前言 指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接…

NLP(2)--Transformer

目录 一、Transformer概述 二、输入和输出 三、Encoder 四、Decoder 五、正则化处理 六、对于结构的改进&#xff1f; 七、AT vs NAT 八、Cross-attention 一、Transformer概述 Transformer模型发表于2017年Google团队的Attention is All you need这篇论文&#xff0c;…

蓝桥杯打卡Day1

文章目录 全排列八皇后 一、全排列IO链接 本题思路:本题是一道经典的全排列问题&#xff0c;深度优先搜索即可解决。 #include <bits/stdc.h>constexpr int N10;std::string s; std::string ans; int n; bool st[N];void dfs(int u) {if(un){std::cout<<ans<…

前后端数据加密传输基于AES+RSA实现

前后端数据加密传输基于AESRSA实现 什么是AES和RSA AES AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它的加密速度快&#xff0c;安全性也比较高&#xff0c;是目前广泛使用的加密算法之一。AES的密钥长度可以选择128位、192位和…