最近公司开发的一个网站因为访问量增大,需要添加多台Web Server来进行负载均衡。

但是在做负载均衡前需要将一些原来固定存储在单台机器上的东西分离出来,使之能单独存在在一个独立的机器上,其中就有Session State。

Session这个东西有它的优点也有缺点:

优点首先是它是存放在服务器的,不用像Cookie那样每次都要回发到浏览器,占用额外的网络带宽;况且这个Cookie的大小也是有限制的;

其次是Session里面可以存放一些复杂的.Net的对象;另外,ASP.NET的Cache,还有ASP.NET MVC里的TempData,都是基于Session的。

缺点是如果我们采用进程内(InProc,ASP.NET的默认方式)Session,那么首先它容易丢失,因为服务器上的ASP.NET工作进程会不定期或定期做回收,一旦回收,那么Session即丢失;

另外一个缺点是进程内Session既然是存放在进程内的,那么即使是多个ASP.NET工作进程也无法共享Session,更别谈多台机器了;也就是在多工作进程/多机器环境下,用户因为每次请求都是被Load Balancer通过

某种策略分配到不同的机器上(除非Load Balancer启用了某种IP Stickness特性),那么会出现某些请求在服务器端读不到Session的情况。

解决进程内Session带来的这些问题的方法有很多,但作用都是讲Session保存在进程外的其它地方。

常用的方式有将Session保存在数据库里,ASP.NET State Server里,或者使用第三方的Session存放方案,比如使用MemCache等内存存储框架。

从性能上来说,进程内的Session最高,ASP.NET State Server其次,存放在数据库里最低。这个也很好理解,因为进程内的和ASP.NET State Server的都是放在内存里。

从稳定性来说,当然是放在数据库里最稳定,这个理论上来说不存在Session丢失的可能性;最差的是进程内的Session, 工作进程一旦挂掉,Session就全丢失。ASP.Net State Server也是介于两者之间。

由此看来抛开使用第三方Seesion解决方案的情况不看,使用ASP.NET State Server是一种从性能和稳定性来说都算折中的方案。

不过在切换到ASP.NET State Server前还需要注意,如果Session里存放了非.Net原生类型的数据(也就是用户自定义类型),需要将类标识为可序列化(Serializable),因为ASP.NET会通过二进制序列化来将对象

序列化后再发送到ASP.NET State Server保存。同时,记得放开防火墙对ASP.NET State Server使用的端口的限制(默认是42424端口,可以修改);还有就是ASP.NET State Server提供了几个用于监控性能的

性能计数器,可以通过性能监视器实时查看ASP.NET State Server的运行状况。

关于ASP.NET Session State Server的更多相关文章

  1. Unable to make the session state request to the session state server处理

    Server Error in '/' Application. Unable to make the session state request to the session state serve ...

  2. 在IIS上发布项目后浏览时报的错:Unable to make the session state request to the session state server

    错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...

  3. Unable to make the session state request to the session state server处理方法

    Server Error in '/' Application. Unable to make the session state request to the session state serve ...

  4. 转: 解决【Unable to make the session state request to the session state server】

    错误描述: Unable to make the session state request to the session state server. Please ensure that the A ...

  5. ASP.NET State Server 服务 sessionState

    在发布ASP.NET网站的时候,出现state server错误:Server Error in '/' Application.----------------------------------- ...

  6. 在发布ASP.NET网站的时候,出现state server错误

    错误信息如下: 在发布ASP.NET网站的时候,出现state server错误: Server Error in '/' Application. ------------------------- ...

  7. what is diff. b/w app state & session state

    Application state is a data repository available to all classes in an ASP.NET application. Applicati ...

  8. 如何应对Session丢失》》State Server

    Session丢失已经是一种习以为常的问题了,在自己也了解一些如何解决的问题,但是也一直没有机会去用,现在由于新的项目要在B/S下开发,所以不得不让我考虑Session的问题. 解决session丢失 ...

  9. 使用SQL Server存储ASP.NET Session变量

    创建和配置ASP.NET Session状态数据库 在基于NLB(网络负载平衡)环境下的ASP.NET Web应用程序开发,我们需要将Session存储在数据库中供多个Web应用程序调用,以下为配置方 ...

随机推荐

  1. 单独启动tomcat

    原料: jdk-1_5_0_13-windows-i586-p.exe apache-tomcat-5.5.25.zip 安装jdk,路径为:C:\Program Files\Java\jdk1.5. ...

  2. poj 2151

      http://poj.org/problem?id=2151                                                               Check ...

  3. [LeetCode] Largest Rectangle in Histogram 解题思路

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  4. win2008 ent r2 开启端口

    你好.win2008r2 ent 可以用以下命令行来实现,当然也可以用防火墙来配置 比如打开8080端口方法如下: netsh firewall add portopening TCP 8080 My ...

  5. C#截取指定字符串函数

    本文转载:http://www.cnblogs.com/liufei88866/archive/2012/05/12/2497395.html 一.通过函数方式进行获取. public string ...

  6. C程序内存管理

    C程序的内存管理 熟悉Java语言的肯定知道,Java中内存管理是由虚拟机帮助我们完毕的,在C/C++中可不是这样,程序猿须要自己去分配和回收内存空间.本文记录了C程序可运行文件的存储结构.在内存中的 ...

  7. SSD -----TLC MLC SLC

    SLC缓存什么鬼?TLC评测造假要持续多久 2016.5.5来源:中关村在线 TLC的廉价真的将SSD引入了全面普及的高速公路上,谈到TLC我们更多的理解是TLC的P/E(Program/Erase ...

  8. hadoop资料汇总(网上)

    http://blog.csdn.net/fansy1990/article/list/3      全部是hadoop的,挺好. http://stackoverflow.com/          ...

  9. php mysqli注意问题

    今天写了这个一段代码 function ip_get_method($action , $device){ if($action != 'search'){ request_die(false,'un ...

  10. JS 拼凑字符串

    和Java一样,JS中直接用"+"号拼凑字符串是很耗费资源的,所以在大量拼凑字符串的情景中,我们也需要一个类似于StringBuffer的工具, 下面利用Array.join()方 ...