50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

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

关注

评论

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

RxJS系列01:响应式编程与异步

代码与野兽

6月月更

洗车行业前景好不如开个自助洗车店

共享电单车厂家

自助洗车加盟 开自助洗车店

深度操作系统20.6正式发布!

深度操作系统

开源 深度操作系统 deepin20.6 新版本 深度

相约龙蜥,开源一“夏”!2022编程之夏ASoC开始报名了

OpenAnolis小助手

阿里巴巴 开源项目 龙蜥社区 高校学生 技术项目

运维领域告警智能定级原理探索(含详细实验报告)

云智慧AIOps社区

运维 安全 监控 告警

成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

Serverless Devs

Serverless wolai

2022 支付宝五福 |“联机版”打年兽背后的网络技术 RTMS

阿里巴巴终端技术

客户端 网络技术 网络通信

英特尔计划建造浸没式实验室,帮助高功率芯片快速降温

BeeWorks

招聘 | 上班轰趴,下班狼人杀,天天招人,怕是要发!

Alluxio

面试 程序员人生 招聘 互联网热点 Alluxio

2022年4月线上终端药品增长迅猛,市场政策合规进程加快

易观分析

医药类

幸运哈希算法竞猜游戏开发特点分析(成熟方案)

开发微hkkf5566

定档615 | 数字化基础软件自主创新分享周即将来袭,点击获取“通关密钥”!

网易数帆

大数据 云原生 基础软件 数字化转型 自主创新

Docker下RabbitMQ延时队列实战两部曲之一:极速体验

程序员欣宸

RabbitMQ 5月月更 RabbtiMQ延时队列

为企业业务流程提速的BPM

力软低代码开发平台

“东数西算”与“双碳”双驱力叠加,新华三争当“全能型选手”

BeeWorks

博睿数据拨测入场加速广电深度融合

博睿数据

智能运维 博睿数据 智慧广电

【LeetCode】火柴拼正方形Java题解

Albert

LeetCode 6月月更

如何撰写数据中台蓝图方案

agileai

数据中台 企业服务总线 主数据平台 数据分析平台 蓝图方案

移动端异构运算技术-GPU OpenCL编程(进阶篇)

百度Geek说

顶级好用的 React 表单设计生成器,可拖拽生成表单

蒋川

低代码 开发工具 React 表单 组件

哪些人比较适合加盟自助洗车

共享电单车厂家

加盟自助洗车

6 月直播 7 场干货全剧透!今天:飞腾CPU调优原理及方法 | 第 19 期

OpenAnolis小助手

cpu 直播 sig 龙蜥大讲堂 飞腾

Jetpack Composes 入门

坚果

6月月更

各国儿童节时间是不一样的

清林情报分析师

数据可视化 知识图谱 儿童节

【高并发】你知道吗?大家都在使用Redisson实现分布式锁了!!

冰河

并发编程 多线程 高并发 异步编程 6月月更

2022云原生网络趋势 | K8s托管整个基础设施、多云、边缘计算、安全等场景,将云原生网络带向新战场

York

云原生 网络 Kube-OVN cni 6月月更

Redis 忽然变慢了如何排查并解决?

码哥字节

redis Redis 核心技术与实战 6月月更

做数据时代的加油站,ShardingSphere 为易车数据库架构演进提供新动力

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

CPU利用率从10%提升至60%:中型企业云原生成本优化实战指南

星汉未来

运维 云原生 IT成本 星汉未来 FinOps

为什么你的网站需要搭建在线帮助中心?

小炮

WASM VS EVM,波卡的选择预示了公链未来

One Block Community

区块链 公链 波卡生态

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