【问题标题】:Scalable solution for thousands of background jobs each of them opening web sockets适用于数千个后台作业的可扩展解决方案,每个作业都打开 Web 套接字
【发布时间】: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


【解决方案1】:

我自己找到了解决方案。它是 IIS、Nginx 或任何服务器的 Round Robin/Weighted Robin 负载均衡器。

循环负载平衡是一种在一组服务器之间分发客户端请求的简单方法。客户端请求依次转发到每个服务器。该算法指示负载均衡器返回列表顶部并再次重复。

Ardalis 将其记录在 MSDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2011-04-28
    • 2011-08-02
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多