后分库分表时代的数据库新选择:二维火搭载OceanBase再出发

news2025/1/11 10:57:45

如今,在中国任意走进一家餐饮商户,不论其规模大小,扫码点餐、自助点餐机、商家点餐小程序等已经基本成为标配。随着餐饮行业数智化持续加速推进,餐饮 SaaS 已经逐渐成为商户们的“必选题”,二维火便是这“必选题”之一。

2007 年,二维火发布餐饮管理系统 1.0,深耕餐饮 SaaS 领域十余年,目前,二维火已经形成涵盖智能化找店、点餐、营销、管理、供应链服务的全产品矩阵,服务商户 49 万余家,服务范围覆盖 400 多个城市,注册会员超 2 亿。

餐饮 SaaS 有一个特点,中午、晚间点餐高峰期系统高并发,大量订单的写入和查询对系统的抗压能力要求很高。作为 Cobar 长期用户之一,单点瓶颈的消除在过去对业务稳定发展有很大帮助,但伴随着应用和高可用性上的限制,以及运维复杂度的增加,对业务未来的升级创新,二维火还是感受了到掣肘。近期,二维火开始选型满足其业务长远发展的分布式数据库,本文由二维火运维总监三七携手 OceanBase 解决方案架构师孙鹏 从“分库分表”出发,为大家阐述二维火选型新数据库(OceanBase)背后的考量。

 

分库分表的诞生

 

21 世纪的第 1 个十年,互联网产业蓬勃发展,面对互联网海量数据存储与处理的需求,在扩展性上存在瓶颈的传统商用关系型数据库越发显得捉襟见肘。NoSQL 数据库如 Redis、MongoDB 等的快速、可扩展特性在特定场景优势明显,可以作为关系型数据库的有效补充,却不能完全取代。

当硬件发展的速度已经跟不上业务需要,传统商用关系型数据库又面临着高昂的 License 费用,头部互联网公司自然开启新路径探索。

分库分表方案在时代的大背景下应运而生,化整为零,分而治之。在 Amoeba 的基础之上,2009 年 Cobar 初版完成,开始在阿里巴巴集团内部使用;2011 年完成集群化改造;2012 年 6 月,Cobar 开源。

 

图片

Cobar 架构图(图片来源于网络)

 

Cobar 本质上是一个关系型数据库的分布式处理系统,是提供关系型数据库(MySQL)分布式服务的中间件。和很多用户一样,二维火当初选择 Cobar 作为中间件构建业务系统主要出于以下考虑:

  • 突破单点性能瓶颈

  • 解决单实例连接数过多

  • 可用性问题,Master 故障的发现和切换

  • 使用开源 MySQL,避免高昂的软硬件费用

 

“分库分表”壮大背后的隐忧

 

21世纪第2个十年,由于人口红利尚在,互联网产业继续高歌猛进,MySQL已经成为大多数互联网公司建站的首选和事实标准,相应配套的分库分表解决方案也如雨后春笋般不断涌现,很多公司都研发了自己的分布式数据库中间件,Cobar 进化为 MyCat,工作在客户端的 Sharding-JDBC 也被很多用户认可并采纳。简单列举常见产品,如下图所示:

 

图片
分布式数据库中间件常见产品罗列

 

上述远非可用分库分表方案的完整列表,但总结所有方案基本分为两类:第一类,作为独立进程运行的中间件,第二类,工作在客户端的插件。这两类方案为解决单点瓶颈而生,但在实际使用中其实会给用户产生各种烦恼,例如:

  • 应用限制,很多只支持简单的SQL,复杂应用需改造

  • 非 Sharding Key 查询

  • 分布式事务和数据一致性

  • 不成熟的高可用

  • 运维复杂

 

选型新数据库背后的考量

 

21 世纪第 3 个十年,国内互联网用户数量基本见顶,叠加持续三年的黑天鹅事件影响,增量市场转为存量市场,很多企业不约而同将“降本提效”提上日程。

在数据库领域,分布式数据库和云数据库进入百家争鸣的时代,不论是从架构还是从设计上,以及从众多用户的实际使用情况上来看,均优于“分库分表”。在这样的形势下,以“降本提效”为目标,二维火也开始了新数据库的选型。

目前,国内市场上的分布式数据库主要有两种:分布式中间件再增强产品和原生分布式数据库。考虑到使用 Cobar 的过往经历,为了彻底摆脱分库分表的束缚,二维火着重调研了后者,并最终选择 OceanBase。总的来说,二维火最终选择 OceanBase 的主要原因如下:

首先,原生支持多副本数据强一致,保障数据安全。 OceanBase 每个节点均支持读写,分区的数据副本根据规则设置在多个节点同步。同一个分区的多个副本基于 Paxos 一致性协议保证副本的强一致。主分区拥有数据最新版本,具备强一致性读和写能力,备分区具备弱一致性读能力。

