艾伟:用 IIS 7、ARR 與 Velocity 建置高性能的大型网站

本帖是研讨会中的一些杂记,搭配一些官方的文档,经整合归纳后,介绍 IIS 7 如何搭配新一代的 ARR (Application Request Routing),建置 Server Farm 并达到比过去 NLB 更优的 Load Balancing 功能,此外还介绍微软新一代的分布式缓存技术 Velocity。

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

过去及目前 Windows Server 中的 NLB (Network Load Balance, 负载均衡) 其缺点:

  • 用软件做的 NLB 功能较少。
  • 网络流量全挡在 NAT,而 NLB 都在内部网络的 Windows Server / IIS 上。
  • 只做到网络协议的 Layer 4。
  • 没有 Health Monitoring,无法知道 Web Server / AP 的目前情况;即使网站当机了,NLB 仍会将流量持续导引至此。
  • 较适合 Client 架构,较不适合 Web AP。

此外,若改用 Hardware 做 NLB,虽然性能较佳,但价格较贵,且弹性较低。

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

因此 ARR (Application Request Routing) for IIS 7 出现了,其功能包括 [1], [2]:

Microsoft Application Request Routing Version 1 for IIS 7 is a proxy-based routing module that forwards HTTP requests to content servers based on HTTP headers and server variables, and load balance algorithms.  Application Request Routing (ARR) can be used to:

  • Increase application availability and scalability.
  • Better utilize content server resources.
  • Facilitate application deployment including pilot management and A/B testing.
  • Lower management costs and create opportunities for shared hosters.

Application Request Routing relies on the URL rewrite module to inspect incoming HTTP requests to make the routing decisions, and therefore, the URL rewrite module is required to enable Application Request Routing features.

ARR 的特性:

  • HTTP-based routing decisions:
    Unlike hardware load balancers that make the routing decisions at the IP level, Application Request Routing makes the routing decisions at the application level.  Working with the URL rewrite module, powerful routing rules can be written based on HTTP headers and server variables.
    达到网络协议的 Layer 7。
  • Load balance algorithms:
    A user-selected load balance algorithm is applied to determine which content server is most appropriate to service HTTP requests.  Six algorithms are provided.
    提供六种负载均衡的算法,可供网管人员选用。
  • Health monitoring:
    Both live traffic and specific URL tests are used to determine the health of content servers.  A set of configuration parameters are provided to define the meaning of server health.  It is also possible to disable both live traffic and URL tests and use a custom health monitoring provider by setting the health of the servers by calling RSCA APIs.
    可监控和检查 Server 是否仍在线提供服务,或已当机。可替代一些像是 WhatsUp 等网络监控及管理工具。
  • Client affinity:
    Using a cookie, Application Request Routing can affinitize all requests from a client to a content server.  It differentiates the clients behind NAT, so each client is treated independently.  This feature requires that the clients accept cookies.
  • Host name affinity:
    “Host name affinity” is a specific feature for shared hosters.  This feature changes the deployment topology to minimize and streamline administration and to create additional business opportunities.  For more information about this scenario, refer to Shared Hosting Deployment using Application Request Routing.  There are two providers, round robin and memory, to determine which server the host should be affinitized to.
  • Multiple server groups:
    Application Request Routing can manage multiple server groups, which are logical groupings of content servers in an environment.  This feature allows Application Request Routing to be used in pilot management and A/B testing scenarios.
    在几百、几千台服务器的环境中,可先试着导引 (pilot) 少数流量至某一台机器,若没问题再加大流量。
  • Management and monitoring via UI:
    All configuration settings and aggregated runtime statistics of Application Request Routing are managed and viewable using IIS Manager.
    所有的管理和配置,只要透过 IIS 图形操作界面即可。
  • Failed request tracing rules:
    Specific traces have been added to quickly troubleshoot and diagnose Application Request Routing.
    若服务器或 IIS 当机或无法提供服务,可选择是否要将所有的 error log 完整记录下来。

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

ARR (Application Request Routing) for IIS 7:

