写点什么

优步完成了主要 MySQL 集群组的升级,提升了性能和安全性

作者:Matt Saunders

  • 2024-11-05
    北京
  • 本文字数:1827 字

    阅读完需:约 6 分钟

优步完成了主要MySQL集群组的升级,提升了性能和安全性

优步(Uber)对其 MySQL 数据库集群组进行了重大的改进,版本从 5.7 升级到了 8.0。该团队希望利用 MySQL 新版本性能和并发性相关的改进,因为 MySQL 5.7 在 2023 年 10 月已经过保,不再维护。这项工作耗时一年多,涉及到升级三个地区 19 个生产区域的 2100 多个集群和 16000 个节点。


在优步(Uber)的博客文章中,Siddharth Singh 等人解释说,MySQL 基础设施包含数 PB 的数据,每秒处理超过 300 万次查询。因此,在升级过程中尽量减少中断是至关重要的。为了帮助实现这一点,优步(Uber)工程团队自动化了一个系统,以引导每个集群完成多阶段的升级过程,而无需人工干预。Singh 继续解释了他们是如何选择并行升级策略而不是选择就地升级策略的。这一决定是由于他们需要尽量最小化停机时间、降低风险,并进行更好的测试。



并行升级过程涉及几个阶段。首先,优步(Uber)为集群中的每个 MySQL 5.7 节点在同一区域或地区添加了相应的 MySQL 8.0 副本节点。随后进行了为期一周的监控,以观测系统的性能并检测任何问题。当这个“渗透期”结束之后,工程师们将流量从 5.7 版本的副本节点中转移出来,并将每个集群的 MySQL 8.0 节点提升为主节点。最后,将所有的 MySQL 5.7 节点从集群中删除,完成向 8.0 版本的转型。


系统的稳定性和数据的完整性是升级期间的首要关注点。该团队的计划是,如果检测到任何服务降级,就立即回滚到 MySQL 5.7,直到他们有足够的信心将 MySQL 8.0 节点提升为主节点。之后,将不再支持回滚到 5.7 版本,因此需要避免回滚。


这次升级也面临着挑战。升级到 MySQL 8.0 后,一些集群的查询执行计划发生了变化,从而导致了延迟和资源消耗的增加。通过与数据库软件公司 Percona 的合作,优步(Uber)确定并实施了受影响集群的修复程序。其他问题还包括:


  • 一些不兼容的查询和配置

  • 默认字符集和排序规则设置的更改

  • 需要升级客户端库以兼容 MySQL 8.0。


优步(Uber)并不是唯一一家分享如何更好地大规模启动这一重大升级的公司。正如 InfoQ 今年早些时候所报道的那样,GitHub 也进行了类似的升级,也从 5.7 升级到了 8.0,并分享了一些经验教训。在升级的众多发现中,GitHub 还遇到了一些问题,例如当使用的客户端中使用了不同的框架和语言时,从 8.0 到 5.7 的反向复制会中断,从而缩短了潜在的回滚窗口。它们还会触发复制缺陷,并在运行具有较大 WHERE IN 值的查询时遇到崩溃。


Percona 的 Przemysław Malkowski 也发表一篇介绍如何避免在 MySQL 升级到 8.0 时发生故障的详细文章,该文章强调了在升级之前很难测试与写相关的工作负载,并强调了数据丢失、查询速度慢、潜在停机和客户端应用程序不兼容的可能性。Malkowski 还解释了如何在必要时进行降级。


通过升级到 MySQL 8.0,其他组织也都从中获益了。Arzooo 的 Jyoti Ranjan Parida 在一篇 Medium 文章中解释了升级的一些好处:


  • 新特性,例如窗口函数、通用表表达式和 JSON 增强等

  • 更好的性能,改进的索引和查询执行

  • 更好的密码过期策略

  • 改进的资源管理,支持更高效的查询

  • 组多源复制


Parida 还解释了升级时需要注意的一些事情,并提供了一份全面的先决条件操作清单,例如:


  • 确保数据类型和函数没有过时

  • 删除孤立的文件和无效触发器

  • 避免使用不受支持的分区表

  • 解决关键字违规问题

  • 使用新数据字典消除命名冲突

  • 更新过时的 SQL 模式

  • 检查 ENUM/SET 列的长度

  • 通过共享表空间重新定位表分区

  • 使用 ASC 或 DESC 修改旧的 GROUP BY 子句

  • 缩短较长的外键名称

  • 考虑将 utf8mb3 转换为 utf8mb4,以获得更好的 Unicode 支持


