智慧油客:从初识、再识OceanBase,到全栈上线

news2025/1/6 19:04:56

今天,我们邀请了智慧油客的研发总监黄普友,为我们讲述智慧油客与 OceanBase 初识、熟悉和结缘的故事。


智慧油客自2016年诞生以来,秉持新零售的思维,成功从过去二十年间以“以销售产品为中心”的传统思维模式,转向“以运营客户为中心”,并且依托智能大数据,驱动业务精准运营,致力于推动能源零售行业实现全面的产业升级。智慧油客全栈 SaaS 服务体系目前已帮助数万加油站完成产业升级,为加油站提供了全新一代的自动化智慧油站运营服务,集进销存业务运营、会员客户管理、自属移动互联网平台营销、聚合支付、财务管控、大数据和人工智能分析等技术为一体。目前已覆盖全国 30 个省级行政区,服务 1 万多座油站、3000 多万车主,每天订单量超过 100 万单。

初识 OceanBase

2021 年中旬,机缘巧合之下,智慧油客接触到国产分布式数据库产品 OceanBase,经过那次沟通交流,我对 OceanBase 有了简单的了解和认识,原来当年阿里的去 IOE、每次双十一大促的数据库功臣叫 OceanBase,其经历了 11 年的自主研发,是蚂蚁全栈都在使用的一款企业级原生分布式数据库。

这次交流后,我对 OceanBase 一些特性比较感兴趣,如高可用、高性能、可扩展、低成本、云原生、高度兼容 SQL 标准和主流关系型数据库生态等特点,对于企业比较吸引人,同时它也是全球首家通过 TPC-C 和 TPC-H 测试的分布式数据库。

随后我去查看了 TPC 的官方网站:TPC-C 连续两年蝉联第一,超越 Oracle 性能 20 多倍,这个结果对于一款纯国产数据库来说,颇有一些扬眉吐气的感觉,霸榜多年的 Oracle 被中国的产品完胜超越。

在当时的时间点,智慧油客正处于业务快速发展阶段,全线业务快速迭代,同时数据是智慧油客的立命之本,切换数据库对于我们还是需要谨慎和评估,因此当时未投入成本去验证产品。

后话:如果当时选择 OceanBase,可能就没有后面的一些小插曲。

再识 OceanBase

2022 年,刚刚过完忙碌的春节,OceanBase 团队再次约见。

调研分布式数据库

在这次交流前,针对之前介绍的分布式数据库专门去做了一些调研。毕竟分布式数据库的出现和发展没有几年,技术是否成熟,产品是否过硬,有多少客户案例,客户实际体验如何,这些都是问号。带着这些问题,我们对分布式数据库市场进行了一些技术预研。

首个分布式关系型数据库诞生于 2012 年,Google 发布 Spanner,打造的全球分布式数据库,承载 Google 自身的全球业务,代码闭源,近发布论文说明其架构原理,Shared Nothing 无共享模式是纯粹分布式的体现、ACID 是关系型数据库的基础,MVCC 是并发访问的保障。自此开创了分布式关系型数据库的元年,这样算来分布式关系数据库的发展也近十年的历史。

再看 OceanBase,Shared Nothing、ACID、MVCC 等等,分布式一致性协议为 Paxos,不由得想起 Google 的 Chubby 作者 Mike Burrows 的那句话:“There is only one consensus protocol, and that's Paxos”(世界上只有一种一致性算法,那就是 Paxos)。从数据库架构上来看,满足了关系型数据库的各类特性,同时也具有分布式的扩展性、一致性的特点。

OceanBase 官网也有很多产品资料和手册,颇有 Oracle 官方手册的规范性,面向 DBA 的、面向开发的等资料一应俱全。案例介绍、解决方案、培训中心等各个板块也都有清晰的分类,之前的疑问基本打消了一半。

小插曲:智慧油客经过多年的快速发展,数据量级已经达到了单实例 MySQL 的上限,因此去年 10 月份,我们对 MySQL 云实例进行了升级,采用计算存储分离的 MySQL,对数据库存储扩容,同时采用一主三从架构,以应对数据的爆发式增长。

春节的返乡潮,连续多日出现加油高峰,瞬时流量突发性增长,此时数据库却成为我们的拖累,执行计划未走索引,SQL 命中低,硬解析升高,负载急剧上升,延迟飙高,甚至出现了数据库宕机罢工,严重影响了客户加油体验,我们的研发团队,在这个春节加班加点保障服务 SLA,在大年初一终于扛过这一波业务高峰。

