技术开发 频道

ASP.NET性能提升之站点部署与内容传输

  【IT168 专稿】在将站点部署和到产品服务器之前,如果你正在使用ASP.NET 2.0 Membership Provider,你应该对你的web.config文件做一些调整:

  第一篇:ASP.NET性能提升秘诀之管道与进程优化
 
  在Profile Provider中添加applicationname特性。如果你不这里添加一个具体的名称,Profile provider将使用一个GUID。因此,你在的本地机器上,你将有一个GUID并且在产品服务器上你将有另一个GUID。如果你将本地数据库拷贝到产品服务器上,则在本地数据库中你将不能够重用这些记录并且ASP.NET将在产品服务器上创建一个新的应用程序。下面就是你需要添加的内容:

<profile enabled="true">
<providers>
<clear />
<add name="..." type="System.Web.Profile.SqlProfileProvider"
connectionStringName
="..." applicationName="YourApplicationName"
description
="..." />
</providers>

  无论一个页面得到请求什么时候完成,Profile provider都将自动保存Profile信息。因此,这可能会导致一些不必要的结果,就是更新了具有重大性能损失的数据库。因此,关掉这个自动保存功能并在代码中显式使用Profile.Save()方法。
<profile enabled="true" automaticSaveEnabled="false" >
  
  角色管理会一直查询数据库以便获得用户的角色。这样会有很大的性能损失。虽然你可以让角色管理器缓存这些角色信息到一个cookie中来避免。但是这会导致用户没有足够的权限去工作,因为cookie的最大存储量为2KB。因此,你可以安全地存储角色信息到一个cookie中并且在每次请求到*.aspx 和*.asmx.时保存到数据库中。

