速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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 的迁移不是连续的。

2010-10-09 20:015499
用户头像

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

关注

评论

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

Downie 4 for Mac(视频下载工具)兼容14系统v4.7.13中文版

iMac小白

Downie 4 Mac版 Downie 4中文版 Downie 4下载

Navicat Premium for Mac v16.3.4中文激活版

iMac小白

Navicat Premium 16下载 Navicat Premium 16激活 Navicat Premium 16破解 Navicat Premium 16 mac

实时分析用户反馈:淘宝商品评论API的电商数据分析新路径

技术冰糖葫芦

API Explorer api 货币化 API 文档 pinduoduo API

Spring高手之路18——从XML配置角度理解Spring AOP

砖业洋__

Java spring 后端 spring aop

流动性生态协议MTMT正式登陆MEXC,将在5月13日开启交易

股市老人

PullTube for Mac:视频转换,随心所欲

iMac小白

PullTube下载 PullTube中文版 PullTube激活版 PullTube直装版

Python游戏制作大师,Pygame库的深度探索与实践

Geek_e59eab

Python 游戏开发 pygame

PDF Squeezer for Mac,你的PDF压缩神器

iMac小白

PDF Squeezer下载 PDF Squeezer破解版 PDF Squeezer激活版 PDF Squeezer mac

选择MouseBoost PRO,为Mac性能加分

iMac小白

MouseBoost PRO下载 MouseBoost PRO破解版 MouseBoost PRO中文版 MouseBoost PRO激活版

量化合约跟单app源码开发搭建

开发微hkkf5566

Autodesk AutoCAD 2024 Mac(cad2024)v2024.3中文激活版

iMac小白

Autodesk AutoCAD下载 Autodesk AutoCAD 2024 Autodesk AutoCAD mac Autodesk AutoCAD 破解版

JProfiler for Mac(Java开发分析软件)v14.0.0永久激活版

iMac小白

JProfiler下载 JProfiler 14 JProfiler 14破解版

Vellum for Mac:释放您的创造力,打造专业电子书

iMac小白

Vellum下载 Vellum for mac Vellum激活

GM CHM Reader Pro,你的阅读好帮手

iMac小白

GM CHM Reader Pro下载 GM CHM Reader Pro破解 GM CHM Reader Pro激活

Macs Fan Control Pro for mac( 电脑风扇控制软件)v1.5.16中文激活版

iMac小白

Macs Fan Control Pro下载 Macs Fan Control Pro mac Macs Fan Control Pro破解 Macs Fan Control Pro

利用taobao.item_search_shop:淘宝/天猫店铺商品API返回值全攻略

技术冰糖葫芦

api 货币化 API 文档 pinduoduo API

从Penpad 到 Pencils Protocol,加密品牌全面升级

大瞿科技

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