• 我所犯的几个愚蠢错误(一)


    有些话,哪一篇博客上也不会说的。可能是因为这些话实在是太愚蠢了,不值得一提,更不可能有人去这样做。但是我恰恰成为了这个愚蠢的人。这些愚蠢事迹应该好好记录一下,吃一堑长一智。

    今天的话题是,有一个网站,由若干个Application组成,这个网站需要一个登录服务:

    (1)每一个人只能够登录一次,第二次登录的人会将第一次登陆人Kick掉;

    (2)如果这个人已经登陆了,需要提示第二次登录的人是否要继续登录;

    (3)如果这个人没有按“注销”就闪人了(例如关闭了浏览器),那么一天之后,这个人会自动被Kick;

    (4)执行该网站的任意操作都将验证用户是否已经登录,如果他注销了,抑或被提出了,那么Kick。

    从需求上看,这个登录服务需要维持用户的登录状态…那么你会如何设计和部署这个服务呢?OK,我将他作为登录应用程序的一部分部署在了IIS中。

    这造成了严重的问题:网络应用程序(池)的生命周期和登录服务期望的生命周期是不一致的。

    错误:认为登录网站启动时,在线用户登录服务(保存了登录用户状态信息的列表)也启动了,当网站销毁时,在线用户登录服务也销毁了

    这就是我愚蠢的观点。OK,以IIS为例,(6.0之后)网络应用程序运行在指定的应用程序池中,应用程序池为了保证应用程序的可靠性,有自主回收的机制(可设置)。例如:每x小时回收,内存占用到x回收,请求数达到x回收。另外还有空闲释放机制:空闲时间x自动关闭工作进程。

    你说这不是害人吗,这样不是会出现莫名其妙的用户被踢出的问题吗?Yeah,你答对了。但是做网站的人都知道,网站,是没有状态的。所以应用程序池即使回收再启动了也不会影响到用户的使用,他们会觉得速度突然快了。这个太愚蠢了,不值得一提。

    那怎么解决呢?有一个好方法,也有一个残喘方法;

    可能是好方法:登录网站仅仅负责UI上的用户交互和Cookie信息的存取,至于在线用户状态的保持,则Host在系统服务中(对于MS 平台的,例如Windows服务),自主控制资源和生命周期;

    苟延残喘的方法:将IIS中相关的设置全部都关掉,然后告诉网站管理员:如果你觉得你的网站越来越慢以至于无法接受了的时候,自行重新启动网站吧。

    希望没有别人再步后尘。

  • 相关阅读:
    Java-Maven(三):Maven坐标、Maven仓库、Maven生命周期
    Java-Maven(二):Maven常用命令
    CF796C Bank Hacking题解
    米特运输——(dfs)
    lower_bound()和upper_bound()如果搜下标到头返回啥
    骑士https://vjudge.net/contest/364177#problem/Y——(基环树)
    CF1215DTicketGame——(博弈)
    #define xhxj (Xin Hang senior sister(学姐))
    The Meaningless Game 题解
    P2827 蚯蚓
  • 原文地址:https://www.cnblogs.com/lxconan/p/my_fool_stateless_iis.html
Copyright © 2020-2023  润新知