写点什么

优步完成了主要 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:0012500

评论 1 条评论

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

如何在 Mac 上创造一个纯 Windows 环境

Rose

Parallels Desktop

微软远程管理Microsoft Remote Desktop怎么样?好用吗?

Rose

Mac远程控制软件 microsoft remote desktop mac破解软件下载 微软远程管理

用友电子凭证综合服务平台2.0重磅发布!

用友BIP

电子凭证

云起无垠CEO沈凯文博士获评“2023年度技术突破者”奖

云起无垠

企业业务场景如何实现自动化连接?

RestCloud

AppLin 自动化连接

石磊:以人为本,精细运营 ,企业招聘管理的下半场

用友BIP

智能招聘

测试用例设计方法六脉神剑——第一剑:入门试招,等价边界初探 | 京东物流技术团队

京东科技开发者

测试 测试用例 测试 单元测试

企业服务大模型扎根生产一线,用友BIP为中国智造“再续新篇”!

用友BIP

企业大模型

每日一题:LeetCode-41. 缺失的第一个正数

Geek_4z9ami

面试 算法 数组 LeetCode 哈希表

关于组态图和组态图设计

2D3D前端可视化开发

组态软件 组态 组态图库 组态界面 组态工具

去哪儿“技术债”偿还实践:如何高效、低风险砍掉50%无用代码?

TakinTalks稳定性社区

TinyVue 组件库助力赛意信息获得工业软件种子奖

OpenTiny社区

开源 前端 组件库

Wireshark中的ARP协议包分析

小魏写代码

代购系统独立站的未来发展前景

Noah

专家观点∣用未来思考今天,ERP国产化价值替代的“五识”进阶能力

用友BIP

国产化价值替代

聊点技术|数据爆炸性增长,Bonree ONE存储如何做到稳如泰山

博睿数据

探索 Tokio Runtime丨Fabarta 技术专栏

Fabarta

人工智能 rust 图数据库 rust开发者大会 ​Rust

springboot如何用jar包启动,同时为不同机房设置不同的配置文件 | 京东云技术团队

京东科技开发者

Java spring 后端 spring-boot jar包

苹果Macos好玩的经典游戏推荐!

Rose

mac游戏 苹果mac游戏 Mac游戏推荐

高精度时序分析工具PP-TSv2!一站式解决电力负荷预测、设备异常检测等多场景任务

飞桨PaddlePaddle

人工智能 开发者 开发工具 技术干货 时序分析工具

SQL 也能搞复杂时序查询?-使用 SQL 在 GreptimeDB 上做 Range 查询

Greptime 格睿科技

数据库 sql 时序数据库

时间复杂度为 O(n^2) 的排序算法 | 京东物流技术团队

京东科技开发者

算法 排序算法 O(n^2)

C语言自定义类型 | AI工程化部署

AIWeker

c AI工程化部署

数据库面试题从浅入深高频必刷「2024版」

王中阳Go

MySQL 数据库 后端 面试题 面经

springboot集成activiti工作流实际项目(自定义工作流)

金陵老街

哈工大副校长刘挺访问度小满 推进人工智能等方面技术合作

科技热闻

拥抱未来:大语言模型解锁平台工程的无限可能

SEAL安全

平台工程 12 月 PK 榜 大语言模型

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