学习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)用于提供数据的只读访问。此外,从属位于负载均衡器之后,这样读取请求的处理能够被分发到不同的服务器,以免某个服务器过载。 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)关注我们,并与我们的编辑和其他读者朋友交流。