Why Sessionless Web Application ?

什么是Sessionless Web Application

  Session相信大部分朋友都听说过,不使用Session的程序就是Sessionless,

  (注意,只是不用Session,并不代表不用Cookies,当然我们也要尽可能的少依赖cookis)

为什么Sessionless (stateless)

  1. Session往往是在某一台机器的内存中的,往往一台机器宕机以后,Session信息就丢失了.
  2. 如果不需要保持Session,应用程序和架构设计将会比较简单,维护也会更简单
  3. 为了保持Session 粘性, 某用户在第一次访问之后的每一次访问都要回到上一次访问的那台服务器
    1. 那么,如果一台服务器压力太大,没法把这个服务器上的压力分配到其他机器上
    2. Session粘性往往需要额外的软硬件支持和性能消耗
    3. 负载均衡器为了维护Session粘性 往往没法很好的均匀分配压力
  4. 可以更快更好的支持Web Farm (web园) / Server Farm
  5. 减少内存消耗
  6. (stateless) 有的时候朋友发给你一个链接,却无法显示, 往往都是因为这个页面需要session或者state;尽量让我们的应用程序避免这种情况

  

我们真的需要/不需要Session么?

 一般来说我们用Session来保持和用户相关的一些数据,例如用户登录以后的一些信息,用户的订单,购物车

 事实上,我们可以为每个用户生成一个GUID(事务号), 然后把用户相关的信息存放在缓存(或其他方案)中

如何实现Sessionless

  1.其实Asp.net内置提供的State Server和吧Session存放在SQL Server中的机制可以避免掉大部分上面描述的问题(不推荐)

    a.不完全实现,开发成本低 (较大规模的网站一般不考虑这种不彻底的方案)

    b.性能是个问题(SQL Server),单点故障也是一个问题(State Server)

  2.使用Memcached之类的分布式缓存(推荐)

    a.对性能有更高要求,并且能做到较高缓存命中的程序可以考虑增加本地内存中缓存

本次讨论的话题主要是针对较大规模的,用户体验,性能,扩展性等方面要求较高的网站. 小规模集群没实施的必要

原文地址:https://www.cnblogs.com/PurpleTide/p/2407159.html