原文地址:http://xcai.net/archives/30
前文提到可以利用IIS7 ARR模块实现类nginx反向代理,提供负载均衡方案,但是真正要在实际应用中部署,还得解决session同步问题,session实际上是缓存的一种,在之前微软的解决方案中并没有可靠的分布式缓存方案,通常都是利用memcached来实现,不过最新.NET 4中已经有较为完善的解决方案:Windows Server AppFabric 缓存。
Windows Server AppFabric 缓存 功能使用彼此通信的服务器群集来形成单个统一的应用程序缓存系统。无论构成缓存群集的计算机有多少台,您的客户端应用程序都可以与群集中单个逻辑单元的缓存配合使用。
物理体系结构的主要组件包含缓存服务器、缓存主机 Windows 服务、缓存群集、基于 Windows PowerShell 的缓存管理工具、群集配置存储位置和缓存客户端。
AppFabric 中缓存群集的逻辑体系结构由命名缓存、区域和缓存对象组成。在下图中,命名缓存跨群集中的所有缓存主机,但区域仅限于群集中的一个缓存主机。
针对 .net 开发,提供了 Microsoft.ApplicationServer.Caching 命名空间中的接口供开发调用,具体开发不在此处详述,详细浏览:http://msdn.microsoft.com/zh-cn/library/ee790941.aspx
Microsoft.ApplicationServer.Caching 中提供了现成的 SessionProvider,不需要应用做任何开发,就能通过部署切换到分布式缓存中,详细配置方法参考:http://msdn.microsoft.com/en-us/library/ee790859.aspx
配置案例如下:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!--configSections must be the FIRST element --> <configsections> <!-- required to read the <dataCacheClient> element --> <section type="Microsoft.ApplicationServer.Caching.DataCacheClientSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="dataCacheClient" allowlocation="true" allowdefinition="Everywhere" /> </configsections> <!-- cache client --> <datacacheclient> <!-- cache host(s) --> <hosts> <host name="CacheServer1" cacheport="22233" /> </hosts> </datacacheclient> <system.web> <sessionstate mode="Custom" customprovider="AppFabricCacheSessionStoreProvider"> <providers> <!-- specify the named cache for session data --> <add type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider" name="AppFabricCacheSessionStoreProvider" cachename="NamedCache1" sharedid="SharedApp" /> </providers> </sessionstate> </system.web> </configuration></pre>
至此基本具备了完整的windows .net 平台大规模web应用解决方案,并且不需要对现有应用做改造就能实现无缝迁移。