【发布时间】:2021-12-23 11:48:56
【问题描述】:
我正在开发一个加密机器人平台,该平台从 Binance 等交易所提取数据并向其用户提供机器人。这些机器人作为后台作业运行。这些机器人中的每一个都订阅以下exchange web sockets:订单簿、交易历史、烛台图表数据、未结订单、账户交易、账户余额等。机器人正在使用来自交易所的这些网络套接字订阅,并基于一种策略他们执行命令。后端还托管 SignalR 集线器 (wss://url),它应该实时更新 UI。
问题
我无法扩展机器人的后台作业。大型平台如何同时处理这么多机器人?它们同时运行着 300,000 个机器人。
每个机器人至少需要 4 个套接字(1 - 订单簿,2 - 交易历史,3 - 烛台数据,4 - 账户信息,例如余额等)。 与账户信息相关的网络套接字有自己的监听键,这意味着它们不能被重复使用,不像其他的它们不需要监听键。
我在浏览器中看到了其中一个平台的“网络”选项卡,它似乎只使用一个 URL wss://...,这意味着它们在一台机器上运行?
数学:
- 300,000 个机器人
- 每个机器人 4 个插槽(其中 3 个可以重复使用,每个机器人留下 1 个插槽) = 同时拥有 300,000 个插槽
在一台机器/服务器上可以处理多少个套接字
每个注册的文件描述符在 32 位内核上大约需要 90 个字节,在 64 位内核上大约需要 160 个字节。
每个套接字 160 字节 = 每台机器 1.600.000 个套接字,这意味着 300,000 个机器人应该没问题,但我仍然需要了解可扩展的解决方案,因为想象未来用户数量会增加。这些机器人后台作业必须在不同的机器/服务器或其他东西之间拆分。
我尝试了什么
我曾经尝试过 Hangfire,但我不是专家,我不知道它是否是一个好的解决方案。
【问题讨论】:
-
你有什么代码可以分享一下你现在是怎么做的吗?会让你更容易指向一个特定的方向。通常你想使用套接字异步回调。
-
@Selthien,谢谢您的回答!您需要 1) 机器人后台作业的源代码(我有一个看起来不太好的旧代码 - 我目前正在重新创建整个项目),2) 应该保持 UI 更新的集线器或3) 网络套接字订阅币安的网络套接字流?
标签: .net asp.net-core task jobs