当前位置: 首页 > news >正文

vivo鄢楠:基于OceanBase 的降本增效实践

在3 月 20 日的2024 OceanBase 数据库城市行中,vivo的 体系与流程 IT 部 DBA 组总监鄢楠就“vivo 基于 OceanBase 的降本增效实践”进行了主题演讲。本文为该演讲的精彩回顾。


vivo 在1995年于中国东莞成立,作为一家全球领先的移动互联网智能终端公司,其年生产能力已接近2亿台,服务于全球超过5亿用户。vivo最初从电话机业务起家,如今业务范围已广泛拓展至智能手机、AI等多个领域。随着业务的蓬勃发展,vivo的IT技术架构也经历了巨大的变革。从最初的单体架构,到现今基于5G的容器化微服务模式,vivo在二十多年的时间里不断探索并成功应用了行业主流的IT技术。

1712027654

一、使用MySQL面临诸多挑战

vivo 的数据库迭代伴随着整个数据库行业的变迁。vivo 的现有业务系统有的采用了传统的商业数据库,有的采用了新型的开源数据库,最多时有几千个数据库,目前数据库技术栈包括 Oracle、MySQL、Redis、OceanBase 等近 10 种数据库。随着数据库越用越多,vivo 开始围绕数据库的运维和使用场景,探索工作效率的提升。

1712027681

当前,vivo 使用的主要数据库是 MySQL,通过 MySQL 的集群加一套 proxysql 分离的模式支撑业务运行。MySQL 的生态非常庞大,周边组件非常多,但是并没有统一的集成解决方案,每个问题都需要单独调研或者引入第三方组件。

而多个组件搭配的方案也存在明显的缺陷。这些组件来自不同的社区和厂商,给运维 DBA 带来了高昂的学习成本,同时也给业务带来隐藏的风险。vivo 现存的关系型数据库在日常运维中,常见的问题主要有以下几个方面:

第一,性能和可扩展性

在使用 MySQL 数据库时,如果进行复杂查询或大数据库的查询,会导致 MySQL 性能下降。在高并发场景下,写入操作会导致性能瓶颈。此外,不恰当的索引设计或管理也会影响查询效率。MySQL 的水平扩展能力有限,对于需要分布式数据库解决方案的场景不够理想。

第二,备份和恢复

MySQL 对增量备份的支持相对有限,大型数据库备份耗时较长,在线备份会影响数据库性能,在数据丢失或损坏情况下,恢复过程复杂且耗时。

第三,可用性和灾难恢复

现存关系型数据库在设置和维护高可用性架构(如主从复制、集群)时,复杂且成本较高。在主数据库发生故障时,自动故障切换到备份数据库时,存在延迟或不一致性问题。为了确保数据安全性和业务连续性,制定和测试灾难恢复计划也需要额外的资源和时间。为了提供灾难恢复能力,在多个数据中心间同步数据会面临网络延迟和数据一致性挑战。

近些年,降本增效成为企业数字化转型过程中的重要议题。企业不再满足传统的数据架构,期望通过高可用、高性能的数据库,提升运营效率,适应市场需求。大型企业在核心系统升级或全面升级时,主要关注以下几点:

○  数据模型优化:随着业务发展,数据模型可能需要调整以适应新的需求,这可能导致数据库重构和迁移的挑战。

○  数据库分片:为了提高性能和可扩展性,数据库分片(sharding)的实施可能增加架构的复杂性。

○  多租户支持:在多租户应用中管理数据隔离和资源分配可能需要额外的设计和管理工作。

○  数据迁移:将现有数据迁移到新的数据模型或数据库架构可能涉及复杂的转换和同步过程。

此过程中,相比降本,vivo 更看中增效。在使用 MySQL 时:

在效率层面,偏分析类的复杂 SQL 在 MySQL 执行耗时较长。当 MySQL 单表数据量大时,采用分库/分表方案,会给开发设计、SQL 编写、维护带来复杂度。通过第三方工具配置高可用切换方式,也会增加运维复杂度。

