三维家:SaaS的IT规模化降本之道|OceanBase 《DB大咖说》(十一)

OceanBase《DB大咖说》第 11 期,我们邀请到了三维家的技术总监庄建超,来分享他对数据库技术的理解,以及典型 SaaS 场景在数据库如何实现规模化降本的经验与体会。

庄建超,身为三维家的技术总监,独挑大梁,负责三维家的所有IT系统运维与开发工作,为公司的成长贡献了关键力量。他不仅是一位卓越的技术专家,而且随着角色的转变,他现今更多地从业务价值的视角审视技术,对技术的热情与专注始终未减。

庄建超认为技术人要想在工作中更上一个台阶,首先需要沉下心来认真钻研技术,同时对行业也要深入研究,两者结合才有可能更进一步。对于 DBA 的成长,他建议要多读源码,多参与到社区,多交流,多分享,多动手实践。


三维家是一家以家居产业为依托、依靠云计算、大数据和 AI 人工智能等多项核心技术打造的大家居产业云工业软件服务商,连续 5 年上榜广州“未来独角兽”创新企业,先后完成多轮融资,融资总额超过 10 亿元人民币。其一体化云设计软件(CAD+CAM)、数控系统以及前后端一体化智能制造解决方案 SaaS 服务支持着众多门店的经营,拥有广泛的企业客户。

三维家的一体化解决方案覆盖门店的营销、设计以及工厂生产计划管理、加工制造全流程,为全屋定制企业提供 C2M 柔性生产全链路工具。在整个过程中,同一套数据贯穿全流程,包括从最早的设计效果图、到后来的工厂机器生产、再到最后的交付,因此对其底层的数据库有很高的要求。

为了更好地支持业务发展,降低运维成本,从 2023 年下半年开始,三维家开始启动数据库的升级工作,从原来的 MySQL+某国产数据库(以下简称“XDB”)统一迁移到 OceanBase。

一、业务进一步增长,对数据库有了新需求

三维家成立于 2013 年,正值中国经济快速发展的黄金时期,经济的蓬勃成长带动了家装行业的蓬勃发展,三维家的业务也随之高速增长,对数据库的要求也不断提高。

三维家刚成立的时候采用的是某传统集中式数据库。该数据库功能强大,开发人员也熟悉,开发和运维都比较简单,很好地支持了业务发展。但随着公司业务的成长,数据量不断增加,时常需要对数据库进行扩容,扩容成本随之越来越高,压力之下,2017 年三维家把该数据库换成了 MySQL+ 某国产数据库 XDB 的组合。

庄建超是三维家的技术总监,也是三维家最早的技术人员,曾经一个人承担了三维家所有的 IT 工作,从开发到运维。

庄建超解释说,之所以选择 MySQL+ XDB 是由于三维家业务的复杂性。三维家有很多大客户,每个大客户就是一个数据库,客户对数据隔离性有较高要求,所以选择了 MySQL 的分库分表来满足。同时,三维家也存在合库的需求,比如对数据进行统一分析和统计,而 MySQL 可扩展性不够,同时也不支持太复杂的分析需求,所以分析工作就由 XDB 来完成。没有都采用 XDB 主要是成本上的考虑,该数据库节点多导致前期成本较高。

MySQL+XDB 的组合稳定运行了几年,MySQL 负责写,XDB 负责读,一直非常顺利。去年新的问题出现了,更准确地说——是三维家对数据库有了新的要求。

庄建超进一步解释了三维家更换数据库的原因:

第一,需要支持多基础设施的数据库。此前不止一家云厂商出现过服务中断事故,让三维家对稳定性更为看重。三维家的服务对客户很关键,如果停服将直接影响客户经营。因此,三维家考虑进行多基础设施部署,避免因某云服务中断而影响客户业务。如果继续使用 MySQL 的话,那就要在其他云上再复制一份数据,成本将直接翻倍。

第二,简化运维。MySQL 是用分库分表+中间件来解决数据量大和数据的隔离问题的,然后用 XDB 进行合库来解决数据分析问题。两个数据库之间要做同步,数据流程长,还要借助中间件,技术栈复杂,运维成本随之变高。