尽管遇到了一些障碍,优步(Uber)的升级还是带来了显著的性能提升。服务器端的基准测试显示,在高并发情况下,插入延迟改善了 29%,读取延迟改善了 33%,更新延迟改善了 47%。在客户端,一些查询的速度提高了 78%,整体的数据库锁定时间缩短了 94%。


通过对好处和挑战的仔细考虑,我们成功地完成了转型,降低了风险,并最大限度地减少了服务中断。

——Siddharth Singh、Sriram Rao Udupi、Raja Sriram Ganesan、Debadarsini Nayak(优步)

作者介绍


Matt Saunders 是 Adaptavist 首席技术官的 DevOps 主管。帮助团队使用 DevOps、平台工程和云原生工具和相关技术,以快速高效地交付可靠、高质量的软件,同时尽量减少压力。他曾与复杂的企业、小型初创企业、中小企业以及介于两者之间的所有企业合作过。还共同组织了伦敦的 DevOps 聚会小组,该小组拥有 10000 多名成员,每月举办一次非常受欢迎的行业活动。


原文链接:

https://www.infoq.com/news/2024/10/uber-mysql-80-upgrade/

2024-11-05 08:0012466

评论 1 条评论

发布
用户头像
感谢分享
2024-11-28 16:52 · 北京
回复
没有更多了
发现更多内容

Flutter中http请求抓包解决方案,揭秘今年Android春招面试必问问题有哪些

android 程序员 移动开发

新一代云上基础技术和架构分论坛

阿里云 架构 基础设施 科技 云栖大会

Flutter仿钉钉考勤日历,html5移动端

android 程序员 移动开发

从厂商主张到客户主见,4个变化揭示 Serverless 的不同

望宸

Serverless 容器 云原生 k8s

Fragment新功能,setMaxLifecycle了解一下,一文详解

android 程序员 移动开发

架构实战营 模块三作业

felix

架构实战营

Flutter开发桌面应用-第一个windwos桌面应用,androidframework视频

android 程序员 移动开发

web技术分享| 一人一天一个可移植的实时聊天系统

anyRTC开发者

大前端 Web 音视频 实时通信 实时聊天

Flutter学习之认知基础组件,android手机开发教程

android 程序员 移动开发

Flutter之撸一个漂亮的登录界面的总结,Android性能优化之启动优化实战篇

android 程序员 移动开发

Flutter动手实战,大佬手把手教你如何仿写出大厂的APP,Android软件开发面试题

android 程序员 移动开发

Flutter基础(三)Dart快速入门,下血本买的

android 程序员 移动开发

Flutter自适应瀑布流,深入浅出安卓开发

android 程序员 移动开发

Flutter这么火为什么不了解一下呢?(下,2020-2021京东Android面试真题解析

android 程序员 移动开发

Flutter-系列(四)基础UI实践,从外包月薪5K到阿里月薪15K

android 程序员 移动开发

Flutter原理:三棵重要的树(渲染过程、布局约束,android开发框架介绍

android 程序员 移动开发

Flutter图表库fl_chart的使用解析(二)-折线图,android webview

android 程序员 移动开发

Framework掌握不熟?字节跳动大牛带你系统化学习,成功定级腾讯T3-2

android 程序员 移动开发

Flutter之全埋点思考与实现,精心整理

android 程序员 移动开发

Flutter提升开发效率的一些方法和工具,零基础入门学习android

android 程序员 移动开发

用技术变革传统康养行业,智慧养老的正确打开方式

华为云开发者联盟

IoT 华为云 康养 智慧养老 智慧康养物联网加速器

Flutter 跨平台框架应用实战-2019极光开发者大会,音视频开发面试

android 程序员 移动开发

Flutter之FutureBuilder的学习和使用,Android2021面试题

android 程序员 移动开发

Flutter实战之实现一个简单的新闻阅读器,html5移动端开发框架

android 程序员 移动开发

Flutter开发之Dart的数据类型01,安卓开发面试自我介绍

android 程序员 移动开发

Fragment的使用,为什么有人说Android开发不再吃香

android 程序员 移动开发

Flutter学习之布局、交互、动画,字节跳动学习笔记

android 程序员 移动开发

Flutter开发中的一些Tips(二),2021年网易Android岗面试必问

android 程序员 移动开发

Flutter混合开发(三):Android与Flutter之间通信详细指南

android 程序员 移动开发

Flutter的原理及美团的实践(中),直击优秀开源框架灵魂

android 程序员 移动开发

Fragment的通信,flutter通知推送

android 程序员 移动开发

优步完成了主要MySQL集群组的升级,提升了性能和安全性_数据集成_InfoQ精选文章