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

极米科技:走出舒适圈,推动数据架构现代化升级 | OceanBase 《DB大咖说》

《DB 大咖说》第 13 期,邀请到了极米科技软件与创新产品线高级架构师施刘凡来进行分享。

在小红书平台上,“是否应将家里的电视升级为投影仪?”'这一话题激发了上百万篇笔记的分享与推荐,反映出年轻群体对投影仪的偏好。随着手机、电视等电子产品智能化浪潮的推进,投影仪已从昔日教室与会议室的沉重设备,华丽转身为年轻人追求极致观影体验的首选“大屏电视”。

成立于 2013 年的极米科技股份有限公司(以下简称“极米科技”),作为投影仪行业的佼佼者,是一家专注于智能投影和光学技术的科创板上市企业,集设计、研发、制造、销售和服务于一身,位列全球家用投影市场出货量第一名,并连续六年位居中国投影机市场第一。其产品远销美国、日本、德国、英国、法国等 100 多个国家和地区,为全区超过 500 万终端用户提供产品和服务。

施刘凡,是一位年轻但对数据架构升级有着独特理解的开发工程师,伴随了极米科技多个关键业务系统从传统 MySQL 升级至 OB Cloud 云数据库(以下简称 OB Cloud)的完整成长过程。

1723174509

近年来,随着极米科技业务的迅猛发展,其数据库面临前所未有的挑战,原有数据库无法为业务运行继续提供可靠支持。从去年 7 月份开始,极米科技启动了数据库的升级,开始用 OB Cloud 云数据库替换了原来的 MySQL。此举极大简化了数据库运维流程,显著降低了总体成本,为极米科技正在进行的数据架构现代化升级和业务创新打下坚实的基础。

一、选型三要素:成本、性能、兼容性

极米科技的核心业务部署在公有云上,数据库以 MySQL 为主,拥有 100 多个 MySQL 的 RDS。随着业务的增长,单 RDS 节点的存储容量逼近数据库的上限,不得不扩容,同时,RDS 的成本也持续增长。极米科技决定对 MySQL 数据库进行升级替换。

“替换 MySQL 对极米科技而言,是一次勇敢的尝试,要突破极米科技的舒适圈,同时也是对未来发展的深思熟虑。”极米科技软件与创新产品线高级架构师施刘凡如是说。

施刘凡在极米科技工作多年,从最基础的系统安装做起,逐步成长,从事核心业务系统的开发,到今天参与到极米科技的 IT 系统顶层设计。在施刘凡看来,这个成长的过程就是自己不断突破舒适圈的过程,正如今天的极米科技在数据库的升级上一样。

随后极米科技开始了新数据库的选型工作。施刘凡介绍,在数据库的选型过程中,极米科技主要有三个方面的考量:

○  成本。要降低总体拥有成本,这是极米科技在这次新数据库选型工作的一个大前提。

○  性能。性能满足业务需求是一个基本要求。特别是考虑到此前极米科技的数据库已经出现了上亿记录的单表,后来不得不通过分库分表来满足查询性能的需求。

○  兼容性。鉴于原来的业务系统都是面向 MySQL 开发的。如果新数据库的语法和 MySQL 有很大差异,必然会带来大量的软件开发和测试成本。

施刘凡表示,在迁移过程中,极米科技秉持技术中立原则,力求减少对特定数据库中间件的依赖,同时控制成本。“我们要做的,不仅是跳出 MySQL 的舒适区,还要实现成本效益的最大化。”

基于这三个要求,极米科技进行了广泛的数据库选型和多方面的测试,最后选定了 OB Cloud。

施刘凡介绍,极米科技的测试表明,OB Cloud 的 SQL 与 MySQL 兼容性非常好,应用系统基本做到了无修改。而且,OB Cloud 能兼容 PL 对象和绝大多数 SQL 对象。在性能方面,OB Cloud 也有明显优势,以单表索引扫描为例,在相同实例规格下 OB Cloud 几乎是 MySQL 吞吐量的 10 倍。

二、充分测试,稳健前行

在明确了用 OB Cloud 取代 MySQL 之后,极米科技开始为迁移准备,并为此制订了详尽的数据库迁移方案。

施刘凡表示,迁移前一方面是要做充分的 POC 验证,对各种可能应用场景进行充分的测试验证,确认没有问题后再实施迁移。

其次是运维层面的基础能力的准备。比如,HTTP 和 RPC 都要能支持基于灰度的调用。这样,在数据库迁移时可以先让小部分用户使用新版本,如果遇到问题修复后再重新灰度,可以降低迁移风险。

尽管 OB Cloud 在语法上能与 MySQL 充分兼容,但迁移中还是遭遇到一些挑战。比如夏令时制度的一些特殊时间的处理以及代码不规范引起的问题。比如,在系统中曾采用主键 ID 去做业务逻辑判断,而分布式数据库只保证 ID 的连续性而不保证递增,有些 ID 会跳跃,无法实现原来的逻辑,后来只好重写代码。

“过去有些代码写得不太规范,这次进行数据库的替换正好也是一次重新梳理的机会。”施刘凡说。