第三,云成本持续增长。三维家的业务增长很快,数据量同步增长,成本自然也水涨船高,考虑到未来的可持续发展,三维家对降本增效有了新需求。

基于上面这些考虑,去年三维家决定进行数据库升级,并同步启动新数据库选型。

“那时 OceanBase 已经开源,我们在对 OceanBase 进行评估和测试后,发现功能完全符合要求,同时,OceanBase 对 MySQL 的兼容性非常高,因此很快就敲定了 OceanBase。”庄建超表示。

庄建超补充说:决策的背后另一个重要原因是对 OceanBase 的信任。因为它经过了支付宝大规模金融场景的打磨,完全自研,多年成长,其稳定性和可靠性经过了很多客户验证,值得信赖。

二、分库分表加大迁移难度

从 2023 年 9 月份开始,三维家正式启动数据库的迁移工作。截至到目前,三维家已经完成 80% 的系统迁移,只有一些合库还没有合并,目前,这部分工作也在顺利推进之中。

庄建超介绍,三维家的官网系统是第一个迁移到 OceanBase 的系统。由于这个系统以静态页面为主,即使出现了故障也不会直接影响客户的业务,所以选择其进行首位升级。在官网迁移完成后,三维家开始真正进行其他关键业务系统数据库的升级。

“我们对数据库的切换很谨慎,采取两个系统并跑,也就是新旧系统都要同时写,一旦出问题,马上切换回去,保障尽量减少对业务的影响。”庄建超说。

迁移过程中最大的困难也恰恰是同步写,因为要保持两个数据库系统的数据一致性,这个难度比较大。尤其是多对一的合并迁移难度较高:迁移前分库分库表,迁移后合库合表,要确保能回退,数据就得回写到旧的数据库。

“OceanBase 的数据迁移工具 OMS 可以满足一部分数据迁移需求,对分库分表部分就得其他方式来回写了。我们选择的是 Flink CDC,同时也做了很多定制化开发和配置工作。”庄建超说。

为了确保数据库系统迁移成功,三维家做了很多准备工作,从功能测试、压力测试、到流量回放、SQL 优化、再到试点迁移等,以确保在 SQL 语法上兼容、SQL 性能没有问题。比如,针对三维家复杂的业务场景,在迁移过程中,也做了大量索引和执行计划的优化工作。

庄建超说,整体数据库迁移过程比较顺利。在迁移过程中,他也提议 OceanBase 可以进一步增强其监控和告警能力。比如,提供更细粒度的性能监控和提供监控的 API,这样他们可以把性能数据接入大屏做展示。

三、降本增效,效果看的见

随着数据库迁移工作的推进,升级效果也开始逐渐显露出来。

首先,成本下降明显。原有的 XDB 数据库被直接替换,服务器进一步节省,成本降低显而易见。而且,升级为 OceanBase 后,其对数据的高压缩比使得存储空间需求也降低了不少,整体存储成本下降了 30%。

庄建超解释说,MySQL 的数据迁移回报目前还没有充分体现出来。因为三维家需要保障业务稳定,所以目前还是双跑,为确保回退机制可行,目前整体成本还相对较高。如果双跑结束,成本会直接减少一半。

其次,运维复杂度降低。换成 OceanBase 后,原来的中间件没有了,数据库架构进一步简化,故障点更少,稳定性更好,灵活性能提升,接口响应更快。而且部署更加灵活,扩容也非常方便。

第三,对多租户架构的支持。SaaS 平台需要支持多租户,OceanBase 的多副本和分布式架构能够有效地隔离租户数据,保证租户间的数据安全和隔离,为不同客户规模的租户灵活实现提供了很大方便。

“过去用 MySQL 的时候,这一点非常头疼,采用分库分表也是出于这个方面的考虑。”庄建超说。

第四,对分析能力的支持。之所以此前使用 XDB 就是为了满足数据分析的需求,现在一个 OceanBase,TP、AP 同时都可以满足,不再需要进行数据同步,成本下降,运维也变得简单。

