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也就都没了,新请求被分到别的机器,还得重头来。
    会话共享方案还算靠谱。

  • 相关阅读:
    HDU 1058 Humble Numbers
    HDU 1160 FatMouse's Speed
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1003 Max Sum
    HDU 1297 Children’s Queue
    UVA1584环状序列 Circular Sequence
    UVA442 矩阵链乘 Matrix Chain Multiplication
    DjangoModels修改后出现You are trying to add a non-nullable field 'download' to book without a default; we can't do that (the database needs something to populate existing rows). Please select a fix:
    opencv做的简单播放器
    c++文件流输入输出
  • 原文地址:https://www.cnblogs.com/leonbond/p/10343878.html
Copyright © 2011-2022 走看看