其次,大集群多租户模式在保留隔离能力的同时又能提高资源利用率,方便管理且降低运维成本。 OceanBase 采用原生多租户设计,支持将多个传统数据库合入一个集群,租户间数据相互隔离,可设置各自资源占用,并支持平滑扩展收缩。

 

图片

▲OceanBase 多租户

 

最后,OceanBase 存储层基于 LSM-Tree 架构,写入先进内存,磁盘上基线 SSTable 相对静态,为数据编码/压缩的实际应用打下良好基础。 通过在变长 16K 微块上应用字典、RLE、差值、常量等编码方式,行列混存,编码后的数据进行 ZSTD 压缩,可以大幅节约存储空间,对海量数据场景非常友好。配合 Block/Row/BloomFilter 多级缓存,降本提效双管齐下。

 

图片
一个典型的表访问流程

 

成本显著降低,归档性能提升

 

在决定和实践之间有一项关键能力需求:出于对服务高可用性的坚持,避免不必要的停机,二维火需要整体的迁移切流方案面对基于 Cobar 的应用系统支持灰度切流和反向增量。

从业务上来看,有了这项保障,假设更换系统后出现任何短时间无法解决的问题,都可以切回源端,最大限度降低对业务的影响;

从技术上来讲,这意味着当业务流量已经部分切流的情况下,迁移程序能够区分在目标端上的业务增量和同步增量,并准确的把业务增量通过 Cobar 中间件层回写至源端,以时刻保持两边的同步。

 

图片
从 Cobar 迁移至 OceanBase

 

可惜的是,OMS(OceanBase Migration Service,OceanBase 数据迁移工具)一开始并不具备此项能力,我们只好等待。可喜的是,短短数月后再次沟通,OceanBase 团队已经将此项功能开发、验证、打磨完毕,产品迭代发展速度出乎我们的意料。

扫清了切流障碍,二维火选择存储量大、写多读少的归档库作为试点迁移至 OceanBase,迁移/切流过程顺利:对源端每个 MySQL 物理实例建立正向链路迁移/同步数据至目标端 OceanBase,同时建立一条 OceanBase 至源端中间件层的反向链路,OMS 的数据校验功能也确保了数据的无损和一致。

在 OceanBase 侧验证各项业务操作后,应用服务器通过滚动重启的方式切换数据源,实现业务无感在线切换。

归档库切换 OceanBase 后,凭借 OceanBase 的高级压缩技术,所需存储空间缩减至原有的 1/5,降本效果立竿见影;同时,得益于原生分布式架构,数据归档和历史信息查询的性能也有了明显提升。

从理论分析到切流验证,整个过程一气呵成,这给了二维火将变革向其他应用推动的信心和决心。目前,二维火正在将点餐、营销、管理、供应链等餐饮服务进行数智化升级,以期为商家提供更高效、智能的服务,助力商家成功。同时,我们也期望 OceanBase 公有云产品早日上线 binlog service 服务,让现有业务系统的迁移免去适配的成本,为二维火的产业升级持续助力。

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

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

相关文章

深度解析 Git 是如何工作的?

深度解析 Git 是如何工作的?前言Git 的特性Git 实际上是如何工作的Commits 对象Tree 对象Blobs 对象总结分支创建与合并代码合并与冲突代码合并算法(Myers)图搜索代码 diff结尾参考:《Pro Git》、《Advanced Git》 前言 Git 是一…

如何实现工具无关化?关于自动化测试脚本的设计

1.问题的提出 最近几年来,我的自动化测试工具之旅大致是这样的,最早用的是QTP,然后是RFT(IBM的功能测试自动化产品),之后也经历了Selenium, Watir等,再后还是一些商业工具主要是偏web自动化及移动自动化,如sahi, appnium, Keynot…

你知道ArcGIS电子地图也有大字体地图吗(附下载方法)

概述 如果你经常使用水经微图,应该知道在水经微图内,百度电子地图和高德电子地图有大字体地图,最近我偶然发现ArcGIS电子地图也有大字体地图,这里给大家介绍一下下载方法。 加载地图 在ArcGIS中打开目录窗格,点击添…

五、卷积神经网络CNN8(不同卷积后图像大小计算)

类型划分 2 维卷积的计算分为了 3 类:1.full 2.same 3. valid 1、full蓝色为原图像,白色为对应卷积所增加的 padding,通常全部为 0,绿色是卷积后图片。图中的卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积&#xff…

为什么企业需要实时跟踪进度的项目管理工具?