庄建超表示,接下来三维家将继续优化 OceanBase,同时,还会进行多基础设施部署,进一步实现多活。OceanBase 支持多基础设施部署,这为三维家提供更多便利。

另外,庄建超还透露,他对向量数据库非常感兴趣,因为三维家正在研发自己的知识库。“听说 OceanBase 正在研究这个功能,如果未来 OceanBase 能支持向量,我们搭建知识库的工作就会简单许多,将为我们业务开展带来很大方便。”庄建超说。


特别感谢徐戟(白鳝)对本期《DB 大咖说》的特别支持。徐戟老师是业内资深 Oracle 数据库优化专家,南京基石数据的 CTO,在数据库领域深耕 20 余年。同时,也是知名科技公众号《白鳝的洞穴》主理人,热衷于分享他在数据库方面的多面见解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分文件编译(简单学生系统)

定义学生基本信息 ①输出所有学生信息 ②删除某个学生后,输出所有学生信息 ③修改某个学生信息后,输出所有学生信息 ④查找某个学生的信息 main.c #include"k11*.h" int main(int argc, const char *argv[]) {struct student p[4]{{"…

注意!年龄越大,社交圈子越窄?其实这是老人的理性选择!数学家告诉你:何时该跳槽,何时该坚守!你必须知道的三个智慧:让你的人生更加精彩!

我们到底应该在什么情况下探索新事物,什么情况下专注于已有的东西呢?本质上来说,这个问题就是在询问,你究竟应该耗费精力去探索新的信息,还是专注从既有的信息中获取收获? 有人采访了临终的老人&#xff0c…

51单片机外部中断(按键识别)

欢迎入群共同学习交流 时间记录:2024/7/2 一、电路原理图 51单片机包含INT0、INT1两个外部中断接口 二、知识点介绍 1.中断寄存器位介绍 (1)TCON定时控制寄存器,位0(IT0)中断INT0请求信号选择位&#x…

win11电源设置

把钩子去掉以后 win11的电脑关机才有用 否则,关机了,电脑也实际上一直在运行

边缘计算网关在现代工业企业中的作用-天拓四方

随着工业4.0时代的到来,数字化转型已经成为工业企业发展的必然趋势。在这一过程中,边缘计算网关以其独特的优势,正逐渐成为工业企业实现智能化、高效化运营的关键技术。 边缘计算网关是一种部署在网络边缘的设备,它集成了计算、存…

nginx 只有图片等静态资源时 监听80端口 会404 NOT FOUND

解决方法 删除 /var/nginx/sites-enabled 原因:当nginx没有设置首页路径index时,sites-enabled目录中配置的优先级会高于nginx.conf 导致404 NOT FOUND sites-enabled文件中的default会将80端口索引至默认值:/var/www/html目录下&#xff…

数据库。

数据库安全性 论述题5’ 编程题10’ sql语言实现权限控制 一、概述 1、不安全因素 (1)⾮授权对数据库的恶意存取和破坏 (2)数据库中重要的数据泄露 (3)安全环境的脆弱性 2、⾃主存取控制⽅法 gr…

【Qt知识】Geometry属性

一、走进Geometry的世界 Geometry属性是Qt框架中用于处理和操作几何形状的一系列类的集合。它包括了QPoint、QPointF、QSize、QSizeF、QRect和QRectF等。这些类分别代表点、大小、矩形等基本几何概念,它们的存在让图形界面的创建变得既简单又直观。 位置和尺寸。 其…

cesium 添加 Echarts图层(人口迁徒图)

cesium 添加 Echarts 人口迁徒图(下面附有源码) 1、实现思路 1、在scene上面新增一个canvas画布 2、通坐标转换,将经纬度坐标转为屏幕坐标来实现 3、将ecarts 中每个series数组中元素都加 coordinateSystem: ‘cesiumEcharts’ 2、示例代码 <!DOCTYPE html> <ht…

武汉星起航:成功挂牌上股交,引领跨境电商行业进入全新发展阶段