在成本层面,MySQL 一主多从的架构下,实例数量多,存储成本高,从库资源不能高效利用。假如要做读写分离,需要借助第三方组件,增加额外的硬件资源成本。

基于 MySQL 的使用痛点,vivo 开始数据库选型之路。在对行业的头部产品进行了性能测试、兼容性测试、功能点测试等对比后,最终 vivo 选择了 OceanBase。

二、OceanBase 上线15个生产业务

vivo 选型落地 OceanBase 的过程中,经历了内部分享——OceanBase 专家培训——测试环境——IDC 生产上线——公有云生产上线——规模化陆续上线几个阶段。

vivo 在产品选型之后,紧接着在内部做了一次围绕 OceanBase 的特性、收益等方面的技术分享,提升了运维开发人员对 OceanBase 的接受度。在此期间,OceanBase 的专家也对 vivo 的运维开发人员做了相关的产品技术宣导。vivo 的业务范围广,因此选择了一个契合 OceanBase 功能特性的业务优先试点。运行良好之后,从 IDC 到云上,持续拓展集群规模。

vivo 的业务遍布全球,2024 年年初,vivo 在阿里云海外版上线了一个 OB Cloud 集群。目前 vivo 已有 4 个测试集群、1 个阿里云集群、5 个生产集群、15 个生产业务模块上线 OceanBase,包括日志系统,并陆续审计平台、技术中台、用户中心等多个业务系统。

接下来,vivo 的规划是先保证试点业务的平稳运行,将其运行效果转化为其他业务对 OceanBase 的信心,持续地迭代升级。当业务在 MySQL 上有运行痛点,并且业务有意愿做调整,且调整成本不高的情况下,我们会做 OceanBase 的替换。现阶段,MySQL 和 OceanBase 在 vivo 会同时存在。

三、使用 OceanBase 相当于增强版“MySQL”

OceanBase 是一款自主研发的分布式数据库,具备数据强一致、高扩展、高可用、高性价比、稳定可靠等特征,因其高度兼容 Oracle/MySQL,也大大降低了数据库的迁移成本和运维开发的难度。其周边生态系统也比较完善,社区很活跃,对相关问题能够及时响应,团队的支持力度也很大。总体使用下来,相当于“增强版 MySQL”。

第一,兼容性。vivo 在引入新产品时,需要保证不会因此降低原有的效率。OceanBase 的兼容性极大保证了业务效率。

○  语法与 MySQL 兼容,对开发友好,代码改动小

○  云上与云下同一个技术栈,OB Cloud 支持多云部署  

○  兼容 MySQL Binlog 模式,对下游消费 Binlog 友好;MySQL 生态的 Binlog 统计、flashback 工具(例如 my2sql/mysqlbinlog)等可兼容 

○  可将监控指标采集到 Prometheus,兼容现有的监控、告警体系 

第二,稳定性。稳定性是 vivo 引入新产品时第二考虑因素,只有系统稳定运行,才能为效率提供保证。vivo 选择了一些业务上线 OceanBase 进行试点,稳定运行大半年后, vivo 对 OceanBase 在快速扩缩容、副本调整、读写分离方面的优势深有体会。

○  平稳支持业务流量  

○  快速弹性扩容

○  多场景原生支持 Online DDL,降低变更对业务的影响

第三,服务。在试点 OceanBase 的过程中,OceanBase 团队 7*24 小时响应,提供了专家技术支持、多次专项培训、内部方案设计等技术服务和专业建议,遇到特殊问题时,研发人员也能快速介入,快速解决问题。

第四,增效。OceanBase 灵活的表分区方式,消除了分库分表的复杂性。开发人员不需要再对分库分表进行特殊的代码设计。且 OceanBase 可支撑部分 AP 类查询,在遇到这类问题时,不需要再接入下一个大数据平台完成。同时,跨集群的主备租户模式,可以高效创建灾备或只读节点,从而保证数据库的一致性,提高资源利用率。

第五,降本。OceanBase 的多租户管理模式和资源隔离,规格和副本可以灵活调整,解决了 vivo 之前的主从副本资源无法有效利用问题。并且 OceanBase 的数据压缩比非常高,可进一步降低存储成本。高可用架构+ OBproxy,无需搭配第三方工具进行切换和读写分离。