后来,通过 OceanBase 解决方案架构师对产品的详细介绍,同时结合我们业务规划和之前遇到的痛点为我们的数据库摸脉问诊,让我们对 OceanBase 有了一些信心,当时我们比较坚持的即使切换数据库也不会选择 MySQL 内核数据库,而 OceanBase 完全自主研发,不基于任何数据库内核,内核引擎同时支持 MySQL 和 Oracle,这在数据库产品中也是独一无二。

最终,我们决定详细测试和验证 OceanBase 数据库,看是否能够给我们带来额外惊喜。

全业务验证 OceanBase

我们组织了专项团队进行 OceanBase 验证测试,包括全链路、全业务的功能验证,性能压测。

首先,通过 OceanBase 生态产品 OMS 进行数据迁移,将我们的真实生产数据迁移到 OceanBase,OMS 产品支持结构迁移、全量迁移、增量迁移、全量校验等功能,一站式解决了数据库迁移和验证等问题。我们迁移了线上 5TB 的数据,到了 OceanBase 整个存储仅 1.1TB,近 20% 的压缩率确实给我们一个不小的惊喜,直接存储成本下降 80%,对于一个重数据成本的公司,成本下降显著。

OMS数据迁移产品

  • 兼容性

OceanBase 自主研发,未基于任何数据库内核,这一点反倒让我们担心其兼容性,因为语法兼容度越高,业务代码的改造成本越小,我们的业务快速迭代,如果因为切换数据库而投入过多人力,得不偿失。

根据 OceanBase 团队的介绍,OceanBase 支持 MySQL 5.7 绝大部分语法,同时官网也有详细的 MySQL 兼容项对比。我们的生产库采用 5.6 版本,对后续测试我们还是比较乐观。

经过我们测试团队全量的集成测试,发现了几个不兼容项,比如table的大小写问题,插入时间戳的默认值的问题,函数兼容性等问题,对于一个新的数据库产品,我们本着严格筛选的原则,将这些问题一一反馈 OceanBase 专家,没想到 OceanBase 做到了 MySQL语法兼容的同时,很多参数、变量也都沿用了 MySQL 的传统,对于学习成本和维护成本也都没有太多壁垒,最终仅通过参数和变量的调整均得到了解决。

  • 性能压测

智慧油客的业务中,智慧支付是客户体感最强烈的环节,服务与赋能加油站企业,首先是能让车主顺畅加油快捷支付,其次才是为车主和油站提供附加服务和运营管理能力。因此针对订单、支付、油价查询等高频场景进行了针对性的压测,对高并发高流量场景进行验证。

测试集群采用 OceanBase 公有云 14C70G 规格,OceanBase支持多租户资源隔离,在该集群上开了三个租户,其中压测的租户规格仅 8C48G 资源。

首先开启 30 个并发小试牛刀,这个并发下对数据库完全没有压力,TPS、QPS 各项平稳,压测场景中测试数据集中,存在热点行,但此时依靠准内存数据库级的高性能写入,RT 延迟依然较低。

高并发压测,6000 并发访问验证突发峰值流量时的响应,对于突发访问数据依然采用较为集中的测试数据,因此也是考验对于热点行的高并发情况,对于一个 8C 的小资源租户,读写延迟增加也在意料之中,但数据库整体稳定,可以应对突发流量。

600 并发压测,TPS、QPS 平稳,SQL 硬解析后很快走 Plan Cache,整体 RT 平稳,写 RT 在 1ms 以下,读 RT 也在 1ms 左右,整体性能和稳定性都非常满意。

  • 测试小结

整个测试历时两周,全面分析评测,在显著节约成本的同时,无论是兼容性还是性能均超出预期,同时分布式数据库的高可用能力也能为我们的服务保驾护航。

结缘 OceanBase

测试结果让我们对 OceanBase 充满信心,准备全面切换数据库服务。如何平稳切换数据库,如何在切换过程中保证服务的可用性成为我们的难题,OceanBase 的迁移平台为我们提供了迁移的保障。具体迁移步骤和数据清洗等细节,OceanBase 提供了数据库迁移规划和咨询服务,经过一周的讨论研究,同时结合 OceanBase 专家的建议,最终梳理并确定了全业务迁移方案。

一站式服务

智慧油客的近两年业务规模飞速发展,2020 年初服务 5000 家油站,2021 年初服务 8000 家油站,到 2021 年底已经超越 10000 家,年增长 40% 以上。

快速增长对我们的技术架构提出了挑战,持续扩容应用节点数量,最终压力都汇聚到了数据库,高并发、高流量对于传统数据库,终究会达到连接上限和性能极限,即便开了再多的从库,传统数据库的单节点写无法满足高并发写入场景。