它是可免费下载的 Module (模组)。目前已可下载 version 1 的版本,下载网址:
http://www.iis.net/extensions

如先前所述,有: Health Monitoring、多种类的 Loading Balance Algorithms,如: Round Robin。

其可应用的情况,举个例,若您公司有个大型网站,有几百台或几千台机器,即可用 ARR 做成 Web Farm (Server Farm)。Server Farm 是一种让多台 Application Server 可基于「负载均衡」的逻辑性的集合 [4]。

图 1 在 IIS 7 可透过 ARR 定义和配置 Server Farm (服务器农场)

举个例子,ARR 的 pilot 功能,可先对某些机器,先试着导引 1 MB 的网络流量做测试,若没问题,则再加大流量。

此外,即使 IIS 当机或停止服务了,ARR 有 tracing 功能,可选择把所有的 error 都做 log 记录 (Failed Request Tracing)。

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

若要下载安装 ARR,可用 Microsoft Web Platform Installer 这套免费的工具作为辅助。它是一种 Web 的安装辅助工具,可简化微软各种 Web 平台上的组件,其下载和安装工作。例如若用它来下载、安装 ARR 时,就会先自动侦测,列出并告知您应该先安装哪些软件或组件。

Microsoft Web Platform Installer 的下载网址,目前有 1.0 版,以及 2.0 Beta 版:
http://www.microsoft.com/web/
http://www.microsoft.com/web/downloads/platform.aspx

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

安装 ARR 之前,必须要有 IIS 7;否则在安装 ARR 时,IIS 会自动被安装。

ARR 安装好后,IIS 7 左侧的树状菜单,下方会多出一个 Server Farm 的节点,此种 Server Farm 即为 ARR 的管理单位。


图 2 可在 IIS 7 中创建一或多个 Server Farm

 

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

应用实例:

在一个购物商城,或电子商务网站里,网站的网管人员或程序开发人员,可能会想把「浏览」、「购买及结帐」的人分开 (避免一堆人只看不买,占用过多带宽),亦即让这两种 Web Page 及其网络流量能分开,以确保信用卡的交易,及其需要的流量,能用另外一台独立的 Server 来处理。若是用传统的做法,可能需要配置 Domain Name (DNS),如此虽然也可行但较无弹性。若能改用 ARR,则会更易解决,且不必更改配置即能办到 (这是研讨会的讲师说的)。

例如在 ARR 里,我们可以:

先创建两个 Server Farm:
Server1 -- 纯粹浏览网页用
Server2 -- 交易及付费专用

当用户单击「购买」按钮,或 URL 被导引至交易付费页面时,如: 购物网站网址/purchase.aspx

我们可先用 ARR 配置此 URL 的 Routing Rule (Edit Rule)。配置方式: 在下图 3 的「Test Pattern」窗格里,在「Pattern」文本框,我们可输入: */Purchase.aspx,如此即可将其 Route 到特定的 Server Farm 上,例如我们上方提到的「交易及付费专用」的 Server2。

 


图 3 Test Pattern 窗格里的 ARR Routing Rule 配置画面

 

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

ARR 的其他应用实例,像是还可以在大型网站里,弹性调动某几台 Server,将其系统资源,都专门用来处理网站中浏览人数最多的「首页」(例如: Yahoo 等入口网站);或某个大型购物网站里,某些特别热门、或同时在线人数很多的产品型录,或某个红火的目录 (网站的文件夹),能集中系统资源,去处理这些特别重要的网站服务。

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

ARR 目前有 v1 和 v2 的版本,v2 尚为 Beta 1 版,但 v2 的 Cache (缓存) 功能较丰富,可 Cache 各地不同机器中的信息,例如:
CARP (Cache Hierarchy Management) 这项功能,可让 Cache 要查找某项信息时,先锁定在同一层里的 Cache 去搜寻,避免一开始就向所有位置的 Cache 搜寻,影响了运作效率和性能。

此外,ARR 的 HA (High Availability) 也比 Windows Server 内附的 NLB 要好。

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

