转载地址:http://hi.baidu.com/zzeric/blog/item/067263fa4362541fa9d31157.html
1. Memcached + Tomcat自定义SessionManager方案,采用分布式缓存+本地缓存的方式,在非Sticky Session模式下,可能会出现本地缓存不一致的情况。
如:
假定用Apache进行非StickySession的负载均衡,用户甲访问服务,第一次请求被分派到Tomcat_Instance_A,并执行session.setAttribute("UPDATE_TIME"),SessionManager负责把这个属性更新到Memcached服务器,并做本地缓存;第二次访问时,请求被分派到Tomcat_Instance_B,并执行session.getAttribute("UPDATE_TIME"),刚开始Tomcat_Instance_B的本地缓存是没有UPDATE_TIME这个属性的,所以会去Memcached服务器取,取到后放到本地缓存。这是没问题的。但在A和B上的本地缓存都有了UPDATE_TIME这个属性的副本后,用户在A上更新UPDATE_TIME的话,A的本地缓存和Memcached服务器都会被更新,但B上的本地缓存则不会被更新,当用户请求再次分派给B时,得到的将是脏数据。
JavaEye上有人提出用OSCache做本地缓存,在本地缓存更新后,通过JGroups广播,更新或删除各服务器本地缓存里的UPDATE_TIME属性。但我觉得因为这样而引入OSCache不值得,JGroups广播与Memcached共存让Memcached的存在变得没有意义,倒不如直接走老路,用OSCache + JGroups的方案。
我觉得还是用StickySession + Memcached的方案解决这个问题是最划算的。Apache把同一用户的每个请求都分派到同一个Tomcat上,当原来的Tomcat宕机后,再分派到另外一个Tomcat上,此时再从Memcached取Session的值。虽然Robbin说Apache的StickySession是在应用层做的分派,不是很稳定,我对此保持怀疑,因为StickySession的实现机制并不复杂,Apache这都会处理得不好?如果在大访问压力的情况下,造成Apache的StickySession不稳定,可以在前端用四层交换机做负载均衡,也是支持StickySession的。
2. Terracotta 和 Memcached的比较
Terracotta的优势:
1)不是通过对象序列化的方式传输,支持Field级别的变更同步。即一个4K的对象里的一个字段变更了,Terracotta只需要同步4bytes的数据,而不需要同步4k数据,大大减少网络流量。
2)无缝整合到应用里,通过自动监控POJO的变更实现JVM的同步,不像Memcached或JGroups等方案需要在程序显式调用某些方法如setAttribute或updateCache时,更新分布缓存。
3)和Memcached一样使用集中的缓存服务器,不像JGroups需要广播带来网络压力。
4)TC本身支持集群,避免单点故障。而Memcached则默认不支持集群,但可以自己实现。
缺点:
1)bytecode级监视,应该是通过AOP的方式实现,服务器性能可能因此而降低。
2)配置烦琐,不像Memcached那么简单。
个人倾向于使用Memcached,首先Memcached使用C开发,在只是维护Cache这么简单的应用里,Memcached的稳健性更强,只要内存够大,出问题的几率不大,集群的需求不是很强烈。其次,Memcached方案会有更大的网络流量,但是服务器的运算压力会更小。最后,配置简单是最吸引我的。
分享到:
相关推荐
memcached 共享内存解决方案,memcached安装,使用
Memcached使用点滴总结分享
memcached 总结,大家有兴趣的可以看看
NULL 博文链接:https://aperise.iteye.com/blog/2296219
Memcached是一种集中式Cache,支持分布式横向扩展。这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端本身是单实例的...下面再总结几个它的特点来理解一下其优点和限制...
自己总结的memcached的网络部分,主要是TCP 套接字编程方面,有兴趣的可以看看。
Memcached vs Redis,总结的十分清晰和详细。
memcached是什么? memcached的特征 协议简单 基于libevent的事件处理 内置内存存储方式 memcached不互相通信的分布式 ...使用Cache::Memcached连接memcached 保存数据 获取数据 删除数据 增一和减一操作 总结
一份.NET中实现MEMCACHED的总结。
tomcat8+jkd1.8+memcached session manager共享session,资源总结来自https://download.csdn.net/download/wangluoyoudu/9968691,本人下载可用并用于总结jar包冲突兼容问题,细分解决自身问题的结果。
wiki上memcached文档的中文翻译。纯粹是看的时候顺便翻译下来的,很多是由google帮忙的,方便自己看的。各位看后觉得不好自行删除,觉得可用请收藏,不追究版权问题。 另外,这个是官方说教式的,很多东西讲个概念,...
该系统已经应用在舍得网上了,没有发现大问题,本人也相信该系统已经足够强大,应付数百万IP/天的应用都不是问题,我这么说肯定有人会对此表示怀疑,其实系统到底能撑多少IP/天不在于系统本身而是在于使用该系统的人...
主要介绍了PHP 扩展Memcached命令用法,结合实例形式总结分析了PHP 扩展Memcached命令基本使用方法与相关操作注意事项,需要的朋友可以参考下
使用Cache::Memcached连接memcached................................................................................9 保存数据................................................................................
主要介绍了phpcms中memcached、eaccelerator、shm缓存使用方法,需要的朋友可以参考下
主要介绍了Redis和Memcached的区别详解,本文从各方面总结了两个数据库的不同之处,需要的朋友可以参考下
dot net memcached 分布式缓存应用类库 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的