关于 V4 资源单元的一道题,选项 B 是不是有歧义?

刚刷到每日一问里 V4 资源单元的题目,正确选项 B 和 D,但我觉得 B 的表述有问题,想确认一下我的理解是不是对的。

题目是这样的:
A. OBServer 资源不足时,可跨机器合并资源组成一个 unit
B. 一台 OBServer 上,同一个租户最多分配 1 个资源单元
C. 同一个租户,所有 Zone 内 unit 规格必须完全一致
D. 同一个租户,所有 Zone 内 unit 数量必须完全一致

官方给的答案 B、D。D 我没问题,默认同构 Zone 模式下各 Zone 的 Unit 数量确实必须一致。A 错在 Unit 不能跨机器合并,这个也清楚。

但 B 说“一台 OBServer 上,同一个租户最多分配 1 个资源单元”,我觉得这个表述不太严谨。在 V4 里,一个租户在各 Zone 都有 Unit,如果 Zone 和 OBServer 是一对一的(比如常见的 3 副本 3 节点部署),那每台 OBServer 上确实只有 1 个该租户的 Unit。但如果一个 Zone 里有多个 OBServer,或者 Unit 数量大于 OBServer 数量呢?同一个租户在同一台 OBServer 上是不是可能分配多个 Unit?

我理解 B 想说的应该是“同一个租户的同一个 UNIT_GROUP 内,每台 OBServer 最多一个 Unit”之类的意思?还是说 V4 里确实有“同一租户同一 OBServer 最多 1 个 Unit”的硬性限制?

有没有翻过 V4 源码或者做过多 Unit 部署的朋友,确认一下这个限制到底是怎么规定的?先谢过。

B 选项“一台 OBServer 上,同一个租户最多分配 1 个资源单元”的描述是正确的。这是租户级别放置 unit 的限制,不需要增加“同一个 UNIT_GROUP 内”的限定。

这里以 OceanBase v4.4.2_CE_BP3 源码为例,Unit 迁移目标校验明确给出:"
hold two units of a tenant in the same server is not supported"

对应的源码

系统按 tenant_id 收集该租户在目标 zone 内已有 unit 所在的 observer,将这些节点加入 excluded_servers,在 unit 分配和迁移时不再选择这些节点。该排除逻辑以 tenant_id 为粒度,并不按 unit_group_id 区分。当所有候选 observer 都已被排除时,系统返回 OB_ZONE_SERVER_NOT_ENOUGH, 而不是把多个 unit 放到同一台 observer。