【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

MongoDB 创始人 Eliot Horowitz 分析 FourSquare 宕机原因

  • 2010-10-09
  • 本文字数:1033 字

    阅读完需:约 3 分钟

为了提高响应速度,Foursquare 使用 MongoDB 存储 Check-in 的数据已经有一段时间了。这部分数据的数据库起初跑在一个 66GB 内存的 Amazon EC2 单实例上(全部在内存里),两个月前,出于对容量增长的考虑,迁移到两台 Shard 集群上。每个 Shard 机器都是 66GB 内存,为了冗余,每个 Shard 都有复制到 Slave 实例。迁移的目标是所有的 Check-in 数据都保存在内存中。数据根据 ID 分成 200 个 Shard 分片,两台机器各占一半,也就说联机数据在每台机器上各使用 33GB 的内存。两个月相安无事。 问题来了,因为 Shard 算法导致的数据分散不均衡,其中一台 (Shard0) 数据增长到 67GB(另外一台 50GB),超过了 66GB 的限制,读写部分分散到磁盘上,性能急剧下降。从而,网站宕机。

首先尝试增加第三台 Shard 机器,上线后开始迁移,读取从三台进行,Shard0 的数据迁移到 5% 的时候,但是写操作还是让 Shard0 宕机了。这个时候发现 Shard0 存在数据碎片 (data fragmentation),即使数据迁移走,还是会占用原来的内存。每个 Check-in 文档大约占用 300 字节,而 MongoDB 是 4KB 的页 (Page),也就说十几个文档会填满一个页,而迁移 5% 反而造成了页更加稀疏,并不是将页全部删除。

这个时候已经到了第二天,随着网站全面宕机,技术团队开始用 MongoDB 的 repairDatabase() 功能来对数据库进行压缩,因为数据库太大和 EBS 慢,也因为 repairDatabase() 不能充分利用多核 CPU 的能力,这个过程耗费了 4 个小时。之后这 5% 的内存空间终于释放出来,系统重新上线。

随着 Shard0 修复,第三台成功上线,进而添加了更多的 Shard 服务器,现在数据已经更加的均衡,通过在 Slave 上运行 repairDatabase(),然后将其切换到 Master ,每台 Shard 内存占用缩减到 20GB 左右。整个故障时间已经延续了 11 小时之多。

产生问题的主要原因就是系统过载,前面介绍每台 Shard 承载原来 50% 的压力,到了问题发生的时候,单台 Shard 的负载已经超过 Shard 之前的系统负载,这时候已经积重难返了,在容量的临界点增加新系统资源,必然导致更多的停机时间。暴露了 Foursquare 团队在容量规划方 面的不足之处,或许也因为业务增长太快了吧。另外,内存碎片化的问题在没有宕机之前,技术团队应该没考虑过这个问题,如果文档的大小超过 4K,碎片化问题就不严重了,这是特定应用场景造成的特定问题。10Gen 现在已经着手研究如何进在线压缩 (online compaction)。再次,Shard 键值的顺序和插入顺序是不同的,这造成了迁移数据的时候 Chunk 的迁移不是连续的。

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2010-10-09 20:015395
用户头像

发布了 479 篇内容, 共 151.8 次阅读, 收获喜欢 47 次。

关注

评论

发布
暂无评论
发现更多内容

南昌“舞动”区块链

CECBC

区块链 基础设施

成为架构师 - 架构师训练营第 07 周

陈永龙Vincent

架构师训练营第2期 第9周总结

月下独酌

极客大学架构师训练营

JVM垃圾回收原理

幸福小子

JVM垃圾回收原理

两个周末整理的垃圾回收知识,我要吐血了

moon聊技术

JVM JVM垃圾回收原理

面试官:Mybatis里的设计模式有哪些?我一口气答了8种

田维常

mybatis

增强产业链供应链自主可控能力

CECBC

供应链

训练营第九周作业

大脸猫

极客大学架构师训练营

互操作性如何助推区块链接入互联网基础设施

CECBC

区块链 密码学

第十三周作业

orchid9

架构师训练营 2 期 Week09 作业

成为架构师 - 架构师训练营第 08 周

陈永龙Vincent

架构师训练营 2 期 Week09 总结

盘点2020 | 我要为分布式数据库mongodb在国内影响力提升及推广做点事

杨亚洲(专注MongoDB及高性能中间件)

数据库 mongodb 盘点2020 分布式数据库mongodb

【架构师训练营第 1 期 13 周】 学习总结

Bear

极客大学架构师训练营

C语言学习你要的都在这里

C语言与CPP编程

c++ 学习 编程 C语言

架构师训练营第 1 期 -- 第十三周作业

发酵的死神

极客大学架构师训练营

JVM&秒杀案例

幸福小子

JVM原理

架构师训练营week13 作业

FG佳

极客大学架构师训练营

作业-第9周

arcyao

【架构师训练营第 1 期 13 周】 作业

Bear

极客大学架构师训练营

第十二周作业

wanlinwang

极客大学架构师训练营

第十三周总结

orchid9

架构师训练营第九周笔记

李日盛

《JAVA并发编程核心方法与框架》.pdf

田维常

并发编程

架构师训练营 - 第十三周 - 作业一

行者

架构师训练营第九周作业

李日盛

架构

架构师训练营第二期 Week 9 总结

bigxiang

极客大学架构师训练营

训练营第九周总结

大脸猫

极客大学架构师训练营

redis的I/O多路复用

en

redis 多路复用 epoll

架构师训练营第二期 Week 9 作业

bigxiang

极客大学架构师训练营

MongoDB创始人Eliot Horowitz分析FourSquare宕机原因_架构_郑柯_InfoQ精选文章