2019独角兽企业重金招聘Python工程师标准>>>

在访问量上去以后,很多人会采用web集群的方式在满足逐渐增长的用户量。这时候就不得不面对一个问题,那就是在多个服务器下,每次请求都会因为负载均衡而分配到不同的服务器上。用户在登录服务器后,下一次请求被分配到另一个服务器上,这时候session不同步,用户就无法继续使用原先的session。下面我就聊聊如何解决这个问题。

一、利用Mysql数据库共享Session数据的方式

使用一个mysql服务器做共享服务器,把所有的session的数据保存mysql服务器上,所有的web服务器都来这台mysql服务器来获取session数据。这里有一个关键的地方,用来存放session的数据表不要跟其他数据库表放在一起,要独立开来,专门放在一个低端的服务器上面。不然,数据库本身压力就很大了,再加上session是需要频繁的读取的,这使得数据库很容易达到瓶颈,从而导致过高的响应延迟。

二、利用cookie共享Session数据

当用户请求后产生的session,我们把他的sessionId和值都存在cookie里面。这样,当你访问a服务器后,产生了session放在客户端的cookie里面,你在访问被分配到b服务器上。这时候,b服务器先判断本身服务器上有没有这个用户的session,如果没有,在去看看客户端的cookie里面有没有这个session,如果有,就获取客户端的这个cookie里面的session。这样就实现了session的同步。

三、使用内存来共享Session数据

这里建议可以选择采用开源的缓存系统来完成session的共享,比如memcache等。原理跟mysql一样,不管哪个服务器产生的session都放在一个"内存池"里面。要获取session数据的时候都统一到这里获取。我建议用这个方法。

//使用当前sessionId 标识作为key用来缓存当前用户的userId,openId,// 防止用户在使用过程中切换网络导致服务器切换跳404页面String redisCurrentUserIdAndOpenIdKey = RedisUtil.getRedisCurrentUserIdAndOpenIdKey(request.getSession().getId());Map<String,String> currentUserIdAndOpenIdMap = new HashMap<String,String>();currentUserIdAndOpenIdMap.put(WebappCommonConstant.OPEN_ID, openId);currentUserIdAndOpenIdMap.put(WebappCommonConstant.USER_ID, String.valueOf(userId));redisBiz.insertMapToRedis(redisCurrentUserIdAndOpenIdKey,currentUserIdAndOpenIdMap,WebappCommonConstant.FREE_LOGIN_TIME);

转载于:https://my.oschina.net/wuweixiang/blog/1557001

web服务器集群(多台web服务器)后session如何同步和共享相关推荐

  1. linux服务器集群管理面板,AppNode-Linux 服务器集群管理面板安装教程

    有关 Linux 面板我们已经说过几个了,如果你手里有很多 Linux 服务器怎么去管理呢,目前这几款中文面板都不具备集中管理功能.今天介绍一款定位于服务器运维管理的AppNode,一款Linux 服 ...

  2. kafka服务器死机消息,当kafka集群其中一台宕机后,会怎么样?

    一.介绍 我们搭建好kafka集群后,对其进行性能测试.遇到这种场景:我搭建好了三台kakfa集群,然后停掉其中一台kafka,然后集群是否能正常工作呢? kafka集群: 192.168.183.5 ...

  3. 集群搭建在一台计算机上,服务器集群

    服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器.集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整 ...

  4. 构建服务器集群感知的 Java 应用程序

    Mukul Gupta, 高级技术架构师, DGI Paresh Paladiya, 高级技术架构师, CGI 简介: 服务器集群对于高度可扩展的 Java 企业级应用程序开发已司空见惯,但是应用程序 ...

  5. 【整理学习Hadoop】Hadoop学习基础之一:服务器集群技术

            服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器.集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任 ...

  6. 什么是服务器集群?海外服务器集群的优势?

    什么是服务器集群? 服务器集群是一种服务器基础架构,它使用多个物理服务器(一般指的是有2台或者2台以上的服务器同时工作),为用户提供各种服务和应用程序的访问.使用集群服务器的主要优点是它可以提供比单服 ...

  7. 什么是服务器集群技术,有哪些优缺点?

    对于服务器朋友们了解多少呢?而服务器集群技术又是什么服务器?朋友们都了解吗?今天这篇文章华纳云小编就给大家介绍一下 什么叫服务器集群技术? 就是抱团取暖,服务器集群技术是将若干台服务器集中起来进行某一 ...

  8. 为什么要实现服务器集群

    服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器,集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整 ...

  9. 搭建服务器集群的方法介绍

    搭建服务器集群的方法介绍 搭建本地服务器集群 软硬件要求 安装服务器 网络配置 搭建本地服务器集群 软硬件要求 一台电脑(系统不限,配置高一点更好) VirtualBox Centos7 Virtua ...

最新文章

  1. LeetCode 3 无重复字符的最长子串
  2. 代码注入之远程线程篇
  3. 通过idea将maven工程转为web项目
  4. Redis基础知识点总结
  5. 本文把 TCP/IP 讲绝了
  6. yuki翻译器钩子_git hooks钩子
  7. NFS方式挂载rootfs的设置方法
  8. python 读取地震道头数据_【Python】OGR库(1):读取矢量数据
  9. VB怎样屏蔽 Alt+F4键
  10. Android 升级到Android Studio2.2 后打不开以前版本的项目
  11. python爬虫问题:error: command 'gcc' failed with exit status 1
  12. Isight 软件集成AVLCruise软件方法探讨
  13. 论文重复率太高咋办?Python来帮你解决
  14. 《计算机网络(第7版)》-谢希仁
  15. ROS二维码识别以及OKR使用
  16. 通过 BT 种子 info_hash 值下载种子又一法
  17. MATLAB--数字图像处理 图像平移
  18. win11怎么开启休眠睡眠?
  19. python学了没有用_如何用Python进行无监督学习
  20. ThinkPHP5部署项目问题1

热门文章

  1. java 基本类型共享_Java基础数据类型
  2. SetInterval(循环计时器)
  3. 7-3 欢迎参加贵工程2021年C语言程序设计大赛! (5 分)
  4. 利用维纳滤波编码实现给定的运动模糊图像恢复
  5. 奇怪的象棋游戏及升级版
  6. /usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory 报错解决
  7. c3074 无法使用带圆括号的_地埋警示带预防挖掘 石油管道警示带保护管道安全...
  8. sftp 设置仅能访问自己目录的用户
  9. mongodb----副本集搭建及故障自动切换
  10. 闭包造成的内存泄露怎么解决?