2023年10月30日&#xff0c;武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示&#xff0c;这一里程碑式的事件标志着武汉星起航正式登陆资本市场&#xff0c;开启了公司发展的新篇章。作为亚马逊跨境电商领域的领军企业之一&#xff0c;武汉星起航此次挂牌不仅是…

时序约束(二): input delay约束和output delay约束

一、input delay约束 在千兆以太网数据收发项目中&#xff0c;RGMII的数据输入方式为DDR&#xff0c;源同步输入方式&#xff0c;可以用之前提到的分析模型进行约束。 在时序约束原理中我们提到&#xff0c;input delay约束的就是发射沿lunch到数据有效的延时&#xff0c;根据…

comfyui定制

&#x1f31f; comfyui定制AI人工智能公司— 触站AI&#xff0c;绘制智能图像新纪元 &#x1f3a8; &#x1f680;AI绘画&#xff0c;触站AI引领创新潮流 &#x1f680;深圳&#xff0c;这座创新之城&#xff0c;迎来了触站AI&#xff0c;一家专注于企业AI图像领域的技术解决方…

无法下载 https://mirrors./ubuntu/dists/bionic/main/binary-arm64/Packages

ubuntu系统执行sudo apt update命令的时候&#xff0c;遇到如下问题&#xff1a; 忽略:82 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports/universe arm64 Packages 错误:81 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports/main arm64 Packa…

comfyui定制外包

&#x1f308; 最强AI绘画comfyui模型训练、定制服务公司出炉 —— 触站AI&#xff0c;引领设计智能新潮流 &#x1f680; &#x1f3a8; 触站AI&#xff0c;以AI绘画模型训练重塑设计边界 &#x1f3a8;在AI技术的浪潮中&#xff0c;触站AI以其前沿的AI绘画模型训练技术&…

已解决java.awt.geom.NoninvertibleTransformException:在Java2D中无法逆转的转换的正确解决方法,亲测有效!!!

已解决java.awt.geom.NoninvertibleTransformException&#xff1a;在Java2D中无法逆转的转换的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查缩放因子 修改后的缩放变换 …

申请一张含100个域名的证书-免费SSL证书

挑战一下&#xff0c;申请一张包含100个域名的证书 首先&#xff0c;我们访问来此加密网站&#xff0c;进入登录页面&#xff0c;输入我的账号密码。 登录后&#xff0c;咱们就可以开始申请证书&#xff0c;首先说一下&#xff0c;咱账号是SVIP哦&#xff0c;只有SVIP才可以申…

【如何使用RSA签名验签】python语言

文章目录 签名方法异步同步通知数据验签生活号响应数据验签同步响应数据验签 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f388;欢迎踏入我的博客世界&#xff0c;能与您在此邂逅&#xff0c;真是缘分使然&#xff01;&#x1f60a; &#x1f338;愿您在此停留的…

通过MATLAB控制TI毫米波雷达的工作状态

前言 前一章博主介绍了MATLAB上位机软件“设计视图”的制作流程,这一章节博主将介绍如何基于这些组件结合MATLAB代码来发送CFG指令控制毫米波雷达的工作状态 串口配置 首先,在我们选择的端口号输入框和端口波特率设置框内是可以手动填入数值(字符)的,也可以在点击运行后…

Python的matplotlib简单操作及图像闪屏问题

1.显示一个sinx的图像 import matplotlib.pyplot as plt import numpy as np xnp.linspace(0,10,100)#生成0到10 之间 分成100份等间隔 ynp.sin(x) # # plt.plot(x,y)#放入x与y plt.title("ysin(x)")#给图像命名 plt.xlabel("x")#设置x位置的名字 plt.yl…

【CT】LeetCode手撕—19. 删除链表的倒数第 N 个结点

题目 原题连接&#xff1a;19. 删除链表的倒数第 N 个结点 1- 思路 模式识别&#xff1a;删除倒数第 n 个结点 ——> 定义 dummyHead 并用双指针实现删除逻辑 2- 实现 ⭐19. 删除链表的倒数第 N 个结点——题解思路 class Solution {public ListNode removeNthFromEnd(Li…