适用于数千个后台作业的可扩展解决方案,每个作业都打开网络套接字

Scalable solution for thousands of background jobs each of them opening web sockets

我正在开发一个加密机器人平台,该平台正在从 Binance 等交易所提取数据,并向其用户提供机器人。这些机器人 运行 作为后台作业。这些机器人中的每一个都订阅了以下 exchange web sockets:订单簿、交易历史、烛台图表数据、未结订单、账户交易、账户余额等。机器人使用来自交易所的这些网络套接字订阅,并基于他们执行命令的策略。后端还托管 SignalR 集线器 (wss://url),它应该实时更新 UI。

问题

我无法扩展机器人的后台作业。大平台如何同时处理这么多机器人?他们 运行 同时有 300,000 个机器人。

每个机器人至少需要 4 个套接字(1 - 订单簿,2 - 交易历史,3 - 烛台数据,4 - 账户信息,例如余额等)。 与帐户信息相关的网络套接字有自己的监听密钥,这意味着它们不能被重复使用,不像其他不需要监听密钥的网络套接字。

我在浏览器中看到了这些平台之一的网络选项卡,它似乎只使用了一个 URL wss://...,这意味着它们 运行 在一台机器上?

数学:

单个 machine/server

上可以处理多少套接字

Each registered file descriptor costs roughly 90 bytes on a 32-bit kernel, and roughly 160 bytes on a 64-bit kernel.

每个套接字 160 字节 = 每台机器 1.600.000 个套接字,这意味着 300,000 个机器人应该没问题,但我仍然需要了解可扩展的解决方案,因为可以想象未来用户数量会增加。这些机器人后台作业必须在不同的 machines/servers 之间进行拆分。

我试过的

我当时试过Hangfire,但我不是专家,不知道是不是一个好的解决方案。

我自己找到了解决办法。是IIS、Nginx或任何服务器的Round Robin/Weighted Robin Load Balancer

Round robin load balancing is a simple way to distribute client requests across a group of servers. A client request is forwarded to each server in turn. The algorithm instructs the load balancer to go back to the top of the list and repeats again.

Ardalis 在 MSDN 上记录了它。