问题如下:
有N个用web应用服务器 1,2,3,4,5,6....N
他们各自有不同的web业务应用。如服务器1:BBS,服务器2:商城,服务器3:Bolg。
这些业务逻辑都是基于.net开发现在我需要有一个时时在线用户的统计(当然,这个统计最基本的应用了。有可能还会有其它的交互数据)。这个需要把这N台上的所有登录用户信息(如用户名,帐户资金)都写到一个地方。以供其它的业务逻辑使用。因为这N台服务器上如果用户一旦进行了一些操作那就要修改这个地方所记录的值(如用户在商城消费了2元钱,记录这个地方的用户的帐户资金就是减掉2元)。因为修改非常平凡,所以用sqlserver记录效率会很低,速度不能达到要求。这时,提出了一个解决方案:单配置一台服务器来记录这N台服务器所有的在用户数据,把这些数据记录在这台服务器上的缓存(也可以是内存)上。这样N台服务器都对这台服务的用户信息进行及时的更新。现在的问题是用asp.net+c#怎么去具体实现这种操作。我原来也经常用asp.net的Cache,但它是在System.Web.Caching这个名明空间下的。使用它好像都是记录在本机的,现在需要把所有应用服务器的信息统一放到一台服务器上去。而且还有个问题是操作这些数据的不仅仅是web应用程序,可能还以winform的应用程序。请问各位有没有这方面的资料呀?最好有一个小例子。谢谢各位!!!
有N个用web应用服务器 1,2,3,4,5,6....N
他们各自有不同的web业务应用。如服务器1:BBS,服务器2:商城,服务器3:Bolg。
这些业务逻辑都是基于.net开发现在我需要有一个时时在线用户的统计(当然,这个统计最基本的应用了。有可能还会有其它的交互数据)。这个需要把这N台上的所有登录用户信息(如用户名,帐户资金)都写到一个地方。以供其它的业务逻辑使用。因为这N台服务器上如果用户一旦进行了一些操作那就要修改这个地方所记录的值(如用户在商城消费了2元钱,记录这个地方的用户的帐户资金就是减掉2元)。因为修改非常平凡,所以用sqlserver记录效率会很低,速度不能达到要求。这时,提出了一个解决方案:单配置一台服务器来记录这N台服务器所有的在用户数据,把这些数据记录在这台服务器上的缓存(也可以是内存)上。这样N台服务器都对这台服务的用户信息进行及时的更新。现在的问题是用asp.net+c#怎么去具体实现这种操作。我原来也经常用asp.net的Cache,但它是在System.Web.Caching这个名明空间下的。使用它好像都是记录在本机的,现在需要把所有应用服务器的信息统一放到一台服务器上去。而且还有个问题是操作这些数据的不仅仅是web应用程序,可能还以winform的应用程序。请问各位有没有这方面的资料呀?最好有一个小例子。谢谢各位!!!
我觉得你说的方法不见得是好方法,不过真要这么做你可以看看EnterpriceLib(去微软网站下载)中的Caching ApplicationBlock .
所以我觉得把这些数据记录到状态服务器的缓存上。如果特殊情况这个状态服务器掉线了也不会有太大的问题。不过是用户状态丢失需要重新登陆而已。还望高手指教!谢谢!!
所以我就不用session,把用户的ID值记录到cookie上。然后通过cookie去读取或修改状态服务器上缓存的用户状态数据。用状态服务器来代替session。安全方法我认为不会有什么问题。一个用户登陆之后获得随机产生的一个GUID。然后把登录时间和用户名加密放到cookies。再通过这个上状态服务器找到相应的数据。如果没有就表示没有登录。然后定时清理一段时间没有使用过的状态数据。这样想要通过口篡改cookie里的值来非法取得或修改状态服务器上的数据根本就是不可能的。
状态服务器不会使用session呀。把用户的状态数据全部写入缓存,就像放入数据库一样。
--------------------------------------------
seaonce(雨花中的小皮鞋) ( ) 信誉:95 2006-6-27 15:43:25 得分: 0
搜搜"单点登陆"-----------------------------------------------
单点登录是把用户的登录用一个单点登录的入口,登录产生令牌了返回相应的应用程序。
但是我的用户状态数据是要及时交差的。比如我登录了过后在A应用服务器上修改了我的昵称"test"这时候我再到B应用服务器上去,这时候虽然是不用我再登录了,但我的昵称还是原来老的昵称,不能及时取得我在A服务器上新修改的昵称"test"。
能不能给点示例代码。非常感谢!!
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />
这是实现不了的
我觉得可以这样,写WebService方法,操作一个XML文件,然后所有的Web服务器都调用这一个方法,也就是说对同一个文件进行读取操作。
-----------------------------------------------------------------------
基本的思路是这样。不过肯定不是操作xml。现在其实有两个方案。
一是操作数据库,这个的优点的维护方便,可以不借助webservice来实现,只要所有的应用服务器和这个状态服务器都是在一个局域网内。这是肯定可以实现的,但现在不太清楚频繁的读写数据效率能否达到需要。
二是操作缓存,在数据读写的时候效率肯定是最高的。但存在的问题是需要借助webservice或其它一些网间传输的方法,webservice的自身效率也是个问题(个人感觉,没仔细研究过webservice)。再有就是用system.web.cache这个命名空间下的缓存内吗?那如果应用服务又有webform服务又有winform的服务的时候又怎么去解决对这个缓存的共同操作呢
难道用户消费2元不要记录到数据库?