说实话没有什么比较好的思路能够一下子整理出工作中的闪光点
目前能想到的切入点
- 人脑回忆这两年的Backlog
- 从上到下扫描这两年全部的Backlog
- 根据产品季度目标 PO-backlog 来整理
预计采用的方案是
1+3,如果数量不够可能会使用 2进行补充
开始回忆
账户暂停
我们系统内部维护一个 Account Api 状态
包括 只读,归档,Error,交易
需要增加一个账户暂停的状态,把归档的状态下掉,为什么下掉归档忘记了,看着是从业务理解层面上下掉的
暂停的账户需要停止
- 资产的更新
- 记录的抓取
印象中是做了
- 在 Account 表中增加一列 boolean 表示账户是暂停还是启动
- 在 Collector Account Monitor 中根据账户的状态进行控制是否要进行资产更新
- 在 Fetch Data Monitor 中根据账户的状态进行控制是否要进行抓取记录
这里感觉不对 :
优化了一下流程
- 写了一个 prompts 然后把对应任务的 pr丢给他 让他分析
这次改动做了什么
- 通过
migration给涉及到的3张Account数据库表增加state的列 - 处理相关下游模块的 暂停程序
collector,monitory,api hook - 通过 go 一个
migrateArchivedToPaused将历史归档状态的账户改成暂停的账户
亮点 :
- 复杂领域模型的状态及设计,因为涉及到
子账户暂停母账户才可以暂停 - 跨模块一致性改造
- 存量数据迁移
个人想法
理了一下这个backlog,感觉并不是很惊艳,只能说涉及到的模块多,下游设计到的多,导致做的周期比较长比较大
我感觉可以把 migration 单独提出来说一下,可以去挖一下我们公司 migration 的实现
Ai总结
主导 CeFi 账户 Pause/Resume 端到端设计与实现,将原先混用的「归档」语义拆分为运行态(Normal/Paused)与 API 权限态,新增 DB 三字段并完成 v2.171 migration。实现 Prop/Sub 级联状态机、恢复前 API 复检、事务与业务日志;改造 Collector 与 Monitor 共 6+ 后台 Job,暂停账户停止资产拉取与 API 巡检;完成归档账户存量迁移及多轮生产 bugfix,保障 v2.171 稳定上线。
Async
背景
交易所接口的实时查询接口只能够查询最近3个月的数据,如果想要获取更早的数据需要透过异步接口获取
- 请求下载ID | 这一步一个月有次数限制,而且IP权重很高
- 根据请求下载ID 去请求下载链接
整理
整体思路
|
|
亮点
-
Redis 队列进行接藕操作
-
任务每次在发版 进程重新启动的时候进行Recover
-
状态机驱动
not_started → packaging_data → downloading → importing → succeed/failed,含 packaging_data_with_error -
双层配额控制
- 进程级 :
rate.Limiter一分钟一次,防止误操作 - 账户级 : Redis 控制自然月计数
- 进程级 :
-
Mock 测试体系
AI一句话总结
设计并实现 CAM 加密资产管理系统历史数据异步拉取引擎(Go / Redis / PostgreSQL / MQ):从 0 搭建 Binance/OKX/Bybit 异步导出全链路(申请 → 轮询 → 下载 → CSV 解析入库),含双层配额控制、Redis 队列解耦、PG 状态机与发版容错恢复;支撑对账与历史回溯,模块累计 100+ 次生产迭代。
Auth 升级
背景说明
我们的 Apikey 铭感信息 都存放到 Auth 服务器上,之前 Auth 服务器上的 APikey_1 表数据太脏了
- apikey 不是存放在prop层级的,而是母子层级都可能存在
现在想要升级 apikey_1 为 apikey_2
- 希望所有 apikey 都收拢到 prop层级上面
–
C交易所账户有层级结构:Prop 母账户(如 bnprop)下挂多个子账户(如 binancef、binanced)。原先每个子账户都要单独配置 API Key,运维成本高、易出错。
这套改动实现:子账户自动复用 Prop 母账户的 API 凭证,并支持复制已有 Prop 账户创建新账户,同时完成 Auth 服务从 V1 到 V2 的平滑迁移。
整理
存储层 : 新增 account_apikey_2 表
Auth Server 层 : 新增 Copy Api 的功能,暴露出copy-api的接口
Auth Client 层 : 封装 Copy 调用, V1/V2 自动切换
业务层 : CopyHelper 统一调度:读 Key、写 Key、复制账户
观测层 : 给每一个回退增加统计
核心决策设计 :
-
双表并存,平滑迁移
- V1(account_apikey)与 V2(account_apikey_v2)共存
- 支持 V1→V1、V2→V2、V1→V2 三种 Copy 路径
- 客户端按 Auth 版本自动路由,V1 读不到时自动 V1→V2 迁移
-
灰度发布
- CopyRegionControl() 控制 master 环境先上线
- 后续通过 Auth 版本检测自动切换 V2
个人想法
这个功能比较难做,涉及到的模块很多,而且 更新 新增 删除 apikey 暴露给了很多地方,还需要做版本控制
导致改动的地方很多
Ai总结
负责设计并实现交易账户 API Key 共享能力,解决 Prop 母账户与子账户重复配置凭证的问题。新建 account_apikey_v2 存储层,提供 V1/V2 双版本 Copy API;在 tradeacc、auth_client、交易所 Sign 模块实现统一 CopyHelper,支持子账户自动复用 Prop 凭证及复制开户;设计 V1→V2 平滑迁移与降级回退,配合 Feature Toggle 灰度发布;新增 Copy 降级监控指标。涉及 5 个核心模块、1,000+ 行代码,6 天内分 4 个 PR 交付。
Trans 表优化
背景
成交表的数据有很多,一个客户一天的数据甚至就能到百万级别的了,需要优化一下存储
我们Trans表主要存储 id,business_id,account,time,detail这几个字段,之前 detail 是直接存储的交易所的原始返回
所以主要是优化这部分内容,通过压缩存储来进行优化
压缩算法和测试是运维那边来处理的(后续需要去看一下)
整理
我们存在两个结构一个 是 ec.OTSTrans 供给上层业务组使用 一个是 db.Trans 用于存储
- 新增 SlimOTSTrans,将
ec.OTSTrans的 jsontag 改为短JSON名处理例如a/b/c... - 在 OTSTransToDB 的时候使用 Compressor 进行控制
- 新增
blob和blob_format列用于表示是否是压缩内容 以及存入压缩内容 - 将detail字段进行私有化控制,全部业务层统一使用
GetDetails()和SetDetails()进行访问
流程 写入时:JSON → Slim 序列化 → 压缩 → 写入 blob,清空 details;读取时:按 blob_format 自动解压还原
|
|
架构与设计
全链路存储优化:不是简单「加个 gzip」,而是从 JSON 结构、压缩算法、DB Schema、读写 API 到 20+ 下游模块的系统性改造。
向后兼容设计:blob_format 双轨读写,支持新旧数据共存,生产可渐进迁移。
零拷贝转换:SlimOTSTrans 与 OTSTrans 通过 unsafe.Pointer 转换,并用 init() 校验 struct layout,兼顾性能与安全。
Ai总结
-
设计并实现 CAM 历史交易流水存储优化:Slim JSON 瘦身 + zstd/xz 压缩 + blob 分离存储,解决核心表存储与 I/O 瓶颈。
-
通过 blob_format 双轨兼容设计实现零停机迁移,重构 40+ 下游模块统一读写接口,开发 CLI 批量迁移工具并完成多环境灰度发布。