写点什么

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:015647
用户头像

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

关注

评论

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

小游戏流量变现都有哪些窍门?

FinFish

小游戏 微信小程序-游戏 小程序游戏 微信小游戏

隐匿于喧嚣城市的世外桃源,「武汉浮生艺术馆」开放小程序预约通道,顺利举办多场艺术展览

天天预约

小程序 SaaS 预约工具 展览 艺术馆

【FAQ】申请Health Kit权限的常见问题及解答

HarmonyOS SDK

HMS Core

Celestia 简介:重新构想的区块链

devpoint

区块链 以太坊 12月月更 Celestia

企业转型难?火山引擎数智平台提供数智升级新路径

字节跳动数据平台

大数据 数据中台 12 月 PK 榜

汽车之家基于 Milvus 的向量检索平台实践

Zilliz

数据库 向量检索 Milvus

软件测试培训 | 在霍格沃兹测试开发学社学习是种怎样的体验?

霍格沃兹测试开发学社

Amazon 4.7 星评,领域新经典,了解服务设计就读它

图灵社区

产品经理 设计模式 服务设计

Laravel中HasOne和BelongsTo的区别

ModStart

在新基建数字化的时代,寻找自我的突破和价值创造

大东(AIP内容运营专员)

HTTP报文内容

穿过生命散发芬芳

HTTP 12月月更

智能合约DAPP开发WEB3.0系统搭建技术

薇電13242772558

智能合约

大咖说·开源人说|数据库 PolarDB 开源的商业逻辑与价值思考

大咖说

数据库 阿里云 开源

我把传统业务架构升级到业务中台架构的心得

大东(AIP内容运营专员)

培训班出来前端程序员好找吗?

小谷哥

参加大数据培训可以找到工作吗

小谷哥

专利解析|数据中台—数据流配置弹框交互优化方法

元年技术洞察

数据中台 数字化转型 专利解析

传统企业DevOps基础设施架构规划之道

冯文辉

DevOps 华为云DevCloud 华为CodeArts

学习掌握哪些前端技术才能找到好工作?

小谷哥

RocketMQ Schema——让消息成为流动的结构化数据

Apache RocketMQ

RocketMQ

我对管理角色带团队的一些经验分享

大东(AIP内容运营专员)

【经验总结】HDI与普通PCB的4点主要区别

华秋PCB

工艺 PCB PCB设计

重磅!TDengine 3.2.0 正式发布

TDengine

数据库 tdengine 时序数据库

我把整个研发中台拆分过程的一些心得总结

大东(AIP内容运营专员)

我对中台的理解和企业数字中台建设的思考

大东(AIP内容运营专员)

新华三推出人工智能模型训练平台,让智慧算力触手可及

脑极体

直播|HashData信创概览

酷克数据HashData

信创

自动化测试技术笔记(二):准备工作的切入点

老张

自动化测试

数据存储,消息队列的高可用保障

C++后台开发

数据库 数据结构 消息队列 后端开发 linux开发

如何优化大场景实时渲染?HMS Core 3D Engine这么做

HarmonyOS SDK

HMS Core

阿里云视觉智能开放平台——人脸活体检测算法重磅升级

夏夜许游

服务升级 人脸活体检测 人脸人体

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