第六,工具生态。OceanBase 的工具生态非常丰富,从数据库的全生命周期,几乎覆盖了 90% 的运维场景。因为有些历史业务要兼容,所以 vivo 需要考虑和以往数据库的兼容性,假如上线新的业务系统,选择 OceanBase 可以做到开箱即用,几乎无需在平台建设方面投入人力。vivo 在使用 OceanBase 的过程中,感受最深的工具有两个,分别是 OCP 和 OMS:

○  OCP 管理平台提供了便利的部署、升级、监控、备份恢复等运维手段;

○  OMS 迁移平台提供了便利的数据迁移方法,支持全量、增量、反向同步等多种模式。

1712028023

四、对 OceanBase 的三点期望

目前,vivo 使用的是 OceanBase 4.2.0 版本,期间也遇到了一些补丁修复等问题。而在 4.2.1 等更高版本中,这些问题基本都已经规避。基于 OceanBase 的使用体验,以下方面期待在后面的版本中能得到优化。

1712028052

○  希望深化功能细节

vivo 之前使用的商业数据库,功能或许没有 OceanBase 完善,但在细节方面详尽周全。希望 OceanBase 能将现有功能持续优化和打磨,完善用户的常规使用场景的细节体验,给新客户更好的信心。

○  优化日志和报错系统

OceanBase 的日志和报错形式,与常规数据库有一些差别,而在实际运维过程中,对这些日志的分析和排查,需要一定的学习成本。希望 OceanBase 能够明确和统一的日志级别和格式,便于用户迅速识别问题详尽的错误报告和排错指南,提供直接的解决步骤,减少用户的困惑和不确定性。

○  扩展 OMS 支持范围

OMS 工具现在只支持目标,希望能够将 OMS 打造成为一个更通用的工具,同时支持源和目标,降低产品使用门槛,吸引更多的社区用户接触 OceanBase 生态,助推 OceanBase 扩大用户数量。

相关文章:

vivo鄢楠:基于OceanBase 的降本增效实践

在3 月 20 日的2024 OceanBase 数据库城市行中,vivo的 体系与流程 IT 部 DBA 组总监鄢楠就“vivo 基于 OceanBase 的降本增效实践”进行了主题演讲。本文为该演讲的精彩回顾。 vivo 在1995年于中国东莞成立,作为一家全球领先的移动互联网智能终端公司&am…...

arm cortex-m架构 SVC指令详解以及其在freertos的应用

1. 前置知识 本文基于arm cortex-m架构描述, 关于arm cortex-m的一些基础知识可以参考我另外几篇文章: arm cortex-m 架构简述arm异常处理分析c语言函数调用规范-基于arm 分析 2 SVC指令 2.1 SVC指令位域表示 bit15 - bit12:条件码&#…...

k8s笔记——kubernetes中的三种IP

kubernetes概念 Master:集群控制节点,每个集群需要至少一个master节点负责集群的管控 Node:工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行 Pod:kubernetes的…...

Golang | Leetcode Golang题解之第127题单词接龙

