GH GambleHub

Feature Flags和版本管理

Feature Flags和版本管理

1)如果有发行版,为什么要悬挂旗帜?

Feature Flags (fiche flags)允许解锁和启用功能:代码以稳定和提前的方式进入插件,业务启用由config/console管理-针对细分市场、流量百分比、市场、VIP/监管小组、设备等:
  • 发行速度和安全性:小插件+即时回滚。
  • 病变半径控制:渐进式滚动,环,SLO塞。
  • 实验和A/B:多战标记,效果统计。
  • 操作场景:用于风险支付/游戏路径的杀手开关。

关键原则:"ship dark,enable bright"-提前交付,有意识地打开。


2)国旗类型

Boolean:打开/关闭fichi,紧急停车标志(kill-switch)。
多重性:行为选择(算法A/B/C,限制,系数)。
Config/Remote Config:参数(时间戳、投注限制、奖金大小)。
Permission/Entitlement: 按角色/tiers访问功能/限制。
操作:流量路由(影子查询,启用新服务)。


3)体系结构和数据流

控制平面:控制台/标志服务器、规则/段存储、审核。
数据平面(SDK/Proxy/Edge):接收和悬挂标志、评估本地(潜伏率最低)规则、在不可用时后退。

传播方式:
  • Pull: SDK定期同步config (ETag/stream)。
  • 推送/流:服务器正在推送更新(Server-Sent Events/WebSocket)。
  • Edge Cache/Proxy:更接近用户,减少p99。
Prod Level要求:
  • 本地规则评估(热路径中没有网络跳跃)。
  • Taymauts和folbacks(没有"阻止"国旗阅读)。
  • 签名/翻新configs snapshot。

4)定向和细分

属性:国家/地区,语言,平台,KYC级别,VIP级别,风险等级,帐户年龄,付款方法,责任游戏限制。
片段:保留的版本规则;"软"(营销)和"硬"(合规性)。
优先级/冲突:明确规则顺序,禁止在没有测试的情况下进行"最后匹配"。
地理/监管:跨辖区产品可用性复选框;不可变谓词(例如,禁止特定国家/地区的奖金)。

规则示例(JSON):
json
{
"flag": "new_withdrawal_flow",
"default": false,
"rules": [
{"when": {"country": "CA", "kyc_level": "FULL"}, "rollout": 25},
{"when": {"segment": "vip_tier_3_plus"}, "rollout": 100},
{"when": {"country": "DE"}, "force": false}
],
"expiresAt": "2026-03-31T00:00:00Z"
}

5)渐进式滚动: 策略

金丝雀%:1% → 5% → 25% → 50% → 100%与SLO的自动停靠。
Rings:内部团队→ Beta用户→一个地区在全球范围内→。
按设备/客户端进行采样:计入稳定性(哈希ID)。
影子交通:将请求复制到新路径而不会影响用户。
黑暗启动:包括但不明显(收集指标,加热缓存)。

SLO停止条件(示例):
  • 在10分钟内恶化p95潜伏期API "withdraw">+15%。
  • 错误5xx> 0。5%或支付提供商故障增加>+0。3个百分点。
  • Alert Froda/风险评分高于细分市场的阈值。

6) Kill-switch(紧急标志)

SRE/On-Call可见的单独标志类别。
保证使用TTL键进行本地评估(毫秒)。
不退款停机:require reason+postmortem ticket。
集成的自动操作:关闭奖金,将付款转换为手动模式,禁止X提供商的存款。


7)与CI/CD和GitOps的集成

CI:通过匿名样本验证标志方案,规则线,"干运行"目标。
CD:宣传国旗作为文物(semver),敏感国旗(付款/合规性)的"approval gates"。
GitOps:在单独的config存储库中的标志,merge recvest=更改事件,"开箱即用"审核。


8)安全和合规性

RBAC/ABAC:谁可以创建/启用/提高百分比;职责分工(开发人员≠生产者≠产品所有者)。
审计:谁/何时/何时/为什么;理由(ticket/JIRA),与事件匹配。
PII最小化:定向的属性通过经络匿名/散列。
snapshot签名:在SDK/Proxy上验证完整性。
糖果交付的SLA:降级为"安全违约"。


9)可观察性和指标

运营:
  • 标志传播时间(p50/p95),本地腰果的命中率,更新频率。
  • 活动标志/过时/"悬挂"的数量(未按时删除)。
  • SLO保护器:潜伏期,错误,转换,提供商的稳定性。
杂货店:
  • DORA:报销频率,报废前时间,报废后故障百分比,MTTR。
  • A/B指标:CR,ARPPU,LTV信号,对额定得分的影响。

10)国旗生命周期

1.设计:目标/指标/所有者/有效期('expiresAt'),回滚脚本。
2.实现:SDK呼叫,后退,"曝光"/"决策"遥测。
3.Rollout:渐进式进站+SLO门。
4.Stabilize:提交效果,更新文档/例程。
5.清除:删除代码分支、关闭标志、审核"残余"。


11)实施示例

11.1 Web/Node。js

