分布式session共享解决方案

        在一般的互联网服务中会采用如下图的服务部署架构。ngnix 作为反向代理和负载均衡服务器,将客户端的请求转发给一组服务节点,达到减轻后端服务压力的作用。但是在这样的部署架构中,必须解决分布式session共享问题,否则会出现,用户登录系统,然后进行某一操作,由于session没有在节点中共享,用户自动登出的问题。

分布式session共享解决方案_第1张图片
服务部署架构

        针对session分布式共享,现在有三种解决方案可供使用。

        一、粘性session

        利用nginx自身提供的轮询策略实现。即将nginx的负载均衡策略设置为ip_hash。

        ip_hash负载均衡策略是nginx将访问的客户端的 ip 地址进行hash计算后,将其分配到后端的某个服务节点。当客户端再次请求时,nginx会将请求转发给原来的服务节点。

        1、优点

        实现简单,对应用无侵入性,无额外开销。

        2、缺点

        一旦某个web服务器重启或宕机,相对应的session的数据将会丢失,且其对nginx负载均衡的能力进行了弱化。

         二、服务器session复制

        在支持session复制的web服务器上,通过配置,可以实现将session同步到其他web服务器上,达到每个web服务器上都保存一致的session的目的。

        1、优点

        对应用无侵入性,重启或宕机不会造成session的丢失。

        2、缺点

        需要依赖支持session复制的web服务器,在数据量很大的情况下不仅占用网络资源,而且会导致延迟。只适用于web服务器比较少且session数据量少的情况。

        3、实现步骤

        1、在应用的web.xml上加上

        2、在tomcat的server.xml配置文件上打开 cluster节点,修改为如下配置:

        

          

             

                    bind="127.0.0.1"    address="228.0.0.4"  port="45564"

                    frequency="500"

                    dropTime="3000"/>

           

                     

                    autoBind="100"

                    selectorTimeout="5000"

                    maxThreads="6"/>

            

                

            

            

            

        

       

       

       

                    deployDir="/tmp/war-deploy/"   watchDir="/tmp/war-listen/"   watchEnabled="false"/>

         

         

        3、重启tomcat服务即可。

三、session共享机制

        使用缓存技术,集中管理所有的session,所有的web服务器都从这个存储介质中存取对应的session,实现session共享。

        1、优点

        可靠性高,减少了web服务器的资源消耗,服务器重启或宕机不会造成session的丢失。

        2、缺点

        实现上有些复杂,配置较多,增加了一次从存储介质中获取session数据的开销。

        适用于web服务器较多,要求高可用的情况。

        3、实现步骤

        具体步骤可以参考文章:https://blog.csdn.net/hua1586981/article/details/78132710

你可能感兴趣的:(分布式session共享解决方案)