All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m33s
- 新增网关限流:按本系统运营商账户(卡 carrier_id)→ 限流组 → 操作限制每秒请求数,每次 HTTP 尝试计量,默认限流、仅后台人工点击/通道阈值/自动续费/手动刷新豁免;支持只统计与拦截两种模式,默认只统计 - Asynq 遇限流不计失败、固定短延迟重试;轮询任务与停复机业务重试遇限流短延迟重排 - 停机、复机不再使用网关内部重试,只发一次请求 - 网关返回结构化错误;新增上游错误分类规则表与测试接口 - 新增按月分区的停复机记录表:系统自动停复机只写记录,不再写统一审计与集成日志;普通轮询查询不再写集成日志 - 新增限流组、错误分类、停复机记录、按账户调用统计与枚举后台接口 - 迁移 000243~000246;同步 OpenSpec 提案(含后续 6 个 change)与技术方案、工程约束
45 lines
3.3 KiB
SQL
45 lines
3.3 KiB
SQL
-- 运营商账户网关限流组(add-carrier-gateway-rate-limit)。
|
||
-- 背景:上游按运营商账户(tb_carrier 一行即一个上游账户)限频,现有轮询并发计数不以账户为单位且数值无依据。
|
||
-- 本表按账户配置卡的 5 个网关操作(查流量 / 查状态 / 查实名 / 停机 / 复机)的每秒请求上限。
|
||
--
|
||
-- 设计选择:
|
||
-- 1. carrier_id 为空表示全局组(可选,用于聚合网关总限流);同一账户下同一操作只能属于一个组,由应用层保存时校验。
|
||
-- 2. operations / high_priority_operations 为 JSON 字符串数组,取值见 pkg/constants 网关操作常量。
|
||
-- 3. 停用(status=0)的组不参与判断,组内操作回落为默认 QPS,不存在不限流的自动调用。
|
||
-- 4. 不使用数据库外键(ENG-MODEL-001);软删除,后台维护。
|
||
|
||
CREATE TABLE tb_carrier_rate_limit_group (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
carrier_id BIGINT,
|
||
group_code VARCHAR(50) NOT NULL,
|
||
group_name VARCHAR(100) NOT NULL,
|
||
max_qps INTEGER NOT NULL,
|
||
operations JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||
high_priority_operations JSONB NOT NULL DEFAULT '[]'::jsonb,
|
||
reserved_qps INTEGER NOT NULL DEFAULT 0,
|
||
status SMALLINT NOT NULL DEFAULT 1,
|
||
creator BIGINT NOT NULL DEFAULT 0,
|
||
updater BIGINT NOT NULL DEFAULT 0,
|
||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
deleted_at TIMESTAMPTZ,
|
||
CONSTRAINT ck_carrier_rate_limit_group_qps CHECK (max_qps > 0 AND reserved_qps >= 0 AND reserved_qps < max_qps),
|
||
CONSTRAINT ck_carrier_rate_limit_group_status CHECK (status IN (0, 1))
|
||
);
|
||
|
||
CREATE UNIQUE INDEX uk_carrier_rate_limit_group_code
|
||
ON tb_carrier_rate_limit_group (COALESCE(carrier_id, 0), group_code) WHERE deleted_at IS NULL;
|
||
CREATE INDEX idx_carrier_rate_limit_group_carrier ON tb_carrier_rate_limit_group (carrier_id) WHERE deleted_at IS NULL;
|
||
|
||
COMMENT ON TABLE tb_carrier_rate_limit_group IS '运营商账户网关限流组:按账户配置卡网关操作的每秒请求上限';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.carrier_id IS '运营商账户ID(tb_carrier.id),为空表示全局组';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.group_code IS '组标识,同一账户内唯一';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.group_name IS '组名称';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.max_qps IS '该组每秒请求上限';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.operations IS '组内操作:query_flow/query_status/query_realname/stop/start';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.high_priority_operations IS '组内高优先级操作,可用满 max_qps';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.reserved_qps IS '预留给高优先级操作的额度,普通操作最多使用 max_qps - reserved_qps';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.status IS '状态 0-停用 1-启用;停用后组内操作回落为默认 QPS';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.creator IS '创建人ID';
|
||
COMMENT ON COLUMN tb_carrier_rate_limit_group.updater IS '更新人ID';
|