云集电商:如何通过 OceanBase 实现降本 87.5%|OceanBase案例

news2024/11/7 20:05:59

云集电商,一家聚焦于社交电商的电商公司,专注于‘精选’理念,致力于为会员提供超高性价比的全品类精选商品,以“批发价”让亿万消费者买到质量可靠的商品。面对近年来外部环境的变化,公司对成本控制提出了更高要求,尤其是服务器与人力成本两大领域。当前,服务器成本已占据公司总成本的85%以上,因此,优化成本结构,实现高效降本,已成为我们当前工作的重中之重。

作为 DBA,以更低的成本支撑公司的运营是一项重要的成就;对个人而言,可以学到很多知识和方法论,包括成本分析和评估方法、服务器优化和调整方法、人力成本优化和提升方法等。

业务痛点

在做成本优化前,我们需要对自身业务情况及现有痛点有全局的了解。目前很多互联网公司都面临着架构上的痛点,云集也不例外。如下图所示,最上层的应用层采用微服务架构,增加了一个缓存,这是因为电商场景会有秒杀需求,需要写入很快。

1701329029

云集主要使用腾讯云上的CDB,业务微服务的架构导致数据库实例数很多。针对每一个微服务的数据库实例,会有基础的一主一从,另外还会有一个用户从库,一般一个系统会对应三个数据库实例。

从中间箭头再往下看,业务数据库通过Flink、Canal等组件输出到大数据以后,会做数据的统计分析,生成T+0、T+1的报表。同时,也会将部分大数据分析的数据同步回业务数据库,供用户查询,形成数据的循环。

右边的话有一个Cloud DB通过OMS到OceanBase的链路,比如有一个订单系统业务,分了32个实例,有个需求是业务需要做整个系统的聚合查询,在原来的分库分表架构下无法实现,因此同步到一个OceanBase集群里面,满足业务查询的需求。以上就是云集现在的整体架构。

那么这个架构存在哪些问题?总的来说,包括四个方面。

第一,数据孤岛。从公司整体角度来看,同一个查询理论上只需要执行一次即可,但由于业务需求不同,无形之中将一份数据在很多存储系统中存储多份。导致请求量放大很多,执行多次。而且数据也存放多份,导致成本上升。

第二,分库分表。分库分表主要依赖于一些中间件,而每个中间件有自己的特点和适用场景,更为关键的是分库分表中间件带来很多问题,需要从业务或运维侧避免:

  • 业务侵入,业务需要设计多张表来满足不同的查询需求,所有的查询需求需要围绕分区键,增加了业务复杂度。
  • 聚合查询和关联查询变得困难,当出现跨库查询或关联查询时,需要业务将数据收集到应用层进行处理,变得异常困难。
  • 运维变得复杂,当需要扩容或缩容时,异常痛苦,需要大量运维操作进行扩容和数据搬迁, 另外当备份和恢复时,也会非常复杂和繁琐。

第三,运营成本,随着微服务进行水平拆分或者垂直拆分,导致数据库实例数大幅增加,资源成本直线升高,另外,每个实例的资源并没有得到充分利用,CPU 利用率未满20%。如果CPU 超过20%,一旦业务波动,服务器就难以支撑,需要预留一定的硬件资源。

第四,数据安全,因等保审核要求,云集需要满足至少两地三中心的容灾水平,这会带来成本的成倍上升。云集在腾讯云上为生产环境做本地备份和远程备份,在远处备份过程中,会遭遇大量运维问题,比如拉取容易失败、拉取耗时过长。另外,因为数据量过大,需要更高的流量,这也导致流量成本大幅上升。

成本优化方案

基于上述架构痛点,我们探索了几种成本优化的方案。

  • 业务架构复杂,数据流循环和其他环节冗长,故障概率较高,决定舍弃分库分表架构
  • 在数据治理和数据归档方面,归档服务器存储容量有限,无法满足需求,通过将归档数据转移到OceanBase,利用其数据压缩率高的特性,在节省存储成本的同时,变相扩展容量上限,目前无明显瓶颈。
  • 整合业务实例,在保证服务可用的情况下,尽量申请更少的服务器资源;增加服务器资源闲时利用率,比如电商业务主要在白天运行,晚上业务较少的时候就可以生成T0、T1报表数据,充分利用资源。
  • 考虑使用具备HTAP特性的分布式数据库替代传统数据库,将在线和分析的业务集中在一套集群中完成,简化数据链路环节,降低业务架构复杂度,减少运维人力。并且在相同业务负载的情况下,发挥分布式数据库高性能的优势,使用更少的机器资源,优化成本。

上述的成本优化方案面临的阻力有哪些呢?

