档案库 · 产品创意 · 技术决策 · 2016
GoSnaps借助《精灵宝可梦GO》热潮:5天50万用户,只靠一台100美元服务器
一款为《精灵宝可梦GO》打造的24小时应用,从第一天起就为扩展而设计:预排序的数据桶和对象存储,让它在一台100美元服务器上承载了5天50万用户。
GoSnaps
当时的题目
In July 2016 Pokémon GO's launch sent users flooding into app stores. GoChat, a rival fan app approaching one million users in five days, was crashing under 600 requests per second while a contractor estimated $4,000 for new servers — the MVP-dies-of-success failure Erik Duindam, a veteran of platforms serving hundreds of millions of users, had seen before. His answer was GoSnaps, a map-based app for sharing Pokémon GO screenshots, built in 24 hours.
它是怎么成立的
2016年7月,《精灵宝可梦GO》发布,掀起了应用商店淘金热,而GoChat(一款面向玩家的聊天应用)在五天内达到近百万用户,但随即开始出现问题:早晨大部分时间无法注册,崩溃频繁,承包商估计新服务器需要4000美元。《The Verge》的头条将应用自身的成功描述为“让他破产”。Erik Duindam,一位职业生涯为数亿用户构建网络平台的资深人士,将这种情况解读为设计失败而非规模问题。
他的回应是GoSnaps,一款“Instagram版的精灵宝可梦GO”应用,玩家在地图上分享截图,用24小时在一个NodeJS黑客松样板代码上编写,使用MongoDB且没有缓存层。尽管是MVP,但并不意味着他不在设计中考虑成功:最简单却天真的选择——将图片存储在数据库中、对每张快照运行一个重查询——是他拒绝的,因为这些在小数据下可行,但在负载下会失效。
上传的图片通过自定义图像识别代码检查,调整大小后发送到Google Cloud Storage,因此服务器和数据库永远不必为文件流量买单。快照被镜像到单独的预排序集合——所有、最多点赞、最新、最新有效——因此地图请求只需运行一个带单一排序的索引地理空间查询,而不是对整个堆积的数据进行多条件扫描。当四个Node进程在800-1000并发用户下达到90% CPU时,启用Mongoose的lean()模式返回普通对象,将负载降至5-10%。
结果是第一天6万用户,第二天16万,五天内50万独立用户,上传约15-20万张快照,同时约1000并发用户,全部在一个每月100美元的Google Cloud服务器加上廉价存储上完成。这篇文章在Hacker News上获得423分和168条评论,线程中对“你是如何营销的?”的回答是不需要营销——《精灵宝可梦GO》在大多数国家已经很受欢迎,但尚未在官方商店上架,因此人们搜索应用商店时发现了像GoSnaps这样的配套应用。
妙在哪
- 预排序桶将每次读取变成了一个带单一排序的索引地理空间查询,而不是对整个快照集合进行多条件扫描,后者在负载下会崩溃。
- 将文件卸载到对象存储,将最重的流量——提供数十万张图片——从100美元服务器转移到Google的基础设施上。
- 多花的两三个小时的架构设计,是针对GoChat所展示的确切失败的廉价保险:一个因为为失败而建、却在成功时死亡的MVP。
- 精简工具放大了效果:一旦ORM不再水合完整对象,切换Mongoose的lean()模式将CPU从90%降至5-10%。
做出来什么
GoSnaps grew to 60,000 users on day one, 160,000 on day two and 500,000 unique users within five days, with 150–200k uploaded snaps and roughly 1,000 concurrent users — served from one $100/month Google Cloud server plus cheap object storage. The article drew 423 points and 168 comments on Hacker News on 21 July 2016, where the debate was about the architecture, not the numbers.
可以借走的
两三个小时的预先设计——文件移出数据库,查询针对预排序桶——是MVP乘着用户激增的浪潮成功,还是被浪潮压垮的区别。
后来
GoSnaps的后续历史没有在材料中记载——故事在发布五天后结束,应用仍在浪潮上冲浪,作者将读者引向Unboxd和一款名为Cuisine的餐厅应用。真正留下来的是论点:一个24小时的粉丝应用在一台小型服务器上处理了50万用户,而随之而来的Hacker News讨论将架构而非炒作视为故事的核心。
资料来源
- How I built an app with 500,000 users in 5 days on a $100 server
- How I built an app with 500,000 users in 5 days on a $100 server (Hacker News discussion)
- This man's Pokémon Go chat app is so successful that it's driving him bankrupt
发现哪里写错了?告诉我们。
轮到你了
你刚读完一个点子。把你手上的题目说出来,看看谁接过同样的题。
免费账号 · 3 次免费提问 · 不用绑卡