go - 一个 pod 如何知道它的副本数
问题描述
我正在开发一项服务(用 Go 编写),预计会收到大量请求。根据架构,服务的每个 pod 都应该服务于特定的客户端。假设,如果该服务有 3 个 pod,则拆分将类似于 -> A-H
, I-P
, Q-Z
,其中每个字母是客户端名称的第一个字母。
但是如果这个服务有 4 个 pod,那么 split 可以是 -> A-F
, G-N
, O-U
, V-Z
。
有没有办法我可以在 Go 代码中知道还有多少其他副本?
PS:AFAIK,一种可能性是environment variable
在deployment.yaml
. 但是有一些方法可以在不改变yaml
.
解决方案
根据标题,解决方案是使用StatefulSet
每个服务相互了解的地方,并且可以以它们处理这种情况的方式编写应用程序。
但是,对于这个问题,根据提到的细节,一个不使用的好解决方案StatefulSet
是创建一个Service
带有sessionAffinity: ClientIP
. 根据详细信息的要求是后续请求必须转到为先前请求提供服务的特定 pod。这可以使用sessionAffinity
字段进行配置。在这里检查它的文档有了这个,当一个新的客户端连接时,将在做负载平衡后service
选择一个。pod
发布后,所有后续请求将pod
仅发送到该请求。这可以使用SessionAffinityConfig
.
推荐阅读
- python - 如何使用 python 脚本(包括代码)执行这个德鲁伊查询?
- python - 多处理管理器不适用于 Jupyter Notebook 中的 spawn 或 forkserver 启动方法
- java - Intellij 监视面板在调试期间显示错误的变量数据类型
- php - 通过代理 Laravel 发送电子邮件
- python - Raspberry Pi 4 卡在 serial.Serial()
- json - Azure 函数 JSON 限制“TypeError:无法读取属性 'length' of null”
- python - tf.data.TextLineDataset 和 tf.data.experimental.make_csv_dataset 的区别
- python - certbot -v 时没有名为“pkg_resources”的模块
- php - Laravel:如何创建下拉列表以从其他表中选择 FOREIGN KEY?
- asp.net-core - .Net core Api 作为 Windows 服务运行,在其套接字上获得禁止访问