<roleManager enabled="true" cacheRolesInCookie="true" >

  上面三个设置都必须要求站点具有高容量。

  内容传输网络
 
  每个请求从浏览器到你的服务器都会通过覆盖世界各地的骨干网络。跨越很多国家、大陆、海洋的到达你服务器的请求会变得很慢。例如,如果你在美国有多服务器并且有人从澳大利亚浏览你的 站点,这样每个请求都会从地球的一端到另一端再到达你的服务器然后再返回到浏览器上。

  如果你的站点包涵有大量的静态文件诸如图片、CSS、JavaScript等;为它们单独发送请求并下载它们将会花费大量的时间。如果你能够在澳大利亚配置一台服务器并重定向用户到你的澳大利亚服务器,那么每个请求相对于发送到美国来说几乎影响很小。不仅是网络延迟将降低,而且数据传输速度将更快,从而静态内容下载也快得多。

  如果你的网站以静态内容为主的花,这将对用户来说有足够的性能提升。此外,针对国家范围的网络相比于互联网而言,ISPs提供了更快的速度,因为每个国家一般都有少数部分连接到了骨干网中,这些骨干网由同一国家的多个ISPs进行共享。结果,用户有4兆的带宽连接将从相同国家的服务器上获得整整4兆的速度。但是在国外它们从服务器上获得的速度又会降低到512KB。因此,在同一国家有一台服务器将大大提高站点的下载速度和响应速度。

  除了提高站点的加载速度以外,CDN也会从你的网站服务器上减少流量。因为它涉及静态缓存内容,你的网站服务器会很少访问到这些内容。因此,你的访问将大大减少网站服务器的点击并且网站服务器就可以腾出更多的资源来处理动态请求。你的网站服务器也节省了大量的IIS日志空间,因为IIS对于静态内容不需要进行日志请求。如果在你的网站上有很多图片、CSS、以及JavaScript,那么每天你就可以保存上GB的IIS日志。

  上面的数字展示了位于华盛顿特区的www.pageflakes.com站点的平均响应时间,那里的服务器位于得克萨斯州的达拉斯。其平均响应时间大约为4秒。该响应也包括了服务器端的执行时间。一般来说在服务器上会花费大约0.3到0.35秒的时间来执行页面。因此,花费在网络上的时间大概是0.05秒或者50毫秒。这已经是一个非常快的速度了,因为只有4到6个点就可以从华盛顿特区到达达拉斯。


        
  这一数字展示了来自澳大利亚,悉尼的平均响应时间。平均响应时间是1.5秒,这明显高于华盛顿。与美国相比几乎相差四倍。大约仅仅只有1.2秒的网络开销。此外,从悉尼到达拉斯大约只有17到23个点。因此,相比于在美国的任何地方,从澳大利亚的站点下载速度至少要慢四倍之多。

  内容传递网络(CDN)一个跨越互联网的系统计算机网络。计算机之间透明地为终端用户传递内容(尤其是大型媒体内容)。CDN节点(在指定位置的服务器集群)被部署在多个位置,常常会跨越多个骨干网络。这些节点彼此相互协作为终端用户发出的内容请求作出回应。它们也透明地将内容移动到后台并优化传递过程。CDN服务器请求会智能的选择最近的服务器。它会在你的计算机和你所寻找内容的最近节点之间建立快速链接。

  在不同国家的节点数量以及一些冗余骨干网络的数量链接到一个CDN时其效果都不一样。一些受欢迎的CDNs有Akamai、 Limelight、EdgeCast。Akamai被很多大公司使用诸如:微软、雅虎、AOL等。一般来说,这是一个比较昂贵的解决方案。然而,Akamai提供的服务器在全球都是非常好的的,因为它们在世界上很多著名的城市都有服务器。此外,Akamai的服务费用也非常贵,他们只接受能够每个月最少花费5千加币在CDN服务上的客户。对于一些小公司,Edgecast是一个更合理的解决方案。


           
  这个数字展示了与浏览器拦截流量和服务器响应最近的节点。如果在缓存中没有响应,它会使用一条更快的路线以及相比于浏览器的ISP所能提供的最优化链接从源服务器上去抓取数据。如果该内容已经缓存,那么会直接从节点上提取数据而不需要在从源服务器上。

  一般来说,会有两种类型的CDNs。一种是通过FTP的方式将内容上传到CDN的服务器上,这种方式你可以在它们的服务器上获得一个子域诸如dropthings.somecdn.net这种形式。你可以从CDN域改变站点上所有的静态内容URL来下载内容而不是指向你自己域的相对URL。因此,一个像/logo.Gif这样的URL会被重命名为http://dropthings.somecdn.net/logo.gif。虽然这种方式很容易配置,但是会出现维护问题。你将不得不一直保持CDN的文件的异步存储。部署会变得十分复杂,因为你需要同时更新你的网站和CDN存储。这种类型的CDN(这种类型费用很便宜)的一个例子就是Cachefly。

  在你自己站点上存储静态内容还有一个更加简便的方法,但是需要使用域别名。你可以在一个指向你自己域诸如.dropthings.com的子域中来存储你的内容。然后你再使用CNAME来将子域映射到一个像cache.somecdn.net这样的CDN服务器上。当浏览器试图解析static.dropthigns.com域名时,DNS会通过CDN命名服务器查找请求。然后命名服务器返回一个离你最近并能提供最快下载性能的CDN节点的IP。然后,浏览器为文件发送请求到CDN节点上。

  当CDN节点看到这些请求时,它会检查这些内容是否已经进行了缓存。如果缓存了,它会直接从本地存储中读取内容。如果没有,会发出一个到服务器的请求,然后查看在响应中产生的缓存头。根据缓存头,系统会决定将响应缓存多长时间。同时,浏览器不会等待CDN节点来获得内容并返回它。CDN在互联网骨干网络上做了一个有趣的技巧是将请求路由到源服务器以便浏览器直接从源服务器获得响应,而CDN却一直在更新缓存。有时候CDN扮演了一个代理的角色,截取每个请求然后使用一个更快的路由和经过优化的链接到源服务器的方式从源服务器上抓取未缓存的内容。这种CDN类型的例子是Edgecast。

0
相关文章