zoukankan      html  css  js  c++  java
  • 负载均衡中的session保持

    什么叫负载均衡中的session保持

    当我们需要做负载均衡时,服务端肯定有多台服务器,用户每次请求进来,会根据负载均衡算法被分配到某一台机器上,假设用户需要进行一段连续操作时,在第一台机器登陆后,下一个操作被安排到了另一台机器,如果没有做会话同步,那这台机器肯定没有他之前的一些操作信息,如登陆状态等,所以负载均衡下的session保持就变得不简单了。

    解决的方法

    ip_hash

    将来访者IP进行HASH后分配到对应的机器上,这样保证同一个IP会一直在一台机器上,这样session就不会因为换机器而断。

    缺点:

    • 多个客户端共用一个IP时,那被分配到的服务器就惨了。

    • 一个客户端并发太大时,对接收他请求的服务器也是压力。

    • 如果某台服务器挂了,那一堆分配到这台机器的请求就都跪了。

    存session

    把session存下来,这样每台服务器都能从公共存储中的session来获取客户端状态,保证会话的延续。

    存数据库

    占用数据库资源,高并发时,数据库瓶颈。

    存文件里

    高并发时硬盘I/O性能是瓶颈。

    存Memcached/Redis

    是挺快的,但因为是在内存里,宕机就没了,session太多时,老的session就会被删。

    利用cookie

    第一次请求时,分配完服务器后,负载均衡器给response写个cookie,把给它的机器记下来,下次来了还是那台服务器接客。
    cookie的插入和取出分析,都是在负载均衡器中进行的,客户端和服务器都不知道。

    会话复制

    就是把每个服务器节点都复制一份全量的session,没研究过,不过一听就感觉不太靠谱。

    总结

    把一个用户捆在某一台服务器上的做法可以叫做会话保持;每台机器都存一个相同发复制品,叫做会话复制;把会话放一个共同地方,所有服务器都从这取,叫会话共享。

    会话保持方案指定了机器,其实负载也就不均衡了,而且如果某台服务器宕机了,那这台机器的session也就都没了,新请求被分到别的机器,还得重头来。
    会话共享方案还算靠谱。

  • 相关阅读:
    单例/单体模式(Singleton)
    步步为营 .NET 设计模式学习笔记 六、Adapter(适配器模式)
    分享18个非常棒的 jQuery 表格插件
    线程池 vs 专有线程
    介绍27款经典的CSS框架
    一些系统开发及项目管理的资料
    SQL数据库中的XML应用
    SQLite之初体验
    AsyncBox 一款基于 jQuery 的弹窗组件
    弹出图片层
  • 原文地址:https://www.cnblogs.com/leonbond/p/10343878.html
Copyright © 2011-2022 走看看