分布式系统遇到的问题
1.分布式Session:
1.Session粘滞:
即粘性Session,当用户访问集群中某台机器后,强制指定后续所有请求都落到此台机器上。
使用场景:机器数适中,对稳定性要求不是非常苛刻。
优点:实现简单,配置方便,没有额外网络开销。
缺点:网络中有机器Down掉时,用户Session会丢失,容易造成单点故障。
方案:Nginx的ip_hash负载均衡方案
2.Session复制
将一台机器上的Session数据广播复制到集群中其余机器上。
使用场景:机器较少,网络流量较小
优点:实现简单,配置较少,当网络中有机器Down掉时不影响用户访问。
缺点:广播复制到其余机器有一定延迟,带来一定网络开销
方案:开源方案Tomcat-Redis-Session-manager,暂不支持Tomcat8
3.缓存集中式管理
将Session存入分布式缓存集群中的某台机器上,当用户访问不同节点时,先从缓存中拿Session信息
使用场景:集群中机器数较多,网络环境复杂
优点:可靠性好
缺点:实现复杂,稳定性依赖于缓存的稳定性,Session信息方入缓存时要有合理的策略写入
方案:开源方案Spring-Session,也可以自己实现,主要重写HttpServletRequestWrapper中的getSession方法。
4.分布式配置中心
在分布式系统中,一次构建,发布,上线是非常重要的一个过程,它不像单机时代那样重启一台机器,一个进程就可以了,在分布式系统中,它涉及到将软件包(例如war包)分发到可能几百台机器上,然后将几百台机器上的应用一一重启,这么一个过程需要很长的时间。那么如何在不停集群的情况下