在web应用中,由于http的请求响应式,无状态。要记录用户相关的状态信息,比如电商网站的购物车,比如用户是否登录等,都需要使用session。我们知道session是由servlet容器创建和管理,存储在服务器端,并且与客户端浏览器相关(停止web应用,关闭浏览器session都会失效)。

  如果一个web应用,部署到一台服务器(一个tomcat),那么session使用起来相当的方便,没有额外的担心,直接由servlet容器创建和管理即可。然而今天,一个web应用面临大量用户,高并发的访问(我们有十多亿同胞,骄傲啊!)。那么无论如何一个tomcat是难以提供服务的,就需要集群方式部署大量的tomcat,共同提供服务。也就是我们耳熟能详 的:集群、分布式、负载均衡。架构大概是这个样子:

  

  应用场景描述

  1.小明正在维护一个web应用:www.xx.com。该web应用是一个电商网站,起初用户量很少,业务量也不大。小明通过一台tomcat部署应用,并且把用户登录信息,购物车信息都保存在session中。应用服务良好,没有任何问题。

  2.一年以后,小明通过搜索引擎优化,购买流量的方式,推广该电商网站,再加上商品质量不错,性价比很高:物美价廉。很受用户欢迎。短时间内容增加了很多新的用户,并发量指数级提升,此时一台tomcat难以正常提供服务了

  3.于是小明通过横向扩展,增加tomcat服务器,集群方式部署:www.xx.com应用。通过三台tomcat搭建集群环境:tomcat1/tomcat2/tomcat3。

  4.在tomcat服务器集群之前,通过nginx服务器实现:负载均衡+反向代理

  5.集群环境部署好应用以后,小明遇到了一个问题:用户无法正常购物了,需要频繁登录???。这可是是个大问题!!!

  6.通过无数个夜晚的失眠(程序员遇到问题后都是这样的!问题不解决难以入睡),小明终于想清楚了问题所在,描述如下:

    6.1.由于是搭建了集群环境(三个tomcat),以及前端服务器nginx实现的负载均衡

    6.2.用户访问流程是这样的:

      a.用户访问www.xx.xom/login发起登录请求,首先是请求到达nginx服务器

      b.nginx服务器将用户的登录请求,反向代理到tomcat2服务器,实现登录,并且创建会话session

      c.当用户登录成功以后,发起访问商品列表的请求:www.xx.com/list,请求还是首先到达nginx服务器

      d.nginx服务器将用户访问商品列表请求,反向代理到tomcat服务器。此时由于用户是在tomcat2实现的登录(在tomcat2创建session),那么在tomcat3服务器并没有session,因此tomcat3服务器响应用户(还未登录,需要先登录)

      e.于是乎用户就很郁闷了:刚才不是登录过了吗???造成此问题的根本原因就是:在集群环境下,没有实现session的共享

      g.请思考:在集群环境下,如何实现session的共享呢?

  