Cache (缓存) 和微软新一代的分布式缓存技术 Velocity

Velocity 是微软推出的分布式缓存解决方案 (Distributed In-Memory Cache),为开发高扩展性 (scalability)、高性能的应用程提供支持,可大幅节省应用程序访问数据库的次数,以大幅提升程序的性能。Velocity 可缓存各种 CLR object 以及可被序列化的 .NET 对象,它也将集成在 .NET Framework 4.0 中,并可透过 LINQ 语法读取和查询。

以下是 msdn 在去年六月的一篇文章中 [9],对 Velocity 的简介:

  “Velocity” is a distributed in-memory application cache platform for developing scalable, available, and high-performance applications. “Velocity” fuses (融合) memory across multiple computers to give a single unified cache view to applications. Applications can store any serializable CLR object without worrying about where the object gets stored. Scalability can be achieved by simply adding more computers on demand. “Velocity” also allows for copies of data to be stored across the cluster, thus protecting data against failures. “Velocity” can be configured to run as a service accessed over the network or can be run embedded with the distributed application. “Velocity” includes an ASP.NET session provider object that enables ASP.NET session objects to be stored in the distributed cache without having to write to databases.

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

微软和 .NET 的 Cache,可概分为三种:

(1) ASP.NET Cache (从 ASP.NET 1.x 时代即内建)
(2) IIS 7 Output Cache
(3) Project Velocity (即本帖介绍的新一代分布式缓存技术)

(1)、(2) 二者皆为 Local Cache,只能在本机使用,因此传统 ASP.NET 中的 Cache 在 Server Farm / Web Farm 无法让多台机器共用。而且若 Web Farm 中的每台机器都要维护自己的 Cache,就要把 Cache 的内容在每台机器上都拷贝一份,这样不仅浪费内存,而且可能会有数据不同步的问题,Velocity 就是为了要解决这些问题。

(3) Velocity 为微软的分布式缓存解决方案
  (3.1) Distributed memory cache
  (3.2) ASP.NET Session Provider: 可把 ASP.NET 的 Session 存入分布式环境中的共用缓存,在整个 Web Farm 中共用此 Session。

目前 Velocity 只是代号,非正式的名称。等到 6 月推出正式版时,微软会公布正式名称。Velocity 目前的版本为 CTP3 (Community Technology Preview 3)。

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

 

应用实例:

 

您公司有个大型网站,用到五台服务器,每台各有 2 GB 的内存。若在这五台机器上,都安装此 Velocity 的组件,就有 10 GB 的 Cache 可共用。如同 Grid 的概念,亦即将所有的服务器,全部集合成一个大型的 Cluster,让 Web Farm 里所有的机器,都能共享 In Memory Cache。

以后当客户端透过网络连至此网站时,只有第一次来时需要访问数据库,此时会把数据放到 Velocity 里,此后这些数据就可给整个 Web Farm 共用。以后当客户端连到 Web Farm 中、五台机器中的任何一台,都可取得所要的数据。

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

Velocity 其他特性:

* 微软官方有提供测试数据,证实 Velocity 的运作性能极优。
* Velocity 比传统的 Session State Server 更易分享在分布式环境中。
* 传统的做法,Session State Server 若只建置一台机器的话,若机器当机就无法提供服务了。
* 传统的做法,Session State Server 无扩充性,无法一直加入机器做扩充。
* Velocity 扩充性佳,只要加机器,就能一直把 Cache 加入 Web Farm,整个网站系统的性能就可望一直提升。
* Velocity 还支持客户端缓存,如果启用了客户端缓存后,在从缓存集群中取回数据时,将会放在客户端缓存中,这样下次取数据时将会直接从客户端缓存中取出,能够极大的提高效率,有点像是缓存的缓存 [8]。
* Velocity 是设计用来实作 HA (High Availability)。
* Velocity 是免费的。

此外,我们可把 ASP.NET 的 Session、Cache 放入 Velocity 中 (Distributed In-Memory Cache),然后再用 LINQ 去做查询。

