## TODO 实现 sse 检查订单,减少请求次数 trade/create 性能问题,缩短事务时间,考虑其他方式实现可靠分布式事务 重新实现接口 proxy 注册与注销接口: - 注册时向 redis ports 可用池中加入端口 - 注销时需要同时移除可用池与租约池中的端口(需要考虑具体实现,考虑正在使用的节点归还问题) - 调整通道分配策略,提供一个 all set 和一个 free set,提取时取交集再取出,归还时取交集再归还。 需要确认以下 ID.GenSerial 的分布式并发安全性 网关缩扩容太慢 redis channel lease 加一个 zset,定时处理没有成功释放的端口 底层调用集成 otel - redis - gorm - 三方接口 ### 长期 分离 task 的客户端,支持多进程(prefork 必要!) 调整目录结构: ``` - /core 核心概念 - /util 工具函数 - /models 模型 - /queries 数据库层 - /clients 三方依赖的客户端实例 - /services 服务层 - /auth 认证相关,特化服务 - /app 应用相关,初始化日志,环境变量等 - /http 协议层,http 服务 - /cmd 主函数 逐层向上依赖 cmd 调用 app, http 的初始化函数 http 调用 clients 的初始化函数 ``` 考虑一个方案限制接口请求速率,无侵入更好 冷数据迁移方案 proxy 网关更新接口可以传输更结构化的数据,直接区分不同类型以加快更新速度 ## 业务逻辑 ### 订单关闭的几种方式 1. 创建订单后推送异步任务,到时间后尝试完成订单或关闭订单 2. sse 接口推送订单状态,轮询尝试完成订单 3. 异步回调事件,收到支付成功事件后自动完成订单 4. 用户退出支付界面,客户端主动发起关闭订单 ### 产品字典表 | 代码 | 产品 | | ----- | ------------ | | short | 短效动态代理 | | long | 长效动态代理 | ### 节点分配与存储逻辑 添加: - 检查用户 ip 是否在白名单内 - 取用端口,不够则返回失败 - 将分配结果转写成配置发送到网关 - 保存通道信息和分配记录,其中通道信息以网关为主体,分配记录以用户为主体 - 添加异步任务,当时间结束后释放取用的端口并清空网关配置 删除: - 如果传入用户信息,检查要删除的连接是否属于该用户 - 释放可用端口 - redis 脚本中检查,如果端口所属节点已下线则直接忽略 - 提交清空配置到网关 缩扩容: - 通过调度任务实现缩扩容 - 每分钟检查一次全部配置,按代理分组 - 获取所有代理后备配置 - 后备配置/当前配置 - 当比例 < 1.5 或 > 3 时,重新更新为 2 倍