施刘凡介绍,在具体的迁移方案上极米科技有两个选择:停写切换和双向同步防循环。前一个方案是通过 OMS 将数据单向地从源端的 RDS 同步到 OB Cloud,包括数据增量同步,但业务需要停机,直接影响业务,其好处是避免了数据一致性问题;后一个方案是 MySQL 和 OB Cloud 同时进行实时写入,由 OMS 进行数据同步并防止数据循环复制,其好处是业务不停机,但实现复杂。

极米科技最终选择了相对比较简单可靠的前一个方案,由于当时做的是灰度发布,所以对业务没有产生大的影响,最终保证了数据库迁移的成功。

三、运维简化,性能飞跃

截至目前,极米科技已经成功完成了 40 多个 MySQL RDS 数据库的迁移,覆盖了采购、媒资等多个关键业务领域。随着数据逐步迁移到 OB Cloud,新数据库运维的便利性、性能优势以及成本优势开始逐步显现。

施刘凡介绍,原来的多个 RDS 数据库迁移到 OB Cloud 后实现了整合,从原来的 40 多个 RDS 实例整合为两个集群,共 Purchase、UCenter、Media、Launcher 4 个租户,数据库的运维管理变得简洁高效。

1723173797

同时,原 MySQL 数据库中记录数过亿的大表需要借助 sharding sphere 通过拆表来保证性能,而现在迁移到 OB Cloud 后不再需要拆表,极大地减轻了运维团队的压力。

而且,数据库的可用性也得到了保证,现在 RPO 为 0,RTO 小于 8 秒,为极米科技业务提供了充分的可用性保障。

另外,OB Cloud 对 MySQL 的良好兼容性也给这次迁移带了很多便利。“这次数据库的替换对开发没有任何侵入性,研发几乎感觉不到数据的变化,对他们来说只是换了一个数据源。”施刘凡说。

当然,最让施刘凡感觉惊喜还是 OB Cloud 的高性能。“最初我们规划是准备用 32 核的集群承载 20 个 RDS 数据库,而在实践中最终迁移了近 30 个,帮助我们节省了不少算力成本。”施刘凡说。

施刘凡透露,极米科技数据库的迁移还会继续,接下来还会有业务中台相关的数据库会迁移到 OB Cloud,助力更多用户的关键业务系统升级,构建现代数据架构。相信随着 OB Cloud 的深入应用与持续优化,极米科技将在智能化升级的道路上迈出更加坚实的步伐持续引领行业创新与发展,加速迈向高质量的发展之路。


特别感谢尹海文对本期《DB 大咖说》的支持。尹海文目前担任某科技公司 DBA 总监,在数据库领域深耕 10 余年,Oracle ACE,科技公众号《胖头鱼的鱼缸》主理人,热衷于分享他在数据库方面的技术与非技术见解。

写在最后:

《DB大咖说》是一档立足数据库领域,关注职业成长与前沿趋势,主要面向架构师、CTO/CIO、DBA、业务负责人、CEO 等推出的集「文音视频」于一体的原创栏目。我们初衷是围绕数据库领域的职业发展、趋势洞察、选型实践等话题,邀请领先企业的实干者、数据库领域的资深专家,从自身的职场积淀出发,结合所见所闻所思所感,输出一些对行业有价值的优质内容和职场方法论。


OceanBase 云数据库现已支持“”免费试用,现在申请,体验分布式数据库带来全新体验吧 ~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JavaScript 根据关键字匹配数组项
  • 算法练习题17——leetcode54螺旋矩阵
  • Go语言设计与实现 学习笔记 第六章 并发编程(3)
  • python基础语法十一-赋值、浅拷贝、深拷贝
  • 零知识证明在BSV网络上的应用
  • YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)
  • Flask中实现WebSocket需要什么组件
  • 如何在mac上玩使命召唤手游?苹果电脑好玩的第一人称射击游戏推荐
  • 面对Redis数据量庞大时的应对策略
  • 【Linux 内核构建】如何查看 Linux 系统中可以选择的内核有哪一些?如何切换 Linux kernel 版本?
  • docker 安装 rabbitmq
  • Java内存马系列 | SpringMVC内存马 - 下 | SpringMVC 内存马分析
  • 人工智能在行动:利用人工智能扩展您的显示和视频工作
  • AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理
  • QT6聊天室项目 网络通信实现逻辑分析
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • java2019面试题北京
  • Java超时控制的实现
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Logstash 参考指南(目录)
  • PAT A1120
  • Redux系列x:源码分析
  • Spark RDD学习: aggregate函数
  • spring security oauth2 password授权模式
  • 讲清楚之javascript作用域
  • 前端之Sass/Scss实战笔记
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何使用 JavaScript 解析 URL
  • 首页查询功能的一次实现过程
  • 用 Swift 编写面向协议的视图
  • 终端用户监控:真实用户监控还是模拟监控?
  • #数学建模# 线性规划问题的Matlab求解
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (1)svelte 教程:hello world
  • (C++17) optional的使用
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (javaweb)Http协议
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (利用IDEA+Maven)定制属于自己的jar包
  • (转)人的集合论——移山之道
  • (自适应手机端)行业协会机构网站模板
  • .net 7和core版 SignalR
  • .net core 6 集成和使用 mongodb
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET 常见的偏门问题
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • @antv/g6 业务场景:流程图
  • @NestedConfigurationProperty 注解用法
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [AI Google] Ask Photos: 使用Gemini搜索照片的新方法
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]