k8s-负载均衡的会话亲和性探究
1,背景概述
我们平时在做一些高频查询时都会用到缓存用于加快查询速度,当前主要有服务自身本地缓存、集中式网络缓存等。
缓存 | 服务自身的本地缓存 | 网络缓存 | 数据库 |
---|---|---|---|
响应速度 | 极快(无需网络交互) | 快(需要网络交互) | 较慢(需要网络交互) |
数据一致性 | 不同节点更新不一致 | 优 | 最优 |
数据重复性 | 不同节点都会有重复数据 | 统一的数据(主从除外) | 统一的数据(主从除外) |
我们使用缓存的核心目的就是解决高频查询的速度问题,所以我们如果在多节点服务背景下使用本地缓存,同时又将本地缓存的缺点解决就十分完美了!
2,解决思路
外部的同一个会话访问,只会同步负载到相同的一个节点上,只需要这个节点存储这个会话的本地缓存数据,并且进行数据同步即可。
在负载均衡中是属于哈希一致性负载。
3,方案
3.1,nginx-ingress
nginx.ingress.kubernetes.io/affinity: cookie
# 实现会话亲和的方式,目前只支持cookie
nginx.ingress.kubernetes.io/affinity-mode: persistent
# 默认是balanced平衡的,伸缩应用时会重新分配一些session, 以确保每个pod处理的会话数均衡;persistent持续的, 保持最大限度的会话亲和
nginx.ingress.kubernetes.io/session-cookie-hash: sha1 #
nginx.ingress.kubernetes.io/session-cookie-name: awesome-java
# 自定义cookie名字, 默认为INGRESSCOOKIE
参考链接:
探究未知是最大乐趣