[译]peer to peer state server方式存储session(asp.net)对等模式存储session state??~

[译]

外文原文地址:http://www.codeproject.com/KB/aspnet/p2pstateserver.aspx

Demo地址:http://www.codeproject.com/KB/aspnet/p2pstateserver/p2pStateServer.zip

文章在Coder project 上投标数还是很高的。。

介绍:

asp.net开发人员一般采用3种方式存储session状态,In-process memory内存(自带的session?)sql,和状态服务器
In-process memory,一般拥有最快的性能,但是不适合在web服务端群(webserverfarms the same as sever cluster 译:加)因为session 存在asp.net的工作进程中
sqlserver 在web服务群中,可以用把session存储到进程外面这种方式(?asp.net工作进程??),存储于sql数据库中,这是非常安全可靠的方式,但是确实性能做垃圾的一种方式(据说session存在进程中会自动丢失..安全可靠可能是相对于这个吧。)但是,这种方式的一个很大的问题是开发人员为了减少sql查询的次数,必须大量缓存数据在sql的session里,sql 的session state 的目的已经超越了原本存储asp.net session 的目的。。因为这个在数据库里缓存session方法,只有一点点性能的提升。
state server 也是一种进程外存储session 的方式。它是存在内存中且传递数据性能高于sqlserver,这是一个对于In-process memory和sqlserver方式较为折中的方案。但是它也不是没有缺点,首先:一些服务器 several web servers typically depend on one state server for session state which introduces a critical single point of failure.(我没能看懂这句)
第二,在拥有负载均衡系统环境中,负载均衡系统可能会重新定向用户的请求到另一个webserver,如果这个新的服务会话所拥有不同的session state,那么用户的以前的那个sessionstate将无法找到,这个web应用程序可能就不能很好的服务了。
第三,有一个问题可能是大部分开发人员没有注意到的。webserver and session state使用纯文本的方式通讯。数据在网络中传递时时容易被他人窃听的。这个不是危言耸听,如果所有服务都运行在内网里那还好,但是谁能保证她不会被扩展到外网呢?
所以,我这个 peer to peer asp.net serverstate 就横空出世啦,用于终结上述问题,终结微软提供的那个server state。

综述:

p2pstate server 设计思想是很简单的。让stateserver安全的网络中通信,并且在彼此之间传递需要的数据。如下图所示:



如何工作的

微软的提供的sessionstate的工作方式如下:

(写,读)


p2pserver 可以像上面一样的模式精确的工作,当serverstate没有用户的请求所包含的session state,p2pstate server 会在响应客户之前去网络上搜索这个请求对应的session state.
1.webserver请求 读取,写入获取其它操作。
2.stateserver没有请求的session,则请求其它在线的sessionstate 通过传输获取session state信息
3.state2 and 3  没有请求的sesstion所以它们向其他的在线的state  server 传递请求,
4.直到传递到server 7,这个爷们拥有所需的session state,session state server 7 直接链接 server 1 并且传递相关的session state.
5.server 1 响应请求。
 

如果 所请求的session state 不在一个有效的时间内作出回应,那么state server 则认为session state 不存在与网络上(的任何一个state server),接着让webserver进程在没有这个session的情况下,继续进行下去.Demo中的 GetTransferMessage类 能展示这个正在网络中广播的消息,当某个节点正在请求一个session,所有参与交互的对等的节点-它们自己能维持这链接并向前传递这个消息,而且session state 在当前对等网络中以" 带外数据(out—of—band data)"数据的模式快速传输。(有点拗口,感觉有点问题。)

MESSAGING

这个服务很大成份是由消息驱动的。看下图的消息驱动子系统

 



当这个服务接收到一个socket,数据会被暂时保在一个 HTTPPartialData类的实例中,并分配(绑定?)到那个socket HTTPPartialData实例验证数据的合法性,如果数据已经全部接收到,并检查所接受的数据是否有错误,如果有错误,则所有接收到的数据则会被抛弃,并且这个socket链接被关闭,如果数据没有全部接收到,但是验证没有发现错误,则继续等待其他数据。如果接收到的数据已经可以形成一个httpmessage,所有数据则被发送到一个 MessageFactory 对象,这个对象会去检查这个数据并会创建一个合适的 ServiceMessage 子类,这个子类实现 Process 方法,并调用该方法去处理消息。

还有很多,下次翻译。初次发博客,请大家指教。。

转载于:https://www.cnblogs.com/teacup/archive/2009/09/20/1570481.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值