# 扩展 BBC iPlayer 的 6 种策略

> 原文： [http://highscalability.com/blog/2010/9/28/6-strategies-for-scaling-bbc-iplayer.html](http://highscalability.com/blog/2010/9/28/6-strategies-for-scaling-bbc-iplayer.html)

英国广播公司（BBC）的 iPlayer 网站平均每天有 130 万用户浏览 800 万次页面。 技术架构师 Simon Frost 在[中描述了他们如何扩展站点，将 BBC iPlayer 缩放以处理需求](http://www.bbc.co.uk/blogs/bbcinternet/2010/07/scaling_the_bbc_iplayer_to_han.html)：

1.  **使用框架**。 框架支持基于组件的开发，这使其便于团队开发，但是会引入必须最小化的延迟。 使用 Zend / PHP 是因为它支持组件且易于招募。 MySQL 用于程序元数据。 CouchDB 用于键值访问，以快速读取/写入以用户为中心的数据。
2.  **在构建架构之前先对其进行验证**。 通过提出其他架构来消除猜测，并创建原型以确定哪个选项最有效。 在性能与易于开发等因素之间取得平衡。
3.  **缓存很多**。 数据会在 memcached 中缓存几秒钟到几分钟。 较短的缓存失效期使用户的数据保持最新，但是即使这些短暂的时期也会在性能上产生巨大差异。 缓存不必花很长时间才能看到好处。 Varnish 用于缓存 HTML 页面。 大多数无效是基于时间或基于动作的（例如，有人添加了新的收藏夹）。
4.  **将页面分为个性化和标准组件**。 创建一个公共主页，以便可以将其与个性化数据分开进行缓存。 这样可以提供更快，更流畅的观看体验。 使用 Ajax 加载个性化元素。 Varnish 的灵活缓存策略用于缓存这些元素。 用户收藏夹列表仅缓存几分钟。
5.  **使用大量服务器**。 使用服务器池可横向扩展。 Web 服务器是无状态的。 页面由两个数据中心提供，以实现高可用性。
6.  **在启动**之前测试站点。 加载测试以在用户看到问题之前跟踪并修复问题。