Files
platform/README.md

133 lines
4.5 KiB
Markdown
Raw Blame History

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