task操作的次数必须小于onTask处理速度,如果投递容量超过处理能力,task会塞满缓存区,导致worker进程发生阻塞。worker进程将无法接收新的请求
最近用Swoole
写量化铺单程序, 一个交易对时 感觉良好 50 task ok够用 但当交易对上到两位数, 并且task进程中发布和撤销委托耗时延迟时, task塞满了缓存区, 导致worker
进程阻塞, 内部价格对标延迟严重, 亏损1000刀
. 肉疼....
通过扩容task
, 平台优化批量撤销接口时长, 本地缓存撤销中委托记录 防止重复撤销造成服务器压力, 经过一系列优化 业务终于稳定了.
总结教训: task
不是万能的, 他也会影响你的 worker
使用请评估 task
中投递任务的处理速度!
网上有人使用 channel
代替 task
使用好处是不会阻塞worker
but channel
配合 协程 使用才更有效果吧. 一直不敢用swoole协程写复杂业务, 以后有机会测试下.
沙发