Session 在分布式系统中实现方式

##server独立Session

例如以下图所看到的:

server独立Session要求用户的每次请求都必须在同一台应用server上面操作,这就要求负载均衡server每次都能把用户的请求发送到同一个地址的server上面。

第一个用户第一次訪问的1号server。那个在用户的整个会话中都必须由负载均衡server导流到1号server上面。

其它server不会保存1号用户的Session信息。

如今的负载均衡server一般都有这个功能(nginx)

可是假设出现以下的情况

这个时候1号server宕机的情况下,负载均衡server会把1号用户导流到2号或者3号server上面,可是用户在2和3号server上面没有安全的上下文环境。server会通知用户又一次登录。这样用户体验肯定会受到影响。并且非常可能用造成用户的数据丢失。

每台server保留所有Session

每台server保留所实用户的Session这就关系到应用server之间的Session同步问题。实时性要求比較高。

这样的方式能够避免上面server独立Session所遇到的问题,例如以下图所看到的:

长处

这样的方式即使出现第一种情况那么2和3号server上面也保存的1号的Session信息,当出现故障负载均衡server把1号用户导流到2和3号server上面时。server也会发现有1号用户的安全上下文,能够继续訪问并且不须要又一次登录。

缺点

可是这样的方式也有缺点,那就是相应用server的Session同步实时性要求比較高,并且会带来额外的跨带开销。并且当Session之遥有变化时,就须要同步。假设Session里面的信息量比較大。那个会占用相当大的内存消耗。

server共享Session

server共享Session信息:

长处

每一个用户的Session信息都会被存储到应用之外的另外一台server(可能是数据库,也可能是KV存储服务),这样应用server就不用存储每一个用户的Session信息了,节约了非常大的内存开销。

当不同应用server须要用到Session信息的时候就去找共享Sessionserver来获取信息。

这样负载均衡server也就不用把用户固定的分配到一台server上面了,并且也不用server之间来复制Session信息,当Session信息发生改变时,应用server都去共享server改动信息就可以。

缺点

比較依赖于共享server,一旦共享server或者共享server集群出现故障。用户会收到非常大影响

在Cookie中传递Session数据

在Cookie中存放用户信息倒是能排除一个不稳定的因素,可是Cookie在安全方面还是存在隐患。并且Cookie也有长度的限制。

在站点中用到最多的可能就是 应用独享Session 和 集中管理Session的方式。

当中集中管理Session中能够用memcached 做为sessionserver。效率也非常高。当然其它的NoSQL数据库也能够。

大家假设有什么好的建议能够一起学习。

时间: 2024-11-03 21:36:45

Session 在分布式系统中实现方式的相关文章

JSP中设置Session有效时间的三种方式

JSP中设置Session有效时间的三种方式 2010-08-03 10:02:49|  分类: Java Web|举报|字号 订阅 (1)在主页面或者公共页面中加入: HttpSession session=request.getSession(true); session.setMaxInactiveInterval(900);参数900单位是秒,即在没有活动15分钟后,session将失效.这里要注意这个session设置的时间是根据服务器来计算的,而不是客户端.所以如果是在调试程序,应该

【分布式】Zookeeper在大型分布式系统中的应用

一.前言 上一篇博文讲解了Zookeeper的典型应用场景,在大数据时代,各种分布式系统层出不穷,其中,有很多系统都直接或间接使用了Zookeeper,用来解决诸如配置管理.分布式通知/协调.集群管理和Master选举等一系列分布式问题. 二. Hadoop Hadoop的核心是HDFS(Hadoop Distributed File System)和MapReduce,分别提供了对海量数据的存储和计算能力,后来,Hadoop又引入了全新MapReduce框架YARN(Yet Another R

大型网站架构系列:缓存在分布式系统中的应用(三)

本文是<缓存在分布式系统中的应用>第三篇文章. 上次主要给大家分享了,缓存在分布式系统中的应用,主要从不同的场景,介绍了CDN,反向代理,分布式缓存,本地缓存的常规架构和基本原理. 因为时间关于,原计划分享<缓存常见问题>的内容,没有讲.本次主要针对缓存的常见个问题,做一个介绍.主要有以下议题: 一.分享大纲 分享大纲 数据一致性 缓存高可用 缓存雪崩 缓存穿透 参考资料 分享总结 二.数据一致性 缓存是在数据持久化之前的一个节点,主要是将热点数据放到离用户最近或访问速度更快的介质

分布式系统中的线程与进程

进程 虽然进程构成了分布式系统中的基本组成单元,但是操作系统提供的用于构建分布式系统的进程在粒度上还是太大了,而就粒度而言,将每个进程细分为若干控制线程的形式则更加合适. 为了程序执行的需要,操作系统创建多个虚拟处理器,每个虚拟处理器运行一个程序.为了保持对这些虚拟处理器的跟踪,操作系统中有一张进程表.其包含的条目中存储着CPU寄存器值.内存映像.打开的文件.统计信息.特权信息等. 操作系统特别注意确保独立的进程不会有意或无意地破坏其他独立进程运行的正确性.也就是说,多个进程并发地共享同一个CP

一致性哈希算法及其在分布式系统中的应用(转)

原文:http://blog.codinglabs.org/articles/consistent-hashing.html 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题:接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题. 分布式缓存问题 假设我们有一个网站,最近发现随着流量增加,服务器压力越来越

一致性哈希算法及其在分布式系统中的应用 作者 张洋

转 http://blog.codinglabs.org/articles/consistent-hashing.html 摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题:接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题. 分布式缓存问题 假设我们有一个网站,最近发现随着流量增加,服务器压力越

一致性哈希算法及其在分布式系统中的应用

摘要 本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用.首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题:接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题. 分布式缓存问题 假设我们有一个网站,最近发现随着流量增加,服务器压力越来越大,之前直接读写数据库的方式不太给力了,于是我们想引入Memcached作为缓存机制.现在我们一共有三台机器可以作为Me

高并发分布式系统中生成全局唯一Id汇总

高并发分布式系统中生成全局唯一Id汇总 (转自:http://www.cnblogs.com/baiwa/p/5318432.html) 数据在分片时,典型的是分库分表,就有一个全局ID生成的问题.单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求:   1 不能有单点故障.   2 以时间为序,或者ID里包含时间.这样一是可以少一个索引,二是冷热数据容易分离.   3 可以控制ShardingId.比如某一个用户的文章要放在同一个分片内,这样查询效率高,修改也容易.   

关于分布式Session 的几种实现方式

分布式Session的几种实现方式 1.基于数据库的Session共享 2.基于NFS共享文件系统 3.基于memcached 的session,如何保证 memcached 本身的高可用性? 4. 基于resin/tomcat web容器本身的session复制机制 5. 基于TT/Redis 或 jbosscache 进行 session 共享. 6. 基于cookie 进行session共享 介绍下常用的分布式Session 实现 1. Session Replication 方式管理 (