分布式集群环境下,如何实现session共享一(应用场景)的更多相关文章

  1. 分布式集群环境下,如何实现session共享五(spring-session+redis 实现session共享)

    这是分布式集群环境下,如何实现session共享系列的第五篇.在上一篇:分布式集群环境下,如何实现session共享四(部署项目测试)中,针对nginx不同的负载均衡策略:轮询.ip_hash方式,测 ...

  2. 分布式集群环境下,如何实现session共享四(部署项目测试)

    这是分布式集群环境下,如何实现session共享系列的第四篇.在上一篇:分布式集群环境下,如何实现session共享三(环境搭建)中,已经准备好了相关的环境:tomcat.nginx.redis.本篇 ...

  3. 分布式集群环境下,如何实现session共享三(环境搭建)

    这是分布式集群环境下,如何实现session共享系列的第三篇.在上一篇:分布式集群环境下,如何实现session共享二(项目开发)中,准备好了一个通过原生态的servlet操作session的案例.本 ...

  4. 分布式集群环境下,如何实现session共享二(项目开发)

    在上一篇分布式集群环境下,如何实现session共享一(应用场景)中,介绍了在分布式集群下,需要实现session共享的应用场景.并且最后留下了一个问题:在集群环境下,如何实现session的共享呢? ...

  5. 在Hadoop1.2.1分布式集群环境下安装hive0.12

    在Hadoop1.2.1分布式集群环境下安装hive0.12 ● 前言: 1. 大家最好通读一遍过后,在理解的基础上再按照步骤搭建. 2. 之前写过两篇<<在VMware下安装Ubuntu ...

  6. 基于HBase Hadoop 分布式集群环境下的MapReduce程序开发

    HBase分布式集群环境搭建成功后,连续4.5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折.下面就是我最终调通并让程序在集群上 ...

  7. elasticsearch与mongodb分布式集群环境下数据同步

    1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索 ...

  8. 分布式集群环境下运行Wordcount程序

    1.分布式环境的Hadoop提交作业方式与本地安装的Hadoop作业提交方式相似,但有两点不同: 1)作业输入输出都存储在HDFS 2)本地Hadoop提交作业时将作业放在本地JVM执行,而分布式集群 ...

  9. Linux安装ElasticSearch与MongoDB分布式集群环境下数据同步

    ElasticSearch有一个叫做river的插件式模块,可以将外部数据源中的数据导入elasticsearch并在上面建立索引.River在集群上是单例模式的,它被自动分配到一个节点上,当这个节点 ...

随机推荐

  1. POJ2278 DNA Sequence —— AC自动机 + 矩阵优化

    题目链接:https://vjudge.net/problem/POJ-2778 DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Tota ...

  2. R语言快捷键

    一.控制台 功能  Windows & Linux   Mac 移动鼠标到控制台 Ctrl+2 Ctrl+2 移动到鼠标命令编辑 Ctrl+1 Ctrl+1 控制台清屏 Ctrl+L Comm ...

  3. entity framework WithRequiredDependent和WithRequiredPrincipal

    A->WithRequiredDependent->B 表示 A中包含B的不为null实例 ,A是主键实体  B是外键实体 A->WithRequiredPrincipal-> ...

  4. NOIP 2014【斗地主】

    这真是道大火题. 因为保证数据随机,所以开始很多人直接用搜索 + 贪心水过去了,后来,为了遏制骗分这种不良风气的传播,各大 OJ 相继推出了斗地主加强版-- 正解: 先爆搜顺子,枚举打或不打,打多少张 ...

  5. 重新拾取:ASP.NET Core WebApi 使用Swagger支持授权认证

    园子里已经有很多.NET Core 集成Swagger的文章,但对于使用授权的介绍蛮少的. public static class SwaggerServiceExtensions { public ...

  6. 64位 Windows 用了 32位编译平台 编译不过 MySQL API

    发生在一周前的事情了,当时想感受下 MySQL C API ,就写了几个小例子.虽然是在 Windows(我的工作电脑是 64位 Windows) 上面,但是不想用 VS ,只想用文本软件写好代码后用 ...

  7. 【Shell】通配符与特殊符号

    ——来自<鸟哥的Linux私房菜> 在 bash 的操作环境中还有一个非常有用的功能,那就是通配符 (wildcard) ! 我们利用 bash 处理数据就更方便了!底下列出一些常用的通配 ...

  8. 集训Day4

    在bzoj刷了好几天杂题感觉手感不是很好 继续回来集训一下 好几天没更新了啊... bzoj1875 一个无向图,一个人要从起始点走$t$步走到终点,不能沿着刚走过来那条边回去,问有多少种走法 $m ...

  9. appium 支持输入中文

    加入: desired_caps['unicodeKeyboard'] = True desired_caps['resetKeyboard'] = True 使用输入中文: input_txt = ...

  10. Win 10 无法打开内核设备“\\.\Global\vmx86”

    Win 10操作系统, VMWareWorkstation10 无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件.你想要在安装 VMware Workstation 前重启 ...