学习Mozilla如何扩展网站

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中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

你可能感兴趣的:(学习Mozilla如何扩展网站)