ts
// Инициализация SDK (псевдо)
const flags = await sdk.init({ sdkKey: process.env.FLAGS_KEY, user: { id: userIdHash, country, vipTier } });

// Не блокировать рендер:
const showNewCashout = flags.bool("new_withdrawal_flow", false);

if (showNewCashout) {
renderNewFlow();
} else {
renderClassic();
}

11.2 Kotlin / JVM

kotlin val client = FlagsClient(sdkKey = System.getenv("FLAGS_KEY"))
val context = UserContext(id = userHash, country = country, kycLevel = kyc)
val enabled = client.getBoolean("risk_guard_withdrawals", default = true, context = context)
if (!enabled) {
// аварийный режим: все выводы в manual review routeToManual()
}

11.3 NGINX(通过地图进行外部连接)

nginx map $http_x_feature $cashout_new {
default 0;
"~enabled" 1;
}

location /withdraw {
if ($cashout_new) { proxy_pass http://new_flow; }
if (!$cashout_new) { proxy_pass http://classic_flow; }
}

12)风险管理和渐进步骤

包括步骤:1%的员工→ 5%的"beta" → 10%的RU → 25%的EU → 100%,但DE(监管机构)除外。
限制器:最大1步/30分钟;每个窗口15分钟的指标稳定性要求。
自动停止:平台级别的政策(请参见下面的OPA)。

OPA自动脚策略(简化):
rego package flags.guard

deny[msg] {
input.flag == "new_withdrawal_flow"
input.metrics["withdraw_5xx_rate"] > 0.5 msg:= "Stop rollout: withdraw 5xx too high"
}

13)访问控制和批准

Change Types:标准(安全)vs敏感(付款/付款/限额)。
Approvals:产品所有者+技术。负责+合规性(适用于司法管辖区)。
时间窗口(freeze):禁止在高风险时期(黄金时段、大型赛事)进行夹具/扩展。


14)实验和统计

Exposure events(曝光事件):我们用属性来构造标志解决方桉。
分析:当前滚动值、段、转换效果/误差。
统计检查:正确分离,控制协变量(设备/地质)。
伦理和监管:避免地方法律限制的分割。


15)反模式

代码中没有"expiresAt"("分支墓地")的长寿旗帜。
在热路径中阻止SDK网络调用。
根据PII进行过多的定位,没有属性匿名。
启用,没有SLO保安/自动停止。
对于高风险流(存款/收款/奖金)没有杀手开关。
未经审核和证明的"秘密"手动旗帜编辑。


16)实施清单(0-60-90)

0-30天

选择标志平台/准备主机(SDK、proxy、kesh)。
输入电路("flag","owner","purpose","expiresAt","risk_level")。
将SLO指标连接到平台(关键API的潜在性/错误)。

31-60天

在敏感标志上添加approvals,OPA警卫。
自定义渐进策略(percent/rings),杀手开关面板。
在CI 中嵌入国旗方案linter;开始清理第一个"挂起"。

61-90天

与GitOps完全集成(MR标记编辑、审核)。
视觉dashbords:coverage SDK,发行时间,%kesh命中。
常规"Flag Debt Day":删除代码并关闭旗帜。


17)成熟度量

技术:p95接受配置<5 c;cache hit-rate SDK> 95%;使用'expiresAt'> 90%的标志百分比。
过程:100%带有前瞻性的敏感旗帜;"回滚前平均时间"<3分钟。
代码卫生:全球包容后30天内封闭旗帜的比例>80%。
业务效果:改进DORA(发布频率↑, MTTR ↓),减少发布事件。


18)应用程序: 模板和策略

国旗方案(YAML)

yaml flag: new_withdrawal_flow owner: payments-team risk_level: high purpose: "Новый поток вывода средств"
expiresAt: "2026-03-31T00:00:00Z"
sla:
propagation_p95_ms: 3000 slo_guards:
withdraw_p95_ms_increase_pct: 15 withdraw_5xx_rate_pct: 0.5 approvals:
required: ["product_owner","tech_lead","compliance"]

"没有永恒的旗帜"政策(林特的惯例)

yaml rules:
- check: expiresAt max_days_from_now: 180 action: error

事件的SDK合同(曝光)

json
{
"event": "flag_exposure",
"flag": "new_withdrawal_flow",
"variant": "on",
"userKey": "hash_abcdef",
"context": {"country":"CA","vipTier":"3"},
"traceId": "9f1c...a2",
"ts": 1730623200000
}

19)结论

Feature Flags是用于更改的"音量旋钮"。连接渐进式夹杂物、SLO保护器、严格的审核和定期扫除,并在CI/CD和GitOps上悬挂标志。结果,发布将变得频繁,可管理且安全,并且事件风险是可预测和可控制的。

Contact

联系我们

如需任何咨询或支持,请随时联系我们。我们随时准备提供帮助!

开始集成

Email — 必填。Telegram 或 WhatsApp — 可选

您的姓名 可选
Email 可选
主题 可选
消息内容 可选
Telegram 可选
@
如果填写 Telegram,我们也会在 Telegram 回复您。
WhatsApp 可选
格式:+国家代码 + 号码(例如:+86XXXXXXXXX)。

点击按钮即表示您同意数据处理。