一个新的架构体系需要时间来验证是否能支持现有业务的发展,需要在架构替换前期证明它可以支持业务的发展,并且说服开发团队增加工作量以支持架构改造、学习和适应新技术是值得的。因此,人力和新技术的学习成本是云集架构改造面临的主要阻力。

云集+ OceanBase 的成本优化方案

在整个成本优化过程中,主要考虑了以下几个原则:

  • 稳定性强,保证整体业务的稳定和无感知。
  • 兼容性高,简化新技术和架构的应用,降低开发难度,减少学习成本。
  • 不过度优化,避免因过度优化而降低业务的波动能力。

之所以选择 OceanBase 作为数据存储解决方案,主要是因为:

  • OceanBase 与 MySQL 的兼容性,减少开发工作量和版本的稳定性。
  • OceanBase 的吞吐量和生态系统的支持良好。
  • HTAP 能力和水平扩展能够满足我们的 TP 和 AP 场景的业务需求。

1701329130

通过引入OceanBase,业务由原来的CDB + ETL + 大数据的架构转变为一套OceanBase集群支撑HTAP业务,减少了数据链路的中间环节,同一套技术栈同时降低开发工作量,通过OceanBase RTO<8s、RPO=0的高可靠性也满足了等保审核的需求,实现了成本上的优化。

1701329144

总结

本文介绍了基于目前大环境下降本的需要,云集的数据库架构以及使用痛点,探索了实施降本过程中的方案。最终通过引入OceanBase分布式数据库,在满足业务场景的基础上,通过其高性能、高压缩、高可靠、HTAP的特性,为云集节约了机器、存储、人力运维的成本。近几年的大环境变化使得云集业务流量减少了很多,由原来每月的服务器成本峰值达到800多万,降为现在不到100万。

这一成本降低的结果是非常显著的。通过技术的优化和适应环境变化,成功地实现了成本的大幅度减少。这不仅仅是对云集来说,也是对其他企业进行成本优化的一个启示。通过优化技术和适应环境,我们可以有效降低成本,提高效率,获得更好的经济效益。

未来,我们也会不断尝试OceanBase新的特性,比如最新的4.2.1 LTS版本,已经在测试当中,希望OceanBase在云集的业务场景里能带来更大的价值。

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

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

相关文章

软考高级架构 - 8.3 - ATAM方法架构评估实践 - 超详细讲解+精简总结

总结&#xff1a; ATAM时评估架构的质量属性方法&#xff0c;帮助权衡和识别风险&#xff0c;分为四个阶段。 阶段1——演示 介绍ATAM方法&#xff0c;介绍软件商业目标和关键需求&#xff0c;详细介绍要被评估的架构。 阶段2——调查和分析 深入分析系统架构&#xff0c;评估…

Redis - Hash 哈希

一、基本认识 ⼏乎所有的主流编程语⾔都提供了哈希&#xff08;hash&#xff09;类型&#xff0c;它们的叫法可能是哈希、字典、关联数 组、映射。在Redis中&#xff0c;哈希类型是指值本⾝⼜是⼀个键值对结构&#xff0c;形如key"key"&#xff0c;value{{ field1, v…

C++上机实验|多态性编程练习

1.实验目的 (1)理解多态性的概念。 (2)掌握如何用虚函数实现动态联编 (3)掌握如何利用虚基类。 2.实验内容 设计一个飞机类 plane,由它派生出歼击机类fighter和轰炸机类 bomber,歼击机类fighter 和轰炸机类bomber 又共同派生出歼轰机(多用途战斗机)。利用虚函数和虚基类描述…

岛屿数量 广搜版BFS C#

和之前的卡码网深搜版是一道题 力扣第200题 99. 岛屿数量 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。…

动态规划 之 路径问题 算法专题

