2025-05-22 15:22:40 +08:00
|
|
|
|
## TODO
|
|
|
|
|
|
|
2026-05-13 16:17:57 +08:00
|
|
|
|
### 接口并发问题
|
|
|
|
|
|
|
|
|
|
|
|
#### 找可用网关 & 找可用端点
|
|
|
|
|
|
*(注:找端点依赖于网关状态,二者先后执行,但在并发控制上统一处理)*
|
|
|
|
|
|
|
|
|
|
|
|
**下线并发问题**
|
|
|
|
|
|
* 提供指定网关的可重入读写锁A。
|
|
|
|
|
|
* 整个提取期间锁定A直到提取结束。
|
|
|
|
|
|
* 网关可以并发下线,但是不允许在锁A清空前进行删除或修改。
|
|
|
|
|
|
|
|
|
|
|
|
#### 找可用节点
|
|
|
|
|
|
|
|
|
|
|
|
##### 找本地
|
|
|
|
|
|
**并发筛选问题**
|
|
|
|
|
|
多个提取请求筛选到同一个节点,只有一个请求可以占用该节点,其他请求会直接失败。
|
|
|
|
|
|
|
|
|
|
|
|
**处理方案:**
|
|
|
|
|
|
* 提供占用锁,持续到提交配置后。
|
|
|
|
|
|
* 筛选出节点后,锁定该节点,如果锁定失败说明该节点已被占用(包括云端节点)。
|
|
|
|
|
|
* 如果被占用则等待占用结束后重新筛选(如果在结束前就重新筛选,可能还是会筛选到同样的节点,再次导致失败)。
|
|
|
|
|
|
* 提取时可能要求多个节点,因此锁定节点时,需要一个 lua 脚本同步锁定同一批节点。
|
|
|
|
|
|
|
|
|
|
|
|
##### 找云端
|
|
|
|
|
|
**重复筛选问题**
|
|
|
|
|
|
云端接口不会自动过滤已连接的节点,有可能筛选到已经连接甚至配置的节点。
|
|
|
|
|
|
|
|
|
|
|
|
**处理(缓解)方案:**
|
|
|
|
|
|
* 优先筛选今日未分配的节点,如果没有可用节点,再分配已用节点,这个方案暂时缓解问题。
|
|
|
|
|
|
|
|
|
|
|
|
#### 整理配置信息
|
|
|
|
|
|
|
|
|
|
|
|
* 该环节**不会有并发问题**。
|
|
|
|
|
|
|
|
|
|
|
|
#### 开通通道
|
|
|
|
|
|
*(注:包含以下三个独立操作,主要关注其执行的原子性与最终一致性保证)*
|
|
|
|
|
|
|
|
|
|
|
|
##### 提交异步关闭任务
|
|
|
|
|
|
**后续失败问题:**
|
|
|
|
|
|
* 不考虑回滚,执行时需要考虑后续数据不全的情况。
|
|
|
|
|
|
* 提交需要 `proxy` 和 `batch` 参数,端口取用是独占的,因此在归还端口前,一定不会有其他连接使用端口。任务信息中需要包含足够的信息以在没有数据库信息时解除配置。
|
|
|
|
|
|
* 解除连接与归还端口全部成功才算成功。
|
|
|
|
|
|
|
|
|
|
|
|
##### 提交配置到云端
|
|
|
|
|
|
* 该环节**不会有并发问题**。
|
|
|
|
|
|
|
|
|
|
|
|
##### 保存到数据库
|
|
|
|
|
|
**一致性处理:**
|
|
|
|
|
|
* 保存失败后,只会存在孤立占用。异步任务会自动重试,能够实现最终一致性。
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
- 并发扣减问题
|
|
|
|
|
|
- 代理选择通过查 redis 实现
|
|
|
|
|
|
|
|
|
|
|
|
- 重新考虑取用流程设计,是否可以分离端口归还与通道断开。端口归还后通道即使没有断开,未来也会被其他请求占用,能够实现最终一致性
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
2026-05-08 17:30:51 +08:00
|
|
|
|
- otel 没有正确记录接口失败信息
|
2026-05-07 12:43:15 +08:00
|
|
|
|
|
2026-05-11 14:11:56 +08:00
|
|
|
|
筛选和关联展示功能扩展
|
|
|
|
|
|
|
2026-05-07 12:43:15 +08:00
|
|
|
|
错误提示增强,展示整链路信息
|
2026-04-27 14:05:35 +08:00
|
|
|
|
|
|
|
|
|
|
ip 提取频率限制,在 ensure 函数加逻辑,通过 redis 或者 pg 计算分钟内提取次数,只允许每分钟提取 30 次
|
|
|
|
|
|
|
2026-04-18 11:15:29 +08:00
|
|
|
|
proxy 的删除和更新,锁粒度应该有问题
|
|
|
|
|
|
|
|
|
|
|
|
交易信息持久化
|
2026-03-28 14:18:11 +08:00
|
|
|
|
|
2025-12-08 14:22:30 +08:00
|
|
|
|
用反射实现环境变量解析,以简化函数签名
|
2025-12-01 12:43:29 +08:00
|
|
|
|
|
2026-04-02 17:48:59 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
2025-11-24 18:44:06 +08:00
|
|
|
|
分离 task 的客户端,支持多进程(prefork 必要!)
|
|
|
|
|
|
|
2025-12-08 14:22:30 +08:00
|
|
|
|
慢速请求底层调用埋点监控
|
2026-02-27 16:28:28 +08:00
|
|
|
|
|
2025-11-24 18:44:06 +08:00
|
|
|
|
冷数据迁移方案
|
2026-02-27 16:28:28 +08:00
|
|
|
|
|
2026-03-18 13:07:06 +08:00
|
|
|
|
## 开发环境
|
|
|
|
|
|
|
|
|
|
|
|
### 更新表结构的流程
|
|
|
|
|
|
|
|
|
|
|
|
1. 编辑 `scripts/sql/init.sql` 文件,参照原有格式,需要注意:
|
|
|
|
|
|
- 先写 drop table if exists 语句,确保脚本可以幂等执行
|
|
|
|
|
|
- 编写 create table 语句,按需添加审计字段和软删除字段 (created_at, updated_at, deleted_at)
|
|
|
|
|
|
- 为有必要的字段添加索引
|
|
|
|
|
|
- 为数据表及其字段添加注释
|
|
|
|
|
|
- 在文件末尾创建数据表流程全部结束后,为字段添加外键
|
|
|
|
|
|
2. 建议用数据库工具检查差异并增量更新,或者手动增量更新
|
|
|
|
|
|
3. 创建 model 文件,并将其添加到 gen 代码中
|
|
|
|
|
|
4. 生成查询文件
|
|
|
|
|
|
|
2026-03-30 14:59:35 +08:00
|
|
|
|
### 权限管理
|
|
|
|
|
|
|
|
|
|
|
|
在 `web/core/scopes.go` 下定义了系统所有静态权限
|
|
|
|
|
|
|
|
|
|
|
|
新增系统权限需要在数据库中配套添加权限
|
|
|
|
|
|
|
|
|
|
|
|
前端也需要新增配套权限定义
|
|
|
|
|
|
|
2025-05-27 15:08:18 +08:00
|
|
|
|
## 业务逻辑
|
2025-03-15 16:07:45 +08:00
|
|
|
|
|
2025-06-26 09:28:42 +08:00
|
|
|
|
### 订单关闭的几种方式
|
2025-05-27 15:08:18 +08:00
|
|
|
|
|
2025-11-24 18:44:06 +08:00
|
|
|
|
1. 创建订单后推送异步任务,到时间后尝试完成订单或关闭订单
|
2025-06-26 09:28:42 +08:00
|
|
|
|
2. sse 接口推送订单状态,轮询尝试完成订单
|
|
|
|
|
|
3. 异步回调事件,收到支付成功事件后自动完成订单
|
2025-11-24 18:44:06 +08:00
|
|
|
|
4. 用户退出支付界面,客户端主动发起关闭订单
|
2025-05-27 15:08:18 +08:00
|
|
|
|
|
2025-11-24 18:44:06 +08:00
|
|
|
|
### 节点分配与存储逻辑
|
2025-06-26 09:28:42 +08:00
|
|
|
|
|
2026-02-27 16:28:28 +08:00
|
|
|
|
提取:
|
|
|
|
|
|
|
2025-12-08 14:22:30 +08:00
|
|
|
|
- 检查用户套餐与白名单
|
|
|
|
|
|
- 选中代理
|
|
|
|
|
|
- 找到当前可用端口最多的代理
|
|
|
|
|
|
- 不考虑分割端口,不够加机器
|
|
|
|
|
|
- 获取可用端口
|
|
|
|
|
|
- 获取可用节点
|
|
|
|
|
|
- 生成批次号,提交到期释放任务
|
|
|
|
|
|
- 绑定节点与端口,保存到数据库
|
|
|
|
|
|
- 分别提交连接与配置请求
|
|
|
|
|
|
|
|
|
|
|
|
释放:
|
2026-02-27 16:28:28 +08:00
|
|
|
|
|
2025-12-08 14:22:30 +08:00
|
|
|
|
- 根据批次查出所有端口与相关节点
|
|
|
|
|
|
- 分别提交断开与关闭请求
|
|
|
|
|
|
- 释放端口
|