我有在多个区域运行的微服务(Kubernetes Pod)。我有一个受监控的集合。 (所有区域将监控同一个集合;每个区域有多个 Pod)
我希望每个区域的部署单元独立处理每个文档(已更新)。以下是我计划如何完成这项工作:
- 每个区域的部署单元将使用不同的处理器名称(例如 CFP-US、CFP-Europe、CFP-Australia)
- 在一个区域中运行的所有 Pod 都将使用该区域的处理器名称、相同的租赁容器和不同的实例名称(例如 Pod 的唯一 ID)。 (实际上,所有区域的租赁容器都是相同的)。
问题:
- 上述设置是否达到了我想要的效果(即每个区域独立处理更新的每个文档?)
- 我的收藏只有一个物理分区。我的理解是,在这种情况下,一个区域中的所有 pod/实例都只存在一个租约(因为租约是针对物理分区的);每个区域都有自己的租约(因为每个区域的处理器名称都不同)。我的理解正确吗?
- 假设我在一个区域中有 3 个 Pod/实例。由于仅存在租约,因此一次只有 pod 接收 CFP 更新,而其他 2 个 pod 则处于空闲状态。如何配置租约/间隔,以便所有 3 个 Pod(几乎)平等地获得更新?即 pod-A 获取更新(并且 pod-B、pod-C 闲置),然后一段时间后,pod-B 获取更新(并且 pod-A、pod-C 闲置);然后 pod-C 获取更新(而 pod-B、pod-A 闲置);等等。
- 医生说:
the number of instances should not be greater than the number of leases.
除了某些 Pod 可能处于闲置状态之外,实例数量多于租用数量是否会导致任何其他问题? (特别是租赁状态下的问题,或获取/续签租赁等方面的问题)
最佳答案
- 是的。只要它们是不同的部署单元 ( https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/change-feed-processor?tabs=dotnet#deployment-unit ),无论它们的物理位置如何,每个部署单元都会收到更改。
- 正确。每个部署单元都会创建自己独立的一组租约。
- 你不能。每台机器的租约分配是设计使然,没有配置强制它。
- 这是理想的场景,原因是所有机器(使用 LeaseAcquireInterval)都会频繁检查它们是否可以获得新的租约。如果当前拥有它的机器释放它(例如,由于未处理的错误),则租约可以跳转到任何其他机器。根据您的遥测数据,这可能是不可取的。
关于azure - 更改 Feed 处理器 : multi-region deployment units,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74218233/