跨多个 pods 处理服务器发送的事件
Handling server sent events across multiple pods
我正在开发一个基于 NodeJS 的服务器,该服务器公开 /events
端点,通过 sse 将事件发送到客户端。除了这个端点,我还有多个用于 POST 请求处理的路由。
我正在尝试弄清楚如何以适用于多个 pods 的方式设置所有这些。现在我有负载平衡器设置来保持用户和 pod 之间的连接,直到客户端断开连接,但是当客户端发出 post 请求时,这些可以路由到不同的 pods.
我需要确保每个 pod 都可以发出一条带有用户 ID 的消息,并且该事件被与用户打开连接并发送到客户端的正确 pod 捕获。
我已经为此考虑过 redis,但我想知道 NodeJS 或 Kubernetes 是否公开了一些不需要它的东西。
您应该可以使用服务或通过负载均衡器来完成。
通过服务,您可以使用会话亲和力:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
sessionAffinity: ClientIP
使用负载均衡器粘性会话:
https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/
我正在开发一个基于 NodeJS 的服务器,该服务器公开 /events
端点,通过 sse 将事件发送到客户端。除了这个端点,我还有多个用于 POST 请求处理的路由。
我正在尝试弄清楚如何以适用于多个 pods 的方式设置所有这些。现在我有负载平衡器设置来保持用户和 pod 之间的连接,直到客户端断开连接,但是当客户端发出 post 请求时,这些可以路由到不同的 pods.
我需要确保每个 pod 都可以发出一条带有用户 ID 的消息,并且该事件被与用户打开连接并发送到客户端的正确 pod 捕获。
我已经为此考虑过 redis,但我想知道 NodeJS 或 Kubernetes 是否公开了一些不需要它的东西。
您应该可以使用服务或通过负载均衡器来完成。
通过服务,您可以使用会话亲和力:
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
sessionAffinity: ClientIP
使用负载均衡器粘性会话:
https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/