Skip to content

[上游跟踪 #6510] 统一渠道权重语义(缓存原值 / DB +10) #34

Description

@faithleysath

上游来源

问题摘要

官方当前存在两套渠道权重语义:

  • Redis / 内存缓存路径直接按原始 weight 比例选择。
  • 非缓存数据库路径按 weight + 10 比例选择。

官方 FAQ 明确承诺同优先级渠道按填写的权重比例分配,例如 2:1 应得到 2:1。隐藏的 +10 会使 2:1 变成 12:11,并使部分显式权重为 0 的渠道继续获得流量。

本 fork 的目标语义应为:

sum(weight) > 0:按 weight / sum(weight) 分配
所有 weight == 0:候选渠道等量随机
部分为 0、部分 > 0:weight == 0 的渠道不接收新流量

当前本地边界

  • 当前生产配置 Redis,因此实际走原始权重的内存缓存路径。
  • 现有部分渠道权重曾按旧 weight + 10 语义设计,当前可见配置与原目标比例不完全一致。
  • 用户已明确要求:本跟踪阶段暂不修改任何生产渠道权重、Redis、亲和、优先级、分组或售价配置。
  • 生产权重迁移属于后续独立变更,必须重新回读渠道状态、保存脱敏快照、明确变更表并获得单独授权。

建议实现

  • 将 DB 路径改为与缓存路径一致的原始权重语义。
  • 抽取两条路径共用的加权选择 helper,避免再次漂移。
  • 明确并测试全零与部分零权重行为。
  • 如上游先修复,优先跟随上游实现;如长期未处理,再在本 fork 独立修复并向上游提交 PR。
  • UI tooltip 或文档补充权重 0 的行为,但不引入隐藏偏移量。

验收条件

  • 上游 issue 完成 triage,并在此同步结论、关联 PR 或关闭原因
  • 缓存和非缓存路径对相同候选集使用完全相同的有效权重
  • 2:1 配置在两条路径下都保持 2:1
  • 全零权重在两条路径下都等量随机
  • 1:0 配置在两条路径下都不把新流量分给权重 0 渠道
  • 单元测试不依赖大样本随机统计,优先验证确定性的有效权重/区间构造
  • 引入上游修复或本地修复后通过相关 Go 测试
  • 生产权重调整另开变更步骤并单独授权;本 issue 关闭前不默认执行生产配置迁移

跟踪策略

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingupstream candidateWatch upstream; take via upstream if merged, otherwise consider integrating independently.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions