【发布时间】:2019-10-10 07:46:17
【问题描述】:
我正在开发一项服务(用 Go 编写),预计会收到大量请求。根据架构,服务的每个 pod 都应该服务于特定的客户端。比方说,如果这个服务有 3 个 pod,则拆分为 -> A-H、I-P、Q-Z,其中每个字母是客户端名称的第一个字母。
但是如果这个服务有 4 个 pod,那么 split 可以是 -> A-F, G-N, O-U, V-Z.
有没有一种方法可以让我在 Go 代码中知道还有多少其他副本?
PS:AFAIK,一种可能性是在deployment.yaml 中有一个environment variable。但是有一些方法可以在不更改 yaml 的情况下进行缩放。
【问题讨论】:
-
你可能想要
StatefulSet -
我认为该架构存在缺陷。特别是当您期望有大量请求时,我会避免在负载平衡中添加额外的逻辑,并允许所有实例处理任何请求,然后添加经过测试的自动缩放。让 Kubernetes 和您的应用程序在设置中完成各自的工作(Kubernetes 的扩展和负载平衡,为您的应用程序提供请求),不要试图重新发明彼此的内置功能。
-
再次:您的架构存在缺陷。如果你想区分客户,这应该通过名称间距来完成。写一个舵图,建立一个新客户变得轻而易举。 @Flimzy 我只能部分同意无状态 pod。即使是大规模的,也很有可能拥有有状态的 Pod。您只需要很好地了解您的数据库。运行 Postgres 或 - 上帝保佑! - k8s 上的 ES?没那么多。 MongoDB、蟑螂、涌入?完全没有问题。
-
过早的优化是万恶之源。编写一个适用于未来 6 个月的应用程序。然后当你需要扩大规模时,再担心。
-
@MarkusWMahlberg:我知道这是可能的(我自己使用它们)。但它不适合 k8s 新手。这就是为什么我小心翼翼地不主张硬性规定的原因。 :)
标签: go kubernetes kubernetes-pod