I am working on a service (written in Go), which is expected to receive a huge number of requests. As per the architecture, each pod of the service is supposed to serve specific clients. Lets say, if there are 3 pods of this service, the split will be like -> A-H, I-P, Q-Z, where each letter is client's name's first letter.
But if there are 4 pods of this service, then split can be -> A-F, G-N, O-U, V-Z.
Is there a way I can know in Go code how many other replicas are there?
PS: AFAIK, one possibility is to have an environment variable in deployment.yaml. But there are ways where scaling can be done without changing the yaml.
As per the title, the solution is to use StatefulSet where each service is aware of each other and apps can be written in a way that they handle this scenario.
However, for this question, as per the details mentioned, one good solution without using StatefulSet is to create a Service with a sessionAffinity: ClientIP. The requirement as per the details is that subsequent requests must go to a specific pod which served the previous request. This can be configured using sessionAffinity field. Check documentation for it here With this, when a new client connects, service will select a pod after doing load-balancing. Post that, all subsequent requests will go to that pod only. This can be configured further using SessionAffinityConfig.