我正在开发一项服务(用Go编写),预计将收到大量请求。根据体系结构,服务的每个Pod应该服务于特定的客户端。可以说,如果此服务有3个窗格,则拆分将类似于-> A-H
,I-P
,Q-Z
,其中每个字母都是客户名称的第一个字母。
但是,如果此服务有4个容器,则拆分可以是-> A-F
,G-N
,O-U
,V-Z
。
有没有一种方法可以在Go代码中知道还有多少其他副本?
PS:AFAIK,一种可能性是在environment variable
中有一个deployment.yaml
。但是有些方法可以在不更改yaml
的情况下进行缩放。
答案 0 :(得分:0)
按照标题,解决方案是使用StatefulSet
,其中每个服务都可以相互识别,并且可以按照处理这种情况的方式编写应用。
但是,对于这个问题,根据上面提到的详细信息,一个不使用StatefulSet
的好的解决方案是使用Service
创建一个sessionAffinity: ClientIP
。根据详细信息的要求,后续请求必须转到服务于先前请求的特定容器。可以使用sessionAffinity
字段进行配置。 Check documentation for it here这样,当新客户端连接时,service
将在进行负载平衡后选择一个pod
。发布该消息,所有后续请求将仅转到该pod
。可以使用SessionAffinityConfig
进行进一步配置。