分库分表解决方案可以解决多节点写入问题,但中间件的性能瓶颈,数据均衡等问题,以及业务改造成本、运维成本都是制约业务发展的因素。与其采用一个中间态的产品,不如直接进化到分布式内核的数据库产品,通过 OceanBase 公有云服务提供的一站式部署、扩容、监控运维管理、开发工具、数据迁移、备份恢复等端到端数据库服务化解决方案,同时兼顾了运维成本与服务保障。

OB Cloud 产品架构

大幅度降本

线上全业务迁移,包括我们的业务库、报表库等三个实例集群,经过分析清洗,通过 OMS 迁移工具,可以边界的选择 Schema 进行迁移,最终迁移原来三个实例共 5TB 数据,OceanBase 存储仅仅 869GB,比测试阶段的主库压缩率高出更多,直接节省存储 83%。

总存储压缩对比

租户存储监控

    

企业上云可以节省运维和资源成本,而云产品的选择也是一门学问,面对众多同类云服务,充分调研产品特性,与云产品的团队深入沟通,充分测试云产品是否适合企业架构,前期的投入最终均会回报到后续运营成本上。OceanBase 对 MySQL 的高兼容性降低改造成本,存储压缩特性大幅度降低存储成本,数据库的直接账单成本节约 40% 以上。

未来,智慧油客将持续进行服务升级改造,快速迭代打磨产品,OceanBase 数据库作为智慧油客的数据底座,通过多租户的资源动态调配、分布式的弹性扩容,上层业务架构更加灵活,面对突发流量、营销活动等场景也多了一份从容。

实践 Tips

在 MySQL 中通过参数 lower_case_table_names 来控制表名的存储和比较规则,即 Table 大小写敏感等规则,在 OceanBase 上的语义与 MySQL 完全一致。

MySQL 官方文档对 explicit_defaults_for_timestamp 的说明

时间戳默认值,explicit_defaults_for_timestamp 变量控制时间戳默认值,在MySQL 5.6、5.7,默认为关闭,而 MySQL 8.0 此参数默认开启,直接导致的是一个 not null 且有默认值的时间戳字段,如果显式插入该字段为 NULL,会直接报错。出于 SQL 的严谨性和规范性,建议企业未来开启此选项,OceanBase 默认开启,在关闭该变量后,完全兼容 MySQL 5.7。

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

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

相关文章

如何查看电脑的屏幕刷新率?

1、按一下键盘的 win i 键,打开如下界面,选择【系统】: 2、选择【屏幕】-【高级显示设置】 如下位置,显示屏幕的刷新率:60Hz 如果可以更改,则选择更高的刷新率,有助于电脑使用起来界面更加流…

数据结构——有序二叉树的删除

在上一篇博客中,我们介绍了有序二叉树的构建、遍历、查找。 数据结构——有序二叉树的构建&遍历&查找-CSDN博客文章浏览阅读707次,点赞18次,收藏6次。因为数据的类型决定数据在内存中的存储形式。left right示意为左右节点其类型也为…

深入理解 SQL 注入:原理、攻击流程与防御措施

深入理解 SQL 注入:原理、攻击流程与防御措施 在当今数字化的时代,数据安全已成为每个企业和开发者必须面对的重要课题。SQL 注入(SQL Injection)作为一种常见的网络攻击方式,给无数企业带来了巨大的损失。本文将深入…

android WebRtc 无法推流以及拉流有视频无声音问题

最近在开发使用WebRtc进行视频通话和语音通话,我使用的设备是MTK的手机,期间后台的技术人员几乎没法提供任何帮助,只有接口和测试的web端,有遇到不能推流。推流成功网页端有画面有声音,但是安卓端有画面,没…

微信小程序之手机归属地查询

微信小程序之手机归属地查询 需求描述 API申请和小程序设置 API申请 第一步:完整账号注册 我们需要来到如下网站,注册账号:万维易源 第二步:账号注册完成以后,点击右上角的控制台信息。 第三步:在控制…

【机器学习】机器学习的基本分类-监督学习-Lasso 回归(Least Absolute Shrinkage and Selection Operator)

Lasso 回归是一种线性回归方法,通过引入 ​ 正则化(绝对值惩罚项)约束回归系数,既能解决多重共线性问题,又具有特征选择能力。 1. Lasso 回归的目标函数 Lasso 的目标是最小化以下损失函数: 其中&#xff…

优化LabVIEW数据运算效率的方法

