在分布式下,考虑到session共享问题,第一想法,想到了缓存存储,使用redis缓存
所以,在这里,我就多想了一下。
缓存,到底什么样的数据可以缓存,或者什么样的数据需要缓存、
所以,做了一点简单的总结:
- 不需要实时更新,但是却特别占用数据库资源的数据,比如商城网站上的商品信息,基本是不用一天一更的
- 需要实时更新,但是更新频率不高的数据,最好的例子就是订单表
- 在某个时刻访问量极大而且更新也很频繁的数据。很典型的例子就是秒杀,在秒杀那一刻,可能有N倍于平时的流量进来,系统压力会很大
ps:例如像敏感性的数据,安全性的数据就尽量不用缓存了,比如用户登录的那个数据,里面会涉及到密码和安全问题之类的
================================分割线==============================
上面是小菜,现在进入正题:
做分布式session共享的时候,我的第一个思路:
直接上图说话
browser1 到负载均衡服务器 转发到 第一个application
browser2 到负载均衡服务器 转发到 第二个application
举例例子就是,每次去网吧打游戏,都需要使用自己的设备才爽!!,那么,我就在固定的网吧专门放一套我的设备,这样的话,我就不用自己带了。这样保证了我每一次去网吧都有我的设备,就在第一个application上
然而,这个思路有个问题:
如果第一个application重启了的话,那么上面存储的session就消失了
所以,我又有了第二个思路:让两个application之间可以复制,即将第一个application上的session复制一份到第二个application上
但是,还有一个问题:
两个服务器(application)之间经常copy session,容易影响带宽
而且,有大量数据的时候,占用资源太多了,不适合做大规模的集群
ps:其实,我经历的这个项目,这条思路已经可以满足我了,无非就是可能带宽不够,容易卡!!但是,人是贪婪的动物,我不断的浏览各个贴吧,请问大神,终于,让我又找到了解决的办法、
第三个思路:基于cookie,继续举例子,网吧打游戏,这回,我自己带设备,我也不去你们网吧存我的设备了,即让session携带上cookie,
但是还有问题:cookie长度限制,保存在浏览器,安全性不高
第四个思路:
将session信息单独存在放一个服务器上(session server),这样,当每次获取的时候,之间从服务器上拿就ok了,
举个例子:还是去网吧,然后,每一个网吧都有一个仓库,我们去网吧仓库里拿自己需要的设备就ok了
问题:需要解决单点问题,所以需要制成集群!!