Velocity 预计今年 6 月释出正式版,目前已有 CTP3 版本可下载 (2009/04/17)。您可从本帖下方,参考文檔的 [14] 网址下载,内附 .chm 说明文档:

Velocity 安装前,至少要有:
(1) .NET 3.5 SP1 
(2) PowerShell 1.0 (Windows Server 2008 已内建)
后者为 Velocity 的主要管理工具。

Velocity 支持架构设计上的 HA (High Availability) [9], [19]。若在 Web Farm 中,Primary Cache 无法提供服务了 (比方服务器当机),则 Secondary Cache 对自动升級成 Primary Cache。且在这个过程中,管理人员不用改写代码;而用户在浏览网站的期间,存储有重要信息的 Session 也不会因此而遗失 (这点研讨会中讲师有亲自示范,证实了这一点),尤其像电子商务等重要的网站系统,此点尤为重要,否则会让用户有不好的体验,甚至造成订单或生意被取消。

图 4 若其中一台机器或缓存服务故障,缓存的数据及客户端的 Session 不会遗失

在 .NET Framework 4.0 中,将提供支持 Velocity 的相关 APIs,包括 System.Caching 这个新的 namespace [18],但目前 .NET 3.5 不直接支持 Velocity。而 Velocity 将来也可能成为 ASP.NET MVC、云端服务、SQL Server Data Services 的数据 Routing 及缓存的重要技术。

