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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 本帖是研讨会中的一些杂记,搭配一些官方的文档,经整合归纳后,介绍 IIS 7 如何搭配新一代的 ARR (Application Request Routing),建置 Server Farm 并达到比过去 NLB 更优的 Load Balancing 功能,此外还介绍微软新一代的分布式缓存技术 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 的管理单位。

090516_02
图 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。

 

090516_03
图 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 也不会因此而遗失 (这点研讨会中讲师有亲自示范,证实了这一点),尤其像电子商务等重要的网站系统,此点尤为重要,否则会让用户有不好的体验,甚至造成订单或生意被取消。
090516_04
图 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

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

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
6月前
IIS上实现网站朝https://www的自动跳转
我们在做网站时时常有网站朝https://www的自动跳转的需求,以便在不输入www.子域名时也可以自动跳转到我们的当前站点,本文将介绍实现网站朝https://www的自动跳转的操作。
290 0
IIS上实现网站朝https://www的自动跳转
|
6月前
|
程序员 网络安全 PHP
IIS使用PHPManager发布PHP网站
PHPManager是一款用于IIS(Internet Information Services)的工具,旨在简化在Windows服务器上发布PHP网站的过程。通过PHPManager,用户可以轻松管理PHP版本、配置PHP设置以及进行PHP应用程序的部署。这个工具提供了直观的用户界面,使用户能够更方便地与IIS服务器进行交互,而不需要深入了解服务器配置的技术细节。PHPManager的使用使得在IIS环境中托管和维护PHP网站变得更加便捷,提高了网站的部署效率和管理灵活性。
108 0
|
6月前
|
网络安全 PHP 开发者
IIS服务器发布PHP网站
IIS服务器,相信开发者都不会陌生,它的英文全称是Internet Information Services,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务,常用于Windows系统的Web项目部署,本篇以PHP项目为例,讲解如何使用IIS完成PHP项目的发布。
102 0
|
3月前
|
C++
【Azure云服务 Cloud Service】如何在部署云服务Cloud Service时候通过启动任务Start Task来配置IIS (如开启ARR)
【Azure云服务 Cloud Service】如何在部署云服务Cloud Service时候通过启动任务Start Task来配置IIS (如开启ARR)
|
3月前
|
C++
VS IIS Express 启动项目后,绑IP让别人可以访问你的网站
VS IIS Express 启动项目后,绑IP让别人可以访问你的网站
65 0
|
6月前
|
网络协议 安全 文件存储
Windows如何使用IIS服务搭建本地WebDAV网站并实现远程管理储存文件
Windows如何使用IIS服务搭建本地WebDAV网站并实现远程管理储存文件
122 6
|
6月前
|
前端开发 PHP
IIS发布PHP网站常见错误:字体库404
笔者最近在用IIS发布php网站时,前端出现了字体库文件404的错误,关于这个问题,尝试了很多办法,最终发现是字体文件类型不被IIS识别导致的,解决方法是在config文件中添加映射配置,下面我就来详细介绍下。
89 5
宝塔中对IIS网站开启跨域限制
宝塔中对IIS网站开启跨域限制
89 0
|
Linux iOS开发 MacOS
IIS10 部署网站报【HTTP 错误 500.19 - Internal Server Error】的解决办法
原有的 web 发布文件是可以正常部署 IIS10 上面运行的,由于本地电脑环境迁移,重新换了一个宿主机部署 IIS10,网站运行提示如下信息:HTTP 错误 `500.19 - Internal Server Error` 无法访问请求的页面,因为该页的相关配置数据无效。详细错误信息:模块 `IIS Web Core` 通知 `未知 处理程序 尚未确定 错误...
1913 0
IIS10 部署网站报【HTTP 错误 500.19 - Internal Server Error】的解决办法
|
Web App开发 开发框架 缓存
IIS 部署网站对 OPTIONS 请求直接返回 40x 的处理
了解 OPTIONS 请求的基本功能、作用和大概拦截的原因,逐一排查,分别讲解在 asp.net (.net framework 时代)和 asp.net core (.net core/.net 时代) 的处理方式,OPTIONS 请求在不同的浏览器中默认请求行为表现不一致,通过设置 SetPreflightMaxAge (asp.net core 方式)的最大缓存时间,间接的优化...
449 0
IIS 部署网站对 OPTIONS 请求直接返回 40x 的处理