在LabVIEW中进行大量数据运算时,提升计算效率并减少时间占用是开发过程中常遇到的挑战。为此,可以从多个角度着手优化,包括合理选择数据结构与算法、并行处理、多线程技术、硬件加速、内存管理和界面优化等。通过采用这些策略,可以…

python学opencv|读取图像(四)imshow()函数尝试

【1】引言 前述已经学习了opencv读取图像的基本操作,包括下述链接: python学opencv|读取图像-CSDN博客 python学opencv|读取图像(二)保存彩色图像-CSDN博客 python学opencv|读取图像(三)放大和缩小图像…

MongoDB分片集群搭建及扩容

分片集群搭建及扩容 整体架构 环境准备 3台Linux虚拟机,准备MongoDB环境,配置环境变量。一定要版本一致(重点),当前使用 version4.4.9 配置域名解析 在3台虚拟机上执行以下命令,注意替换实际 IP 地址 e…

MATLAB 最小二乘平面拟合(90)

MATLAB 最小二乘平面拟合(90) 一、算法介绍二、算法实现1.代码2.结果:一、算法介绍 平面方程: ax+by+cz+d = 0 执行任务:读取一组点云(这里用自定义生成的平面模拟点云代替,在其中添加了噪声来模拟真实的数据),使用最小二乘拟合平面,来输出平面参数,并可视化显示拟…

AI+电影特效产品化:开启电影人物年轻化新时代

随着人工智能技术的不断进步,它正在改变着我们生活的方方面面,包括娱乐产业。在电影制作领域,AI技术的应用尤其引人注目,尤其是在实现演员年轻化或老化效果方面。本文将介绍一款名为MyTimeMach

Appium 安装问题汇总

好生气好生气,装了几天了, opencv4nodejs 和 mjpeg-consumer 就是装不了,气死我了不管了,等后面会装的时候再来完善,气死了气死了。 目录 前言 1、apkanalyzer.bat 2、opencv4nodejs 3、ffmpeg 4、mjpeg-consume…

Cannot resolve symbol ‘ActivityThread‘ | Android 语法

背景 ActivityThread 是 Android 系统内部使用的一个类,它位于 android.app 包中,但在 Android SDK 的公共 API 中并没有公开。 由于 ActivityThread 是隐藏的内部类,因此在编写单元测试或功能开发时,无法直接引用它。可以使用反射来访问内部 API,或者使用依赖注入的方式…

探索自然语言处理奥秘(NLP)

摘要 自然语言处理(NLP)是人工智能领域的一个重要分支,它致力于使计算机能够理解、解释和生成人类语言。这项技术让机器能够阅读文本、听懂语音,并与人类进行基本的对话交流。 通俗理解 自然语言处理(NLP&#xff09…

JAVAWeb中的Servlet学习

一 Servlet简介 1.1动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源.例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Servle…

「Mac畅玩鸿蒙与硬件40」UI互动应用篇17 - 照片墙布局

本篇将带你实现一个简单的照片墙布局应用,通过展示多张图片组成照片墙效果,用户可以点击图片查看其状态变化。 关键词 UI互动应用照片墙布局Grid 布局动态图片加载用户交互 一、功能说明 照片墙布局应用的特点: 动态加载多张图片组成网格布…

dhcpd服务器的配置与管理(超详细!!!)

前提条件: (1)虚拟机能够联网(如果nat模式不能联网的看另一期) CentOS7 NAT模式不能联网-CSDN博客 (2)系统是Centos8,因为下载的dhcp-server软件包版本和Centos7不匹配,如果你能成…

java基础概念47-ArrayList、LinkList和迭代器

一、ArrayList集合 1-1、ArrayList的两种添加信息的方式 1-2、ArrayList集合底层逻辑 1、利用空参创建的集合,在底层创建一个默认长度为0的数组 2、添加第一个元素时,底层会创建一个新的长度为10的数组 3、存满时,会扩容1.5倍。 4、如果…

oracle之用户的相关操作

(1)创建用户(sys用户下操作) 简单创建用户如下: CREATE USER username IDENTIFIED BY password; 如果需要自定义更多的信息,如用户使用的表空间等,可以使用如下: CREATE USER mall IDENTIFIED BY 12345…

ffmpeg转码与加水印

文章目录 转码 与加水印引入jar包代码ffmpeg安装错误解决方法 转码 与加水印 引入jar包 <dependency><groupId>net.bramp.ffmpeg</groupId><artifactId>ffmpeg</artifactId><version>0.6.2</version></dependency>代码 impo…