您的位置:首页 > 编程语言 > ASP

ASP.NET2.0下实现分布式StateServer(状态服务器)

2015-03-21 08:10 246 查看
在一个asp.net1.x时代,我们一个站点的状态服务器(或者叫会话服务器),最多只能有一台,一台服务器在中小型网站下问题还不大,一旦网站到了一定的规模,状态服务器会压力很大。asp.net从2.0开始就对状态服务提供了基于Hash的负载均衡策略。下面具体谈一下这种策略的实现方式。

一、配置文件:

修改SessionState配置节

<SessionState

mode="StateServer"

timeout="20"

partitionResolverType=

"mySessionState.PartitionResolver" />

增加多个SessionState的地址

<appSettings>

<add key="StateServers" value="tcpip=192.168.10.1:42424,tcpip=192.168.10.2:42424"/>

</appSettings>

二、实现一个partitionResolver类来支持分布式

这里的PartitionResolver类就是SessionState配置节的 partitionResolverType= "mySessionState.PartitionResolver"

asp.net的状态管理模块会自动调用该类的ResolvePartition方法,来找到当前的Session应该访问那台状态服务器,就不多说了 ,看看代码一切就都明白了!

public class PartitionResolver : System.Web.IPartitionResolver

{

private String[] partitions;

public void Initialize ( )

{

// create the partition connection string table

partitions =AppSetting.StateServerList.Split( new char[]{','} );

}

public String ResolvePartition ( Object key )

{

String sid =key as string;

// hash the incoming session ID into

// one of the available partitions

int partitionID = Math.Abs( sid.GetHashCode() ) % partitions.Length;

return partitions[partitionID];

}

}

另外除了使用以上微软的的策略,你还可以实现自定义的session Module,这个时候状态服务器就可以任意选择了,你可以选择开源的MemCached,或者用.NET Remoting自己实现一个Session Store
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: