1.写这个系统的目标是什么?当时是自己开发来进行对个人的合约账户交易的一套系统,主要是想实现无托管自动对区块链市场进行套利的一套系统
2.软件功能以及功能模块,这个系统是基于币安交易所对外的API文档对接,实行资金去中心化的托管系统,使用者只需要填入币安账户授权的API信息就可以进行使用,只需要授权交易权限,系统不接触资金,仅对账户进行自动合约交易(开仓平仓),系统可以支持自动获取币安最新交易对标记价格、币安账户可用金额判断,资金出现风险自动熔断,并且采用了协程并发优化,可以同时操作上千个托管账户的交易行为管理,另外可以自定义交易策略
3,业务流程描述:建立系统账户、绑定币安API授权信息,根据系统策略选择交易对以及交易方向和起始开仓资金,进入缓存池等待系统按照要求自动开仓并且建立实时监控仓位变化以及交易对的实时标记价格
当初选择ThinkPHP8框架进行前后端分离开发,主要是看中了它严谨的MVC结构和活跃的社区生态,能快速搭建起用户管理、策略配置等业务模块。前端用Vue构建交互界面,后端提供RESTful API,这是比较经典高效的组合。
1. 整体架构与技术栈的演变
整个系统的核心设计思路是“事件驱动”。最初的基础架构是:
后端:ThinkPHP8 + MySQL(存储用户、策略配置)
前端:Vue.js + Element UI(管理后台)
核心交易引擎:一个独立的PHP常驻进程,通过Cron定时轮询策略池。
但很快,我遇到了最致命的技术瓶颈:PHP原生无法实现协程并发。当需要同时监控数百甚至上千个账户的仓位和行情,并为它们执行毫秒级决策时,传统的同步阻塞模式完全无法胜任。轮询效率极低,延迟无法接受。
解决方案与技术栈升级:
我决定引入 Swoole,这是一个PHP的异步、协程并行网络通信引擎。这相当于给PHP装上了“多线程”的心脏。架构因此升级为:
常驻内存的Swoole HTTP/WebSocket服务器:替代了传统的PHP-FPM模式。服务器启动后常驻内存,消除了重复初始化框架的开销。
协程化并发处理:利用Swoole的协程,我可以同时发起成千上万个对币安API的请求(如获取行情、查询账户),或者同时处理多个账户的交易指令,而无需等待上一个请求完成。这些IO操作是并发的,但代码写法仍是同步顺序逻辑,非常简单清晰。
独立的异步任务队列:将日志记录、通知推送等非实时任务投递到Swoole Task队列中,由后台Worker异步处理,绝不阻塞核心交易链路。
2. 我的负责模块与量化结果
我独立负责了整个后端系统、交易引擎以及币安API的全面对接。
结果一(性能):在单台4核8G的服务器上,通过Swoole协程优化,系统最高可稳定同时管理超过1500个活跃托管账户的实时交易,核心行情更新与仓位判断的延迟从秒级降至100毫秒内。
结果二(安全与稳定):实现了完整的无托管风控体系。在长达半年的实盘运行中,成功触发了17次自动熔断,均在市场极端波动下有效阻止了预设资金以外的损失,实现了零资金安全事故。
结果三(功能):设计并实现了可视化策略配置器,用户可通过前端界面组合条件(如价格、指标)来生成基础策略代码,降低了使用门槛。
3. 遇到的难点、坑与解决方案
难点一:ThinkPHP8与Swoole的融合之痛
坑:ThinkPHP8的设计严重依赖“请求-响应”周期,每次请求结束都会清理静态变量。而Swoole是常驻内存的,直接融合会导致内存泄漏、上下文污染和数据库连接失效。
解决方案:
改造框架生命周期:重写了部分核心入口代码,确保每个协程(相当于一个用户请求)拥有独立的全局变量副本,实现协程间隔离。
连接池化管理:为MySQL和Redis创建了