最后,在下方转贴 msdn 中 [9],所列出 Velocity 的重要特性:

  • Caches any serializable CLR object and provides access through simple cache APIs.
  • Supports enterprise scale: tens to hundreds of computers.
  • Configurable to run as a service accessed over the network or run embedded with the application.
  • Supports common cache configurations.
  • Supports dynamic scaling by adding new nodes.
  • Configurable number of backup copies to provide high availability.
  • Automatic load balancing.
  • Integration with administration and monitoring tools such as ETW, System Center, etc.
  • Provides tight integration with ASP.NET to be able to cache ASP.NET session data in the cache without having to write it to source databases. It can also be used as a cache for application data to be able to cache application data across the entire Web farm.
  • Follows the cache-aside architecture (also known as Explicit Caching) for V1. That is, you must decide explicitly which objects to put/remove in your applications and “Velocity” does not synchronize with any source database automatically.
  • Support for multiple client languages (for example, PHP, C#, C++, etc.).

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

 

ARR 相关文档:

[1] Application Request Routing
http://www.iis.net/extensions/ApplicationRequestRouting

[2] Using the Application Request Routing Module
http://learn.iis.net/page.aspx/489/using-the-application-request-routing-module/

[3] Microsoft Application Request Routing Version 1 for IIS 7 (x64)
http://www.iis.net/downloads/default.aspx?tabid=34&g=6&i=1712

[4] Define and Configure an Application Request Routing Server Farm
http://learn.iis.net/page.aspx/485/define-and-configure-an-application-request-routing-server-farm/

[5] IIS7.x, Server Farms and Ruby
http://blogs.msdn.com/nickhodge/archive/2009/02/24/iis7-5-server-farms-and-ruby.aspx

[6] IIS 7.0 - Application Request Routing (ARR) 论坛
http://forums.iis.net/1154.aspx

[7] 如何用 IIS 7 的 ARR 模组,实做 Reverse Proxy 机制 (台湾网页)
http://blog.miniasp.com/post/2009/04/Using-ARR-to-implement-Reverse-Proxy.aspx

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

Velocity 相关文档:

[8] 使用微软分布式缓存服务 Velocity Part 1 ~ 3 (Terry Lee)
http://www.cnblogs.com/Terrylee/archive/2008/11/20/Microsoft-Distributed-Cache-Velocity-Part1.html
http://www.cnblogs.com/Terrylee/archive/2008/11/21/Microsoft-Distributed-Cache-Velocity-Part2.html
http://www.cnblogs.com/Terrylee/archive/2008/11/21/Microsoft-Distributed-Cache-Velocity-Part3.html

[9] Microsoft Project Code Named “Velocity”(msdn)
http://msdn.microsoft.com/en-us/library/cc645013.aspx

[10] Microsoft Project Code Named “Velocity”(msdn)
http://msdn.microsoft.com/en-us/data/cc655792.aspx

[11] Velocity: Microsoft's Distributed In-Memory Cache
http://www.infoq.com/news/2008/06/Velocity

[12] Microsoft project code named Velocity (msdn blog)
http://blogs.msdn.com/velocity/default.aspx

[13] Velocity CTP3 Released
http://adtmag.com/articles/2009/04/14/velocity-ctp3-released.aspx
http://netrsc.blogspot.com/2009/04/velocity-ctp3-released.html

[14] Velocity CTP3 (Community Technology Preview 3) download:
http://www.microsoft.com/downloads/details.aspx?FamilyId=B24C3708-EEFF-4055-A867-19B5851E7CD2&displaylang=en

[15] 使用微软分布式缓存服务 Velocity 第一课
http://www.xueit.com/html/2009-01/21_312_00.html

[16] Velocity:微软的分布式内存缓存
http://www.kuqin.com/dotnet/20080613/9457.html

[17] IIS 7: Extending Our Extensions Into Your Platforms
http://blogs.iis.net/wincat/archive/2008/12/05/iis-7-extending-our-extensions-into-your-platforms.aspx

[18] System.Caching in .Net 4.0 - Part 1
http://www.iamcodemonkey.com/blog/post/SystemCaching-in-Net-40-Part-1.aspx

[19] Project Velocity – Answer to Memcached?
http://geeks.netindonesia.net/blogs/risman/archive/2009/04/04/project-velocity-answer-to-memcached.aspx

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

NLB 相关文档:

[20] Network LoadBalance 里 ASP.NET Session State 怎么处理 (台湾网页)
http://www.dotblogs.com.tw/dotjason/archive/2009/04/28/8221.aspx

[21] Windows Server 2008 怎么配置 Network LoadBalance (台湾网页)
http://www.dotblogs.com.tw/dotjason/archive/2009/04/27/8209.aspx

[22] Windows 2008 以 NLB 及复写功能达成 HA (台湾网页)
http://www.dotblogs.com.tw/dotjason/archive/2009/04/29/8241.aspx

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

时间: 2024-10-12 20:00:29

艾伟:用 IIS 7、ARR 與 Velocity 建置高性能的大型网站的相关文章

帮你5分钟建一个响应式动态网站的CARRD

  让建站像搭积木一样简单!今天要介绍的 Carrd 是近期上线的免费建站服务,只要几个简单步骤就能快速设计出美观特色的响应式网站.我花了不到五分钟就做了一个优设网的简介,而且还有动态效果!如果你想给自己做个网站,不妨试试这个! Carrd 首页一语道破它的特色:简单.自由且完整支持响应式设计的单页面网站!如果你想建的网站内容不复杂,或许只需要一个页面就能轻松带过,Carrd 会非常适合你. Carrd 内建功能包括让你自定义网站背景.标题.描述以及内容链结等等,还能为网站加入图片.影片.图标.

网站下建一个应用程序 ,网站是form验证的,可是网站验证通过下面的应用程序没验证

问题描述 网站下建一个应用程序,网站是form验证的,可是网站验证通过下面的应用程序没验证iis是7.5结构是这样的网站的wenconfig<authenticationmode="Forms"><formsloginUrl="Login.aspx"timeout="180"/></authentication>应用程序的没加 解决方案 解决方案二:应用程序池是不是用的同一个解决方案三:没遇到过,帮顶下

使用iptables建置Linux 防火墙(1)

防火墙在校园内一直被认为陌晦高深,很少有系管师有勇气进行计划性的实验,基本上这份讲义也可以当成测试报告来阅读,是笔者秉持我不入地狱.谁入地狱的精神,冒着生命危险,蛮干出来的成果,也藉此抛砖引玉,希望能带动国内能力高于笔者许多的众家高手,一起来进行有利于校园网络的公益研究! 壹.什么是防火墙 防火墙是一套能够在两个或两个以上的网络之间,明显区隔出实体线路联机的软硬件设备组合.被区隔开来的网络,可以透过封包转送技术来相互通讯,透过防火墙的安全管理机制,可以决定哪些数据可以流通,哪些资料无法流通,藉此

有闲-建一个这样的展示网站(主要用作app下载),大概需要多少money ??

问题描述 建一个这样的展示网站(主要用作app下载),大概需要多少money ?? [有闲]网站地址 http://www.youxianapp.com/自学的话,多久能自己做出来求教大神!!

OpenWBS开放式企业商务建站系统 PK企业网站管理系统ASPCMS

中介交易 SEO诊断 淘宝客 云主机 技术大厅 在ASP开源企业建站系统中,使用者比较多的是OpenWBS开放式企业商务建站系统和ASPCMS企业网站管理系统.作为比较受欢迎的两款源码,在功能上也各有长短,那么今天我们就来看看两者之间的功能对比. 运行环境方面 ASPCMS是基于ASP开发的网站内容管理系,但只支持Access,不支持MSSQL.个人用户可以免费使用,企业用户必须付费购买版权. OpenWBS是2012年新推出的一款开源免费的建站系统,属后起之秀,也是基于ASP开发的企业商务建站

建站-我正在用jsp建一个卖书的网站,每本书都有很多详细的内容介绍,目录之类的,这些文字应该存在哪里

问题描述 我正在用jsp建一个卖书的网站,每本书都有很多详细的内容介绍,目录之类的,这些文字应该存在哪里 我正在用jsp建一个卖书的网站,每本书都有很多详细的内容介绍,目录之类的,这些文字应该存在哪里,是存在数据库?还是在本地建一个txt,用的时候在读.没有这方面的经验,请大家指教指教 解决方案 当然是放在数据库里.用mysql建立一个数据库,然后建一个表,用字符串类型. 在jsp中读取 http://wenku.baidu.com/link?url=22y8vSNdHpgHEj2nYn7M1h

带宽-想建一个互动视频直播网站,能用P2P流媒体技术吗?

问题描述 想建一个互动视频直播网站,能用P2P流媒体技术吗? 想建一个网站,只有一个主播间,同时在线人数最高时20万人,其他小直播间多个,每个同时在线人数均控制在1000人以内,能否用P2P技术?带宽费用要多少一个月? 解决方案 求大神帮忙测算下啦!本人0技术,但有一个很好的商业构想,要建网站,但前提是要测算资金量

使用SharePoint 2013在几分钟内建置特殊化的搜寻体验

对象:搜寻管理员/IT 专业人员先决条件:本文假设读者已经具备基本的 SharePoint 2010 搜寻管理知识. SharePoint 2013 http://www.aliyun.com/zixun/aggregation/16897.html">Preview 中的企业搜寻中心几乎会搜寻 SharePoint 编目的所有内容.这就是为什么它的搜寻结果会标示为「全部内容」: 但对于特殊化的数据或案例来说,您通常会想要一个相符的特殊化搜寻体验.这就是「全部内容」旁边的连结.例如,[人员

英利在欧建置400kW双面太阳能发电厂

欧洲规模最大的双面发电太阳能系统于荷兰展开建设,由中国厂商英利提供PANDA系列双面双玻组件建置.该案预计将于今年第二季完工,已获得荷兰可再生能源支持计划SDE+补贴,总装机量达400kW. 该专案建置于Amtech Systems子公司Tempress Systems的荷兰总部,将采用1,428块英利所生产的PANDA双面双玻组件.PANDA系列组件采N型单晶太阳能电池所拼装而成,并由两层2.5mm的钢化玻璃取代传统的背板与表面玻璃,具30年线性品质保证,具有抗盐雾.抗PID等功能.这款组件背