构建高性能网站的14条法则:使用CDN

时间:2022-08-03 19:43:26

用户与Web服务器的距离也会影响到响应时间。从用户的角度上看,把内容部署到多个、地理上分散的服务器中,也有助于加速网页的装载。但是,应该从哪里开始着手呢?

从地理上分散内容的第一步,不是以运行于分布式架构为目标重新设计Web应用程序。根据应用程序的复杂程度,架构的变动可能会涉及到极大的困难,比如:同步会话状态和在多服务器间复制数据库事务等等。由于涉及到架构问题,因此以这种方式缩短用户与内容之间距离的尝试可能会被拖延,甚至永远得不到批准。

别忘了终端用户响应时间的80~90%都花在了下载页面中的组件上:图像、样式表、脚本、Flash等等。而且,这也是我们在“前台性能的重要性”一节中强调的“性能黄金定律”。因此,完全可以避开重新设计应用程序架构的难题,将焦点放在分散静态内容上。虽然这样做不会带来较大的时间节约,但借助于内容分发网络却很容易实现。

所谓内容分发网络(Content Delivery Netword,CDN),就是一组Web服务器的集合,其中的服务器分布于不同的地点,能够将内容更有效地分发给用户。最终确定的将内容分发给用户的服务器,通常是基于对网络邻近情况进行测量的结果。比如说,某台服务器对用户来说只需最少的跃点,或者该服务器对用户的响应时间最短。

某些大型的Internet公司都拥有自己的CDN。不过,使用CND服务器提供商的产品往往更划算一些。常见的CND服务商包括:Akamai Technologies、Mirror Image Internet和Limelight Networks。对于创业型公司或者个人网站而言,通常不必考虑使用CND。但是,随着目标用户群逐渐增大而且越来越全球化,CDN对于加快响应时间的作用也会日益突显。在Yahoo!,通过从应用程序中分离出静态内容并转移到CDN上面,大约可以为终端用户节省20%以上的响应时间。将静态内容转存到CDN只需较少的代码改动,但却能收到显著提高网站速度的奇效。

 

-----------------------------------------------------------------------------------------------------------------------------------

 

用户的网络带宽在逐年增加,但用户访问您web服务器的快慢仍受着地域的限制(John:最典型的例子就是我们大陆的南北电信互通问题)。 Web创业者往往都会在某一地域的机房放置自己的服务器,但一旦他们渡过艰难的初创阶段,开始要面对涌入的大量用户时,他们都要面对这样的现实:即一个地域机房里的那一台服务器已经不足于应付这种大访问了,是时候在多个分散地域(城市结点)上部署更多的内容服务器。

  如何迈出第一步呢?要实施地理上的内容分布,切勿急着尝试以分布式的系统构架去重新设计您的web应用。如果依赖于应用系统的分布,那您的重构工作可能会是十分艰巨,如要处理会话状态的同步和在多个地域的数据库之间处理数据一致性等复杂问题(John:如果您进行的是类似银行级的用户应用,则不在此讨论之列)。您应该优先考虑缩短用户与您web内容之间的地域距离。

  还记得我们在前面的Chapter A中讨论的性能黄金法则吗:
    只有10-20%的最终用户响应时间是花在了下载HTML源文件上。其它的80-90%是花在了下载页面中的所有组件上。
  
  如果您的web应用服务器离用户足够近,那么在Chapter A 中讨论的那个第一个HTTP请求的响应时间就可以更快;再或者您的web组件服务器也离用户足够近,那在页面中请求这些组件的响应时间也会缩短,这可比您重新设计一个分布式的系统的复杂度要小的多了,这就要用到内容分发网络:CDN(content delivery networks)。

 

Content Delivery Networks 

  内容分发网络 CDN 是一个分布在多个地域间用于为用户提供更高效的内容访问服务的网络服务器集群。这种高效不仅体现在性能上,也体现在成本的节省上,因为CDN会选择离请求用户物理结点最近的一台服务器为用户提供内容访问服务,以在到提高响应时间。

  一些大型的互联网公司都拥有自己的CDN,但使用专业CDN服务提供商的服务则更能节约成本。如Akamai科技公司于2005年收购了 Speedera网络公司,成为北美CDN市场的领军者,还有Mirror Image网络公司,Limelight 网络公司,SAVVIS 公司等。

  如下图2-1是十大美国网站使用CDN的情况:

 
  我们能看到:
  • 有五家网站使用了Akamai
  • 有三家分别选择了 Mirror Image,Limelight,SAVVIS
  • 其他的五家要么没有使用CDN,要么就是有自己的CDN解决方案

     规模较小或是非商业网站未必能负担得起CDN服务器的高额费用,但有一些免费的CDN服务机构可以选择。如部署在阿姆斯特丹*大学的基于Apache模块的Globule(http://www.globule.org),建在普林斯顿大学的CoDeeN (http://codeen.cs.princeton.edu)等等。(John:老实说,这些免费的CDN对我们没有什么用)
  CDN除了能提升响应时间,还有一个好处。CDN还可以用于备份数据,扩充存储容量甚至是做缓存;它还可以帮助我们解决流量高峰的问题,如,一个提供实时性较强的天气预报或财经新闻的服务,或是发布某种体育娱乐新闻时,这种瞬间的访问高流量也可以被CDN所分流。

  说到这,该说说CDN的缺点了,除了费用高,您的服务响应时间则会依赖于CDN服务商的硬件和同时在使用这家CDN的其它网站,甚至是有可能会受您竞争者的影响,如果您的竞争者也在使用与您相同的CDN服务商。因为CDN服务商一般都是在他所有的分发服务器之间为客户共享这些资源(John:这和大家在机房使用共享的虚拟主机是一个道理)。CDN的另一个不足是您可能会无法直接控制这些内容服务器,假如您要修改所有该CDN中的组件的HTTP响应头,这可能必须通过CDN服务商而不是您自己的技术人员。如果CDN本身出了问题,也会直接影响用户对您的web的访问。在上图2-1中,eBay和 MySpace都使用了两家CDN服务商,这可是个明智之举,减少一定的风险,前提是您有足够的业务需求和金钱的支撑。

  CDN是用来分发静态内容的,如图片,scripts,样式表或Flash。而要提供动态的HTML页面则要一定的服务器端要求:数据库连接,状态管理,权限认证,硬件和操作系统优化等,这些复杂的东西都超出了CDN的服务器范围(John:CND不是虚拟主机提供商)。由于CDN只提供静态文件的访问,从另一方面看,也使得它更有针对性,它只针对于提供静态文件较多的网站使用。