关于扩展Tomcat的Session存取机制的思考

红薯 发布于 2008/10/05 17:18
阅读 2K+
收藏 11

在开发大规模网站程序时,一般会让开发人员尽量采用Cookie而非Session来存 储一些状态相关的数据,例如用户登录信息等等。原因是不推荐做Session复制,而多个应用服务器之间为了共享Session所采取的做法无非就是采用 多播技术的Session复制,另外一种则是将Session持久化到数据库。

第二种做法性能很差,第一种做法在应用服务器节点非常多的时候复制的代价很高。

为此这段时间我考虑能不能将缓存系统引入来作为应用服务器的Session存储呢?

由于涉及的应用服务器核心系统,我这个思路主要是针对Tomcat的。我想通过引入memcached来做为Tomcat存放Session的系统,这样 任意多个Tomcat节点都可以直接存取memcached上存放的Session,可以达到共享Session数据的目的,同时因为是基于内存的缓存系 统,因此性能上也有了保障。

接下来就是研究Tomcat的源码,找出Tomcat在处理Session这块功能对应的代码,到目前已经发现该如何来实现这个设想了,只需要扩展 Tomcat的 org.apache.catalina.session.ManagerBase 即可。

详细的代码日后有时间再来实现,我想如果你不想放弃Session,这无疑是一种最佳的解决办法,比起Session复制和Session持久化而言。而 且这是一种对应用完全透明的解决方案。

其他应用服务器我不感兴趣,暂且不理!

加载中
0
疯狂的艺术家
疯狂的艺术家

关于集群session复制的问题,这下思路清晰啦。

感谢!

0
曹江华Arden
曹江华Arden

https://github.com/xetorthio/redis-store

这里有一个基于redis的tomcat的session处理方案~

0
曹江华Arden
曹江华Arden

https://github.com/magro/memcached-session-manager

这里有一个基于memcached的处理方案~

0
z
zhouhenry
还有一种办法,就是本机也有session缓存。然后写session的时候;异步往 memcached或 redis中写数据。获取的时候,如果本地没有拿到,就到缓存服务器上取。这样做到性能和功能兼顾
返回顶部
顶部