写点什么

要快速伸缩?重新架构吧!

  • 2008-06-25
  • 本文字数:1692 字

    阅读完需:约 6 分钟

虽然经受“/. 效应”的考验常被人拿来说事,但其实 Yahoo! 的首页才是互联网上最繁忙的站点。Lukas Biewald 讲述了他的 FaceStat 网站被 Yahoo!首页上榜之后访问人数急速上升到 100,000,因而不得不快速完成伸缩的故事

星期天早上我坐在厨房里,边看报纸边想着早饭午饭一块儿吃了就在这时候接到了 Chris 的电话。他告诉我他家里的电话有好几通留言,都是说我们的网站 FaceStat 挂了。 FaceStat 是我们 Dolores Labs 用来展示群众资源技术的一个站点,发布一个月以来已经有了一小群追随者。我检查了一下网站的情况,发现它给我返回了 500 错误——10 次请求里大概只有一次能打开真正的页面。于是我登录到应用服务器上,发现磁盘已经满了,log 文件竟然涨到了 20GB!我把 log 文件删了,然后让朋友 Zuzka 查查看我们是不是被 Slashdot 临幸了。

第一反应是建立静态的页面,但他们发现仍不足以在汹涌的潮水中站住脚:

难以置信,我们的 Web 服务器( nginx )连静态页面也没办法可靠地显示……Brendan 发现我们已经达到了系统对最大文件打开数的限制——100,000——因为连接也算是打开文件。

接着团队转向要求主机托管商增加服务器资源,增加缓存,并且开始去除一些功能:

Brendan 忙着安装新的机器,我则开始砍掉系统里所有数据库密集的功能,Chris 负责增加缓存……大概中午 1 点网站重新上线,看起来很稳定。

周一负荷继续增大,于是团队增加了 memcached、监控工具,还把数据库移到了另一台更大的机器上:

现在已经是周二的晚上,原来在一台机器上处理的负载,现在已经增长到了 50 倍,网站看上去有点摇摇欲坠。我们有 6 台应用服务器和一台大型的数据库服务器。Chri 和 Brendan 真是了不起的黑客,现在的工具进步也很了不起。 Slicehost 的伸缩速度正是我们需要的。Amazon 的 S3 负担了所有的图片,虽然响应延迟不甚完美,但单凭我们自己绝对解决不了这种带宽问题。 Capistrano 让我们得以随时随处部署和回滚;git 加上 github 让我们得以争分夺秒地分头行动,再把代码合并到一起做部署。 God 保障服务器运行。 memcached 给了我们出色的缓存,而痛苦非常少(基本上……:))。

Lukas 总结他们在三天里得到的教训:

编写可伸缩的代码然后随着负载增长慢慢地提高,这是一回事;像我们这样在一两天里疯狂地重新架构一个工作中的网站则是截然不同的另一回事。我想现在网站已经是互联网上能排得上号的了,应该不会再有更大规模的流量突然上升……不过如果再发生这样的事情,我已经在这次经历中学到了一些教训:

(1)做好网站的监测。在此之前已经让异常处理程序发送邮件给我们,但异常很多,所以我并不会认真看,而且事情发生的时候我不在线。预先就为这种负载来伸缩网站显然是不合理的,但我们错在不该依靠好心人查出 Chris 的邮件地址和家庭电话去告诉他……

(2)不要畏惧放上一个错误页面。当我们放上一个页面说明网站挂了并解释原因之后,收到了很多兴高采烈的用户来信。而当我们的网站勉强运行,不但延迟严重还断断续续地死机的时候,我们收到了很多愤怒的用户来信。不切实际的想法让我们在网站真正准备好之前一两个小时就把它上了线。

(3)静态生成的首页是件好东西,memcached 是件了不起的东西。

Brendan O’Connor 在一篇后续文章中谈到了 FaceStat 应用背后的技术:

是的,我们基本上是用 Rails。我们实际上用的从 Rails 衍生出来的 Merb ,它的效率更高一些,底下用的是 Thin 。我们发现 Rails 类的平台对于快速打造新网站的原型真是无价之宝。特别是我们启动 FaceStat 的时候完全是当作一个实验品,根本不清楚人们会不会喜欢,而且最初的功能设想和后来实际的情形差别很大。 Chris 这个 Ruby 专家对于我们的团队也是无价之宝:)。

不过,与整体的架构相比,高层的平台实在不算什么:我们如何使用数据库(postgres)、如何缓存(memcached/merb-cache)、如何分摊负载、如何部署新系统(xen/slicehost),这些才是真正有影响的架构议题。FaceStat 是写操作密集的、要执行的统计计算也相当复杂,种种问题都不可小视。但现在我们所服务的用户比原先的负载提高了将近 100 倍,也就是说我们干得还算不错——至少现在!

查看英文原文: Need to Scale Fast? Just Re-Architect it!

2008-06-25 17:271218
用户头像

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

关注

评论

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

数字中国建设再提速,智慧金融发展如何跑出“加速度”?

百度大脑

人工智能 数字化 智能化

大凉山的新衣,产业AI的未来

脑极体

Presto 在字节跳动的内部实践与优化(实践篇)

字节跳动数据平台

大数据 字节跳动 presto

2022 年第一场云原生技术实践营开启报名

阿里巴巴云原生

阿里云 云原生 线下活动 布道师 实践营

OpenKruise v1.0:云原生应用自动化达到新的高峰

阿里巴巴云原生

阿里云 Kubernetes 云原生 OpenKruise 套件

Centos7 安装MySql 5.7多实例

taony

MySQL

模块八

侠客行

「架构实战营」

云原生 Serverless Database 使用体验

阿里巴巴云原生

阿里云 Serverless 云原生 弹性 表格存储

Go 语言快速入门指南:第八篇 接口

宇宙之一粟

golang 接口 12月日更 Go入门

httprouter源码刨析

王博

Presto 在字节跳动的内部实践与优化(优化篇)

字节跳动数据平台

大数据 字节跳动 presto

在字节,大规模埋点数据治理这么做!

字节跳动数据平台

大数据 字节跳动 埋点 流量 埋点治理

一套架构框架如何满足流批数据质量监控

字节跳动数据平台

大数据 字节跳动 数据质量

巨杉数据库加入龙蜥社区,共同推动软硬件行业生态发展

OpenAnolis小助手

龙蜥社区

恒源云(GPUSHARE)_[SimCSE]:对比学习,只需要 Dropout?

恒源云

深度学习

物业资产管理系统解决方案

低代码小观

低代码 企业管理 资产管理 CRM CRM系统

外包学生管理系统架构文档

Sindorei

「架构实战营」

面试被问spring ioc,这样说让面试官眼前一亮(1)

公众号:程序猿成神之路

spring 5

NFG定期赚币专场在虎符开启 APY高达1200%

区块链前沿News

Hoo虎符 虎符交易所

Java 数据持久化系列之JDBC

程序员历小冰

数据库 持久化 28天写作 12月日更

【安全漏洞】利用CodeQL分析并挖掘Log4j漏洞

H

网络安全 信息安全 漏洞

1.6(下周四)直播 | 观测云实践学堂03期:K8S太复杂,可观测实践一筹莫展?全新K8S实践干货直播间等你!

观测云

直播

百度智能云开物秀出全年成绩,发布和升级五大新产品

百度大脑

人工智能 百度

Go语言国际化 i18n

xcbeyond

golang 28天写作 i18n 12月日更

PassJava 开源 (十) :Spring Cloud 整合 OSS 对象存储

悟空聊架构

OSS 28天写作 passjava 悟空聊架构 12月日更

Spring框架基础知识(02)

海拥(haiyong.site)

28天写作 12月日更

你只会用 split?试试 StringTokenizer,性能可以快 4 倍!!

CRMEB

2021年末28天写作营总结

mtfelix

28天写作

LabVIEW图像灰度分析与变换(基础篇—4)

不脱发的程序猿

机器视觉 图像处理 LabVIEW 图像灰度分析与变换

有哪些比较好用的在线项目管理软件值得推荐?

优秀

项目管理工具

[架构实战营] 模块八作业

张祥

架构实战营

要快速伸缩?重新架构吧!_Ruby_Gavin Terrill_InfoQ精选文章