一. 不同路径 不同路径 状态表示 dp[i][j] 表示走到[i][j]位置, 有几种不同的路径状态转移方程 以离[i][j] 最近的位置划分问题 1.从[i - 1][j] 到[i][j], 到[i][j]位置的不同路径数 就是和 到[i - 1][j]位置的不同路径数相同, 即dp[i][j] dp[i - 1][j] 2.从[i][j - 1] 到[i…

别名路径联想设置

如何使用/进行路径提示&#xff1f; 找到jsconfig.json文件&#xff0c;如何项目中没有的话&#xff0c;自行创建 {"compilerOptions": {"paths": {"/*": ["./src/*"]}},"exclude": ["node_modules", "dis…

40V耐压 降压恒压芯片 SL3061替换XL4301 支持2.5A电流 内置MOS管

一、基本性能参数对比 二、替换可行性分析 耐压能力&#xff1a;SL3061的耐压能力为40V&#xff0c;而XL4301的工作电压范围为8V至40V&#xff0c;最大耐压可能更高&#xff08;达到45V&#xff09;。在多数应用场景下&#xff0c;SL3061的耐压能力应能满足需求&#xff0c;但…

字节青训-小D的 abc 变换问题

问题描述 小D拿到了一个仅由 "abc" 三种字母组成的字符串。她每次操作会对所有字符同时进行以下变换&#xff1a; 将 a 变成 bc将 b 变成 ca将 c 变成 ab 小D将重复该操作 k 次。你的任务是输出经过 k 次变换后&#xff0c;得到的最终字符串。 例如&#xff1a;对于初…

设计模式09-行为型模式2(状态模式/策略模式/Java)

5.4 状态模式 5.4.1 状态模式的定义 1.模式动机&#xff1a;有些对象具有多种状态&#xff0c;这些状态在某些情况下能够相互转换&#xff0c;对象在不同的状态下将具有不同的行为&#xff0c;将拥有状态的对象中和状态的行为分离。 2.模式定义&#xff1a;允许一个对象在其…

Postman上传图片如何处理

打开Postman&#xff0c;创建一个新的请求 URL: http://90.104.232.49:80/dev-api/appcommon/upload 如果有解密进入上传就在请求头添加 点击“Body”选项卡。 选择“form-data”类型。 在“KEY”列中输入文件字段的名称&#xff0c;例如file。 在“VALUE”列中&#xff0…

MongoDB笔记03-MongoDB索引

文章目录 一、前言1.1 概述1.2 MongoDB索引使用B-Tree还是BTree&#xff1f;1.3 B 树和 B 树的对比1.4 总结 二、索引的类型2.1 单字段索引2.2 复合索引2.3 其他索引 三、索引的管理操作3.1 索引的查看3.2 索引的创建3.2.1 单字段索引3.2.2 复合索引 3.3 索引的移除3.3.1 指定索…

MongoDB Shell 基本命令(三)聚合管道

管道含义 类似Linux中的管道&#xff0c;前一个命令的输出作为后一个命令的输入。 显示网络连接、路由表和网络接口统计信息 netstat -ano -netstat:network statistics 网络统计 -a:显示所有连接和监听端口&#xff0c;包括所有活动的TCP和UDP连接。 -n:以数字形式显示地址…

2024年10月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2024年10月国产数据库大事件和重要产品发布消息。 目录 2024年10月国产数据库大事记 TOP102024年10月国产数据库大事记&#xff08;时间线&#xff09;产品/版本发布代表厂商大事记信创数据库上市公司2024年Q3财报 达梦数据&#xff1a;2024年前三季度…

SQL Server 日志记录

SQL Server是一个关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;旨在有效地存储、组织、检索和操作大量结构化数据。SQL Server日志是监控数据库活动、排查问题和确保数据一致性的基础&#xff0c;这些日志记录了SQL Server实例中发生的事件的时间顺序。它们充当…

yolo v5 开源项目

项目地址&#xff1a;https://gitcode.net/EricLee/yolo_v5

队列详解

目录 队列队列的概念及结构队列的实现代码 队列功能的实现队列的尾插void QueuePush(Queue*pq, QDataType x);结构体封装指针typedef struct Queue总结 代码 队列的头删void QueuePop(Queue* pq)代码 队列的初始化void QueueInit(Queue* pq)代码 队列的销毁void QueueDestroy(Q…

ViT模型复现项目实战

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

是时候用开源降低AI落地门槛了

过去三十多年&#xff0c;从Linux到KVM&#xff0c;从OpenStack到Kubernetes&#xff0c;IT领域众多关键技术都来自开源。开源技术不仅大幅降低了IT成本&#xff0c;也降低了企业技术创新的门槛。 那么&#xff0c;在生成式AI时代&#xff0c;开源能够为AI带来什么&#xff1f;…

【C++打怪之路Lv13】- “继承“篇

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;重生之我在学Linux&#xff0c;C打怪之路&#xff0c;python从入门到精通&#xff0c;数据结构&#xff0c;C语言&#xff0c;C语言题集&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持…

数据特征工程:如何计算Teager能量算子(TEO)? | 基于SQL实现

目录 0 TKEO能量算子 1 数据准备 2 特征求解 3 小结 0 TKEO能量算子 TEO(Teager能量算子),由Kaiser于1990年代提出的非线性分析方法(参见Kaiser, 1990; 1993),是一种有效的非线性信号处理工具,它能即时反映信号能量的变化。通过计算相邻采样点的值,TEO能够迅速跟…