知识卡片
Hash类负载均衡:用源地址Hash与ID Hash实现会话保持
内容
Hash类负载均衡对任务里的某些关键信息做哈希运算,把哈希值相同的请求固定分配到同一台服务器,这么做的核心目的不是分摊压力或追求性能,而是满足”同一个用户/会话必须始终落在同一台服务器”这类特定业务需求。源地址Hash是把来自同一个源IP地址的请求固定分配给同一台服务器,适合存在事务或会话状态的业务——比如用户通过浏览器登录网上银行时会生成一个临时会话信息,这个会话关闭浏览器就失效,后端没必要把它持久化到统一存储,只需要在某台服务器上临时保存即可,但前提是要保证这个用户在会话存续期间每次请求都能路由到同一台服务器,源地址Hash正好能满足这个约束。ID Hash则是把某个ID标识的业务固定分配到同一台服务器,这个ID通常是临时性数据的ID(比如session id)——同样以网上银行登录为例,用session id做Hash同样能达到”同一会话期间用户始终访问同一台服务器”的效果,和源地址Hash的目的一致,只是选取的Hash依据从”来源IP”换成了”业务自身生成的会话标识”,在用户IP可能变化(比如移动网络切换基站导致出口IP变化)但会话ID不变的场景下更可靠。
参考来源
- 位置:《从零开始学架构》第21讲《高性能负载均衡:算法》"Hash类"(源文件:_epub-src/OEBPS/text00002.html)
- 结论依据:原文说明源地址Hash"将来源于同一个源 IP 地址的任务分配给同一个服务器进行处理,适合于存在事务、会话的业务……需要保证用户在会话存在期间,每次都能访问到同一个服务器",ID Hash"将某个 ID 标识的业务分配到同一个服务器中进行处理,这里的 ID 一般是临时性数据的 ID(如 session id)",直接支撑本卡片结论。
- 原始内容:源地址 Hash:将来源于同一个源 IP 地址的任务分配给同一个服务器进行处理,适合于存在事务、会话的业务……ID Hash:将某个 ID 标识的业务分配到同一个服务器中进行处理,这里的 ID 一般是临时性数据的 ID(如 session id)。