市场上的大多数 项目管理工具,都是垃圾进-垃圾出,这意味着如果你的团队没有输入正确甚至漏了输入他们活动的状态信息,就无法准确跟踪项目进展。 当选择了一个不能跟踪实时进度状态的项目管理工具,它不能给你提供准确报告进度所需…

大型复杂项目管理之风险预防

最近一个项目让项目经理小王焦头烂额,一问才知是第一次主导大型项目,各个维度的风险问题频发不断,项目感觉推动不下去了。例如,子项目进度延误、项目资源不足、项目交付物质量不过关等因素造成项目的整体延误等等。 项目案例信息&…

GoogLeNet 与 Inception

本篇主要介绍GoogLeNet,其被改进并应用在了YOLOV1目标检测算法中。 GoogLeNet是google推出的基于Inception模块的深度神经网络模型,在2014年的ImageNet竞赛中夺得了冠军,在随后的两年中一直在改进,形成了Inception V2、Inception V3、Incepti…

Java 将PDF转为Word

众所周知,PDF文档除了具有较强稳定性和兼容性外, 还具有较强的安全性,在工作中可以有效避免别人无意中对文档内容进行修改。但与此同时,也妨碍了对文档的正常修改。这时我们可以将PDF转为Word文档进行修改或再编辑。使用软件将 PDF 文档转换为…

Spring事务,浅谈!

目录 一、EnableTransactionManagement工作原理 二、Spring事务基本执行原理 三、Spring事务详细执行流程 四、Spring事务传播机制 五、Spring事务传播机制分类 六、Spring事务强制回滚 七、TransactionSynchronization 一、EnableTransactionManagement工作原理 开启Spr…

在C++中,为什么部分程序员喜欢在循环中写‘++i’而不是‘i++’?

自入行以来,无论是查阅资料、技术博客亦或是同事间的技术交流,都有一个共识:在循环的时候,务必使用前置操作符,因为其性能优于后置操作符,久而久之,这个就像一个不成文的规定,大家都在遵循&…

C++异常介绍

目录 一.异常 1.1C异常概念 1.2异常的使用 1.3异常和栈帧,重新抛出 二.异常体系 2.1自定义异常体系 2.2C标准库的异常体系 2.3异常规范 3.异常的优缺点 3.1优点 3.2缺点 一.异常 1.1C异常概念 语言传统的处理错误的方式: 1. 终止程序,如assert…

浮点类型的比较

浮点类型的比较一.浮点数精度的损失二.浮点数的比较1.方法一2.方法二3.方法三:系统方案一.浮点数精度的损失 关于浮点数的比较就不得不提到浮点数在内存中的存储,但这里篇幅太大,故我将其放在另一篇博客里,(如果不了解…

laravel对于百万级别数据导出的一些经验

业务上的需求,我们开发的供应链系统某些业务表也陆续突破了百万级别。 原先使用 \Maatwebsite\Excel 插件导出的效率越来越慢,5w条数据导出基本要达到20min,甚至于30w数据导出基本上都超时。 为了解决这个问题,多种尝试&#xf…

AI 让观众成为 3D 版《老友记》的导演了?

《老友记》上线 3D 版了? 允许用户旋转镜头,且从近景切换到全景观看故事? 今年出炉的 3D 方向 AI 项目 SitCom3D,能够自动补齐《老友记》原剧中的三维拍摄空间,用户可以选择主视图、侧视图等不同角度欣赏剧集。镜头的…

[ vulhub漏洞复现篇 ] solr 远程命令执行 (CVE-2019-17558)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

优秀的内部知识库对企业的重要性

我们都知道在客户服务方面,选择正确的知识库软件的重要性。但我们经常忘记的是,我们的员工也是我们的客户。根据盖洛普公司最近的研究,世界正在经历一场员工参与危机。只有大约三分之一的美国员工在工作中具有参与感,而在全球范围…

一文读懂Docker、K8s

目标: docker原理以及在运维工作的地位和作用,运维工作进化论,docker、微服务、k8s的联系、devops和docker的关系,docker的前世今生容器、镜像和仓库、容器和虚拟化,优势和劣势,底层的核心容器除了docker还…

什么是项目管理软件,能带来哪些作用?

在这个信息化时代,企业的项目管理除了需要一位出色的项目管理者外,还需要借助项目管理软件来对项目进行全面管理。因为如今的项目需求多样化,内容也愈加丰富,传统的项目管理方式已经难以满足,所以很多项目管理软件也应…

[附源码]JAVA毕业设计小型医院药品及门诊管理(系统+LW)

[附源码]JAVA毕业设计小型医院药品及门诊管理(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…

CMake中add_subdirectory的使用

CMake中的add_subdirectory命令用于将子目录添加到构建,其格式如下: add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL] [SYSTEM]) source_dir指定源CMakeLists.txt和代码文件所在的目录。如果它是相对路径,则将相对于当前目录(…