在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. 【Leetcode-easy】Reverse Integer

    思路:取绝对值,反转,并判断反转的结果是否大于最大整数,需要注意的细节:判断时需要这样:result > (Integer.MAX_VALUE - v) / 10 否则result * 10 + ...

  2. Windows编程MessageBox函数

    API: int MessageBox(HWND hWnd, LPCTSTRlpText, LPCTSTRlpCaption, UINTuType); MSDN描述: This function cr ...

  3. 初学OpenMP

    这两天在看多核计算的书,就要用到openmp,因为我使用vs2015,从微软可以看到是支持openmp2.0版本的 具体使用: 在vs里创造一个控制台项目,然后打开属性管理器,在属性管理器里找到配置属 ...

  4. (2)struts2配置祥解

    struts工作流程 反射 : 1.构造对象使用构造器 //类似为Servlet public class AddAction { public AddAction(){ System.out.pri ...

  5. Html+CSS3技术实现动画、天气图标动态效果 效果很酷

    1. [代码][CSS]代码    <svg    version="1.1"    id="sun"    class="climacon c ...

  6. redis持久化【转】

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...

  7. linux命令学习笔记(51):lsof命令

    lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在, 通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协 ...

  8. 小心transform

    张老师总结的,感谢! <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  9. 解决按 backspace键 出现 ^H 问题

    输入命令 stty erase ^H #stty 时一个用来改变并打印终端行设置的常用命令stty iuclc           #  在命令行下禁止输出大写stty -iuclc          ...

  10. 二:apache的Qpid消息中间件介绍

    一:什么是Qpid?--->Qpid 是 Apache 开发的一款面向对象的消息中间件,它是一个 AMQP 的实现,可以和其他符合 AMQP 协议的系统进行通信.--->Qpid 提供了 ...