PCon全球产品创新大会(北京站)来啦~了解最新日程 了解详情
写点什么

学习 Mozilla 如何扩展网站

  • 2013 年 2 月 22 日
  • 本文字数:1416 字

    阅读完需:约 5 分钟

Mozilla 的 Web 运营工程师 Brandon Burton 透露,通过内部学到的简易扩展模式,Mozilla 将网站服务能力的规模从支撑数千用户扩展到支撑数亿用户。这些学到的经验教训包括缓存、对 Web 服务器的横向扩展、异步作业和数据库。在洛杉矶举行的DevOps 集会中, Brandon 展示了 Mozilla 对这些主题的见解。此外,他还分享了 Mozilla 对 DevOps 能力未来的技术规划,包括自服务部署、平台即服务(PaaS)和公有云的使用。以下是 Brandon 的演讲要点:

缓存:使网站能够高效运行的缓存主要有三种:内存数据缓存、本地资源缓存和全局资源缓存。内存数据缓存(例如针对会话状态的memcache )最适宜于存储那些本身是无状态协议一部分的HTTP 请求之间的状态。接下来是直接位于网站前方的本地资源缓存/ 代理,它能够存储图像及其他静态文件,使网络服务器不必处理相关的请求就能够快速检索,此类工具包括 Stingray Varnish Squid 。最后是全局资源缓存(例如,内容分发网络,简称 CDN),它的作用和之前介绍的本地资源缓存相似,但它会存储更贴近最终用户的缓存文件。此外,这些全局资源缓存(CDN)会根据每个用户的位置动态选择最佳网络路由。Brandon 介绍说 Mozilla 同时使用 Akamai EdgeCast 作为他们的 CDN。

横向扩展 Web 服务器:Web 服务器的横向扩展可通过自动化工具释放和配置。所有的 Web 服务器都不会为自己或者其他的 Web 服务器将 HTTP 请求过程中有持久性要求的状态存储在本地,基本上“没有分享任何内容”。Web 服务器通过使用像 memcache NFS S3 这样的技术将它们的状态存储在自己的外部。因此,Web 服务器可以被释放或添加到池中,而不会对其他的 Web 服务器产生负面影响。自动化工具(例如 cfengine Opscode Chef Puppet )为网络服务器约定了一个众所周知的运转状态,可以被添加到待扩展的 Web 服务器池中。这些工具也可以管理全部网络服务器的更新。

异步作业:在使用网站的过程中,用户期待快速响应。异步处理用户的请求能够减少服务器计算资源的竞争,为最终用户的各个请求提供更好的响应。在某些情况下,用户请求了很复杂的任务,为了保持相似的性能,除了异步之外没有其他的合理方式能够处理。Brandon 声称,Mozilla 通过将诸如 Celery RabbitMQ 等工具协同工作促进了任务的异步处理。

数据库:Mozilla 使用 multi-master MySQL 来提供高可用性,同时该 MySQL 的 slaves 用于提供数据的只读访问。此外,slaves 位于负载均衡器之后,这样读取请求的处理能够被分发到不同的服务器,以免某个服务器过载。 Fusion-IO Kingston SSD 存储也有助于提升数据库的性能。Brandon 还强调了“优秀的 DBA”对 Mozilla 的重要性,他们维护之前提到的数据库系统。

Brandon 分享了 Mozilla 改进 DevOps 的未来计划。他们将会通过 Jenkins 构建自服务部署。Mozilla 将基于 ActiveState 的 Stackato 技术为其内部开发团队建设 PaaS。同时 Mozilla 也在努力扩展到 AWS 公有云上。

Brandon 将在今年 2 月在洛杉矶举行的 Scale11x 大会上针对这些内容给出更深入的技术分析。他还在帮助推动 hangops ,一个每周一度的 Google 聚会,在那里会就DevOps 话题进行时长一小时的讨论。主题包括文化、远程工作与运营工具。

查看英文原文 Learning to Scale Websites at Mozilla


感谢孙镜涛对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013 年 2 月 22 日 06:492079
用户头像

发布了 256 篇内容, 共 54.5 次阅读, 收获喜欢 8 次。

关注

评论

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

Scrum Patterns:准备就绪的标准 DoR(译)

Bruce Talk

敏捷 译文 Agile Scrum Patterns

CSS(十)——用CSS设置表格样式

程序员的时光

程序员 大前端 七日更 28天写作

Pulsar 社区周报|2021-01-18 ~ 2021-01-24

Apache Pulsar

大数据 开源 pulsar Apache Pulsar 消息系统

腾讯会议增长背后的技术实践

李忠良

28天写作

如何完成一次快速的查询

xcbeyond

MySQL ES 优化 MySQL优化 28天写作

架构师系列 15 系统设计图

桃花原记

终于用我的那个二手显卡搭建好了TF2的环境

IT蜗壳-Tango

七日更

架构总结思维导图

Mars

第10周作业&总结

胡益

第十周学习总结

Binary

第5周课后总结-技术选型一

潘涛

架构师训练营 4 期

ReentrantReadWriteLock读写锁简单原理案例证明

叫练

ReentrantReadWriteLock 共享锁 独占锁 锁降级

LeetCode题解:433. 最小基因变化,双向BFS(beats 99%),JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

智能汽车vs.智能手机 (28天写作 Day24/28)

mtfelix

智能手机 28天写作 智能汽车 未来社会 未来游牧化

进入最佳汇报状态的反思

JiangX

28天写作

产品经理训练营-第三周学习总结

月亮 😝

一致性hash算法

MR.X

第5周课后练习-技术选型一

潘涛

架构师训练营 4 期

「架构师训练营 4 期」 第五周 - 001&2

凯迪

个人隐私之后期展望

张老蔫

28天写作

架构师系列 16 思维导图

桃花原记

极客大学产品经理训练营 解决方案的设计与积累 第6课总结 John 易筋 ARTS 打卡 Week 37

John(易筋)

ARTS 打卡计划 极客大学产品经理训练营 解决方案的设计与积累

PMI 项目管理认证体系

Ian哥

28天写作

死锁问题

武哥聊编程

Java 多线程 死锁

ARTS打卡 第29周

引花眠

微服务 ARTS 打卡计划

产品经理训练营-第三周作业

月亮 😝

管理笔记[3]:各得其所,各尽其才

俊毅

怎么才能摸透String类的底层原理?看完这篇你就懂了

后台技术汇

28天写作

28天瞎写的第二百三十四天:炒肝你吃得惯吗?

树上

28天写作

关于上篇连接中的人的补充说明

孙苏勇

产品

java import 导入包时,我们需要注意什么呢?

看山

Java import

TDSQL前沿技术进展和趋势——数据异常基础理论研究

TDSQL前沿技术进展和趋势——数据异常基础理论研究

学习Mozilla如何扩展网站-InfoQ