Tomcat集群Session共享解决方案Memcached - 我的博客 - ITeye技术网站



Tomcat集群Session共享解决方案Memcached - 我的博客 - ITeye技术网站

Tomcat集群为什么需要Session共享

当客户端访问Tomcat集群时,所有的请求将被Nginx拦截,由Nginx做负载均衡后转发给后台真实Tomcat。按照这个流程就可能出现一个问题,当用户进行页面刷新或跳转时,每次请求将被转发给不同的Tomcat处理,这样就会造成Session的不同步。举个简单的栗子,例如当用户往购物车添加商品时,兴高采烈地准备买单了,当他跳转到付款页面却发现购物车被清空了,这就是Session丢失的典型栗子。因此,我们需要为集群环境做Session同步。

Session共享方案讨论

在服务器集群的环境下,共享Session的方案主要分为4类:
1.用户端本地保存Cookie
在这种方式下,Web应用会将用户状态写到Cookie并保存到用户本地。但是,如果用户使用的浏览器不支持Cookie或者禁用Cookie,该方案将会失效。并且Cookie能保存的数据是有大小限制的,而且数据暴露给用户本地浏览器,存在安全性问题。


2.采用数据库方式保存Session
相对本地Cookie方式,将用户信息保存到服务端数据库解决了数据安全性问题。然而,这么做是有代价的,应用中所有对Session的访问都必须经过数据库,加大数据库负担,导致系统整体性能降低。


3.代理服务器
通过代理服务器实现Session共享的思路非常简单,就是Session数据在哪台Tomcat,之后的请求都转发到这台Tomcat。例如Nginx,具体实现只需要修改转发规则为ip_hash即可。但这时候可能存在某一时间段大量用户始终访问某台Tomcat的负载很大,也就失去了负载均衡的意义。


4.搭建缓存服务器
这种方案也是应用最普遍的方案,通过搭建缓存服务器,并使用第三方工具接管Tomcat对Session的管理。
本文例子采用方案4进行Session管理,使用的缓存服务器是Memcached,并使用memcached-session-manager管理Session。memcached-session-manager(以下简称msm)的使用方法很简单,只需要根据Tomcat版本和序列化方式下载相应jar包,拷贝至Tomcat的lib目录下,最后修改Tomcat配置文件,更换Session管理模块即可


Read full article from Tomcat集群Session共享解决方案Memcached - 我的博客 - ITeye技术网站


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts