首页 > 解决方案 > 数千个后台作业的可扩展解决方案,每个作业都打开 Web 套接字

问题描述

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

问题

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

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

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

在此处输入图像描述

数学:

在一台机器/服务器上可以处理多少个套接字

每个注册的文件描述符在 32 位内核上大约需要 90 个字节,在 64 位内核上大约需要 160 个字节。

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

我试过的

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

标签: .netasp.net-coretaskjobs

解决方案


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

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

Ardalis 在MSDN上记录了它。


推荐阅读