题目: 题解: func ladderLength(beginWord string, endWord string, wordList []string) int {wordId : map[string]int{}graph : [][]int{}addWord : func(word string) int {id, has : wordId[word]if !has {id len(wordId)wordId[word] idgraph a…...

微服务中feign远程调用相关的各种超时问题

1. 引言 在spring cloud微服中,feign远程调用可能是大家每天都接触到东西,但很多同学却没咋搞清楚这里边的各种超时问题,生产环境可能会蹦出各种奇怪的问题。 首先说下结论: 1)只使用feign组件,不使用ribbion组件&…...

springboot整合chatgpt,并且让其可以记录上下文

整合很简单,不过需要几个小条件 1.必须要有openai官方的key 2.国内需要有代理服务器或者国外的服务器把项目部署出去也没问题 我没有使用spring的springAI,听说很方便,日后有机会去体验体验,我今天用了两种方式整合了gpt 1.Ch…...

CTP前端:解码数字世界的魔法师

CTP前端:解码数字世界的魔法师 CTP前端,一个充满神秘与魅力的职业,他们在数字世界中挥舞着魔法棒,创造着令人惊叹的奇迹。那么,CTP前端究竟是做什么的呢?让我们从四个方面、五个方面、六个方面和七个方面&…...

rabbitmq的交换机类型以及他们的区别

RabbitMQ中有四种主要的交换机类型,它们是:Direct,Topic,Fanout,Headers。 Direct(直连交换机):接收到消息后,会将消息发送到与消息的routing key完全匹配的队列上。Dire…...

理解不同层的表示(layer representations)

在机器学习和深度学习领域,特别是在处理音频和自然语言处理(NLP)任务时,"层的表示"(layer representations)通常是指神经网络不同层在处理输入数据时生成的特征或嵌入。这些表示捕获了输入数据的…...

原生js访问http获取数据的方法

在原生JavaScript中,直接通过浏览器端的JavaScript访问HTTP接口获取数据通常涉及XMLHttpRequest对象或现代的fetch API。 1. 使用XMLHttpRequest XMLHttpRequest是一个老旧的API,但在某些情况下仍然很有用。以下是一个简单的例子: javascr…...

Windows 2000 Server:安全配置终极指南

"远古技术,仅供娱乐" 💭 前言:Windows 2000 服务器在当时的市场中占据了很大的比例,主要原因包括操作简单和易于管理,但也经常因为安全性问题受到谴责,Windows 2000 的安全性真的那么差吗&#x…...

基于 FastAI 文本迁移学习的情感分类(93%+Accuracy)

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记…...

集成Google Authenticator实现多因素认证(MFA)

目录 参考1、应用背景2、多因素认证3、谷歌google authenticator集成用法3.1、原理3.2、 MFA绑定3.2.1、 用户输入用户名密码登录3.2.2、检查是否已经绑定MFA(检查数据库是否保存该用户的google secret)3.2.3、谷歌身份证认证器扫描绑定3.2.4、手动测试验…...

网关(Gateway)- 自定义过滤器工厂

自定义过滤工厂类 DemoGatewayFilterFactory package com.learning.springcloud.custom;import org.apache.commons.lang.StringUtils; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.GatewayFilterChai…...

HTML静态网页成品作业(HTML+CSS)—— 香奈儿香水介绍网页(1个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…...

C++11 lambda表达式和包装器

C11 lambda表达式和包装器 一.lambda表达式1.lambda表达式的引入2.基本语法和使用1.基本语法2.使用1.传值捕捉的错误之处2.传引用捕捉 3.lambda表达式的底层原理4.lambda的特殊之处5.lambda配合decltype的新玩法 二.function包装器1.概念2.包装函数1.包装普通函数2.包装成员函数…...

3. MySQL 数据表的基本操作

文章目录 【 1. MySQL 创建数据表 】【 2. MySQL 查看表 】2.1 查看表的属性DESCRIBE/DESC 以表格的形式展示表属性SHOW CREATE TABLE 以SQL语句的形式展示表属性 2.2 查看表的内容 【 3. MySQL 修改数据表结构 】3.1 修改表名3.2 修改表字符集3.3 添加字段在末尾添加字段在开头…...

Linux命令篇(一):文件管理部分

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 1、cat命令常用参…...

IP协议1.0

基本概念: • 主机: 配有IP地址, 但是不进⾏路由控制的设备; • 路由器: 即配有IP地址, ⼜能进⾏路由控制; • 节点: 主机和路由器的统称; IP协议的报头 • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. • 4位头部⻓度(header length): IP头部的⻓…...

源码编译安装LNMP

LNMP包含: linux、Nginx、Mysql、php LNMP的工作原理 : 由客户端发送页面请求给Nginx,Nginx会根据location匹配用户访问请求的URL路径判断是静态还是动态,静态的一般是以 .html .htm .css .shtml结尾,动态的一般是以 .…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言:多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

uniapp中使用aixos 报错

问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【Oracle】分区表

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

Bean 作用域有哪些?如何答出技术深度?

导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答&#xff0c…...

前端开发者常用网站

Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...