分布式session一致性问题
1.分布式session一致性 :指服务器集群情况下session共享的问题。
2.session的作用:保存服务器(tomcat)与客户端(浏览器)整个通讯的会话基本信息。
3.session应用场景:记录用户信息。登录场景(账号密码登陆成功之后,获取到userid,存放在session中,下次登录的时候直接从session中获取用户信息)、防止表单重复提交。
session可以理解为本地jvm缓存,session存放在服务器端,返回sessionid给客户端,客户端下一次请求根据sessionid去服务器端获取用户信息。
session原理:
session存放在哪里? 服务器端
浏览器关闭了,session会失效吗? 不会失效。
第一次请求:客户端向服务器端发送一个请求,服务器接收到客户端的请求,会创建一个session,使用响应头返回给客户端一个sessionid,浏览器获取到sessionid之后存放在本地。
第二次请求:客户端读取本地的sessionid存放在请求头中,服务器端从请求头中获取到对应的sessionid,使用sessionid在服务器本地查询对应的信息。
//默认创建一个session,默认值为true。
//设置为true情况下,客户端使用对应的sessionid查询不到的对应的session,则会创建一个新的session。如果查到则复用。
//设置为false情况下,客户端使用对应的sessionid查询不到对应的session的时候,不会创建session。
HttpSession session = request.getSession();
System.out.println("存入session信息,sessionid:" + session.getId() + ",value:" + value + ",serverPort:" + serverPort);
session.setAttribute("name", value);
session 分为sessionid和sessionvalue
session 跟 token非常相似。session、token本身是临时的,sessionid和token都是保证临时且唯一的。
服务器集群之后会出现哪些问题
1.分布式session问题(因为session存放在服务器端,sesionid找不到对应的sesion)
2.分布式任务调度平台(服务器集群之后如何保证定时job唯一性问题、幂等性)
2.1 xxl-job 框架
3.分布式锁解决方案
3.1 基于zookeeper 使用临时节点 + 事件通知
3.2 基于redis 使用setnx方式 不推荐,容易产生死锁现象,代码复杂
3.3 基于SpringCloud 的 redission。redis中提供了很多关于分布式解决方案的 分布式锁
4.分布式日志收集问题(如果有服务有20台做集群,查询日志的话非常麻烦)
4.1 elk
4.2 kafka
5.分布式事务问题(与集群没有关系)
5.1 lck 框架
6.分布式配置中心(与集群没有关系)
6.1 SpringCloud中的config
6.2 携程apollo 框架
分布式Session解决方案
方案1.直接使用cookie替代session(不靠谱)。不推荐
方案2.使用Nginx反向代理 使用IP绑定算法。不推荐,因为同一个ip只能访问指定的同一个机器访问(没有负载均衡,相当于没有做集群处理)
方案3.使用数据库。不推荐,效率低。
方案4.tomcat 内置支持对session 的同步。不推荐,同步会产生延迟。
方案5.使用Spring-session框架,相当于把我们的session值缓存到redis中。推荐使用
方案6.使用Token代替session。推荐使用
面试题:你们项目在发布的时候,如何保证Session不失效的问题?
使用spring-session框架,缓存session的值到redis中(一级缓存和二级缓存)。
分布式session一致性问题的更多相关文章
- 【Distributed】分布式Session一致性问题
一.概述 1.1 什么是Session 1.2 Session实现原理 1.3 Session常见问题 Session 保证在那里? 关闭浏览器Session会失效吗 服务器集群之后,Session产 ...
- 分布式Session一致性解决方案有哪些?
1.使用cookie代替session(不安全,不推荐使用) 2.使用数据库存储session(效率低,不推荐使用) 3.使用nginx反向代理ip绑定方法,同一个ip只能在同一台服务器上进行访问(不 ...
- 分布式session一致性
实现思路:当客户端发送请求到服务端后,在后台生成一个token,将token作为key,用户状态信息作为value,存入redis缓存中,并设置过期时间,最后把token返回给客户端 客户端第会保存t ...
- 分布式Session共享解决方案
分布式Session解决方案 Author:SimpleWu 分布式Session一致性? 说白了就是服务器集群Session共享的问题 Session的作用? Session 是客户端与服务器通讯会 ...
- 【Redis】分布式Session
一.问题引出 1.1 Session的原理 1.2 问题概述 二.解决方案 三.代码实现-使用Token代替Session 3.1 Service 3.2 TokenController 一.问题引出 ...
- 搞懂分布式技术11:分布式session解决方案与一致性hash
搞懂分布式技术11:分布式session解决方案与一致性hash session一致性架构设计实践 原创: 58沈剑 架构师之路 2017-05-18 一.缘起 什么是session? 服务器为每个用 ...
- Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session框架
Tornado 自定义session,与一致性哈希 ,基于redis 构建分布式 session import tornado.ioloop import tornado.web from myhas ...
- 分布式下Session一致性问题
一.Session一致性问题 1.1 什么是Session 用户使用网站的服务,基本上需要浏览器和web服务器进行多次交互,web服务器如何知道哪些请求是来自哪个会话的? 具体方式为:在会话开始时,分 ...
- 分布式下Session一致性架构举例
一.问题及方案 见这篇文章:分布式下Session一致性问题 二.分布式环境搭建: 系统环境 [root@centos7 ~]# cat /etc/redhat-release CentOS Linu ...
随机推荐
- Hadoop 3.2.1 win10 64位系统 vs2015 编译
Hadoop 3.2.1 win10 64位系统 vs2015 编译 1 环境配置 1.1 JDK下载安装 1.1.1 下载 JDK 1.8 (jdk1.8.0 ...
- CSP2019懵逼记
CSP2019 考场二日游 CJ 旅游团 本来我是准备咕掉的, 但是被强 ♂ 烈要求更博了 Day -INF ~ Day -1 专题巩固和联考 前面半个月疯狂爆炸 后面半个月状态恢复了, 考得还行 联 ...
- white-space 标签 使用
white-space MSD定义为: 是用来设置如何处理元素中的空白 其使用场景有很多,比如:横向滑动,超出显示省略号,输出空格显示空格等 1.横向滑动 在写手机页面的过程中,我想大部分人都遇到横向 ...
- Java并发指南1:并发基础与Java多线程
本文转载自互联网,侵删 什么是并发 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是 ...
- 官网引用的axios,lodash文件在脚手架中如何使用?
对于官网属性与侦听器模块,所引用的以下文件在脚手架中如何使用? <script src="https://cdn.jsdelivr.net/npm/axios@0.12.0/dist/ ...
- C之枚举
#include<stdio.h>#include<stdlib.h>enum WeekDay{ Monday,Tuesday,Wednesday,Thursday,Frida ...
- C++ STL swap_range
#include <iostream>#include <vector>#include <deque>#include <algorithm> usi ...
- 《图解 HTTP》读书笔记
<图解 HTTP>一书是日本学者上野宣所著,2014 年由于均良先生翻译并在国内出版.因为作者使用十分生动的语言和浅显易懂的案例将 HTTP 协议讲解得深入浅出,所以深受开发者喜爱.现在在 ...
- Spring Security(3):配置与自动配置的介绍及源码分析
基于注解的配置(Java Configuration)从Spring Security 3.2开始就已经支持,本篇基于Spring boot注解的配置进行讲解,如果需要基于XML配置(Security ...
- Flutter Window环境运行(VSCode + 单独运行Android 虚拟机)
官网以及很多网上文章的开发都是基于Android ,因为它能创建不同类型移动设备虚拟机.但个人始终觉得它太庞大,启动慢耗资源,但我们使用Flutter又离不开虚拟机. 经过实践,现在能成功的单独启动移 ...