分布式集群环境下,如何实现session共享一(应用场景)
在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共享一(应用场景)的更多相关文章
- 分布式集群环境下,如何实现session共享五(spring-session+redis 实现session共享)
这是分布式集群环境下,如何实现session共享系列的第五篇.在上一篇:分布式集群环境下,如何实现session共享四(部署项目测试)中,针对nginx不同的负载均衡策略:轮询.ip_hash方式,测 ...
- 分布式集群环境下,如何实现session共享四(部署项目测试)
这是分布式集群环境下,如何实现session共享系列的第四篇.在上一篇:分布式集群环境下,如何实现session共享三(环境搭建)中,已经准备好了相关的环境:tomcat.nginx.redis.本篇 ...
- 分布式集群环境下,如何实现session共享三(环境搭建)
这是分布式集群环境下,如何实现session共享系列的第三篇.在上一篇:分布式集群环境下,如何实现session共享二(项目开发)中,准备好了一个通过原生态的servlet操作session的案例.本 ...
- 分布式集群环境下,如何实现session共享二(项目开发)
在上一篇分布式集群环境下,如何实现session共享一(应用场景)中,介绍了在分布式集群下,需要实现session共享的应用场景.并且最后留下了一个问题:在集群环境下,如何实现session的共享呢? ...
- 在Hadoop1.2.1分布式集群环境下安装hive0.12
在Hadoop1.2.1分布式集群环境下安装hive0.12 ● 前言: 1. 大家最好通读一遍过后,在理解的基础上再按照步骤搭建. 2. 之前写过两篇<<在VMware下安装Ubuntu ...
- 基于HBase Hadoop 分布式集群环境下的MapReduce程序开发
HBase分布式集群环境搭建成功后,连续4.5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折.下面就是我最终调通并让程序在集群上 ...
- elasticsearch与mongodb分布式集群环境下数据同步
1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索 ...
- 分布式集群环境下运行Wordcount程序
1.分布式环境的Hadoop提交作业方式与本地安装的Hadoop作业提交方式相似,但有两点不同: 1)作业输入输出都存储在HDFS 2)本地Hadoop提交作业时将作业放在本地JVM执行,而分布式集群 ...
- Linux安装ElasticSearch与MongoDB分布式集群环境下数据同步
ElasticSearch有一个叫做river的插件式模块,可以将外部数据源中的数据导入elasticsearch并在上面建立索引.River在集群上是单例模式的,它被自动分配到一个节点上,当这个节点 ...
随机推荐
- Builder 模式初探
Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程.该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的 ...
- <JAVA图像学习笔记>十字路口交通模拟--操作系统模拟课后小项目
项目的要求很简单: 模拟出十字路口的交通控制情况: 秒. 当东西(或南北)方向红灯时,所有车辆(除了消防车.救护车.警车)均排队等待,当东西(或南北)方向绿灯时,所有车辆按序行驶(不准超车). 制作这 ...
- Python爬虫 —— 抓取美女图片
代码如下: #coding:utf-8 # import datetime import requests import os import sys from lxml import etree im ...
- UEditor上传文件的默认地址修改
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text.Re ...
- Linux_异常_02_WinSCP上传文件时显示Permission denied
异常现象如下: 二.解决方案 1.设置对应目录权限全开,就可以上传文件到这个目录了 sudo chmod 777 /devloper
- PHP实现简单爬虫-抓取网页url
<?php /** * 爬虫程序 -- 原型 * * 从给定的url获取html内容 * * @param string $url * @return string */ function _g ...
- phpstorm 代码按列对齐
设置方式: Preference... -> Editor -> CodeStyle -> PHP -> Other -> Align key-value pairs
- ACM学习历程—HDU1717 小数化分数2(gcd)
Description Ray 在数学课上听老师说,任何小数都能表示成分数的形式,他开始了化了起来,很快他就完成了,但他又想到一个问题,如何把一个循环小数化成分数呢? 请你写一个程序不但可以将普通小数 ...
- 2084. Asm.Def的基本算法
2084. Asm.Def的基本算法 传送门 ★☆ 输入文件:asm_algo.in 输出文件:asm_algo.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] ...
- 数据结构与算法(5)----->二叉树
1. 概念 二叉树节点的结构: class Node{ int value; // value表示二叉树的节点值 Node left; Node right; // left和right表示二叉树的 ...