.net - 数千个后台作业的可扩展解决方案,每个作业都打开 Web 套接字
问题描述
我正在开发一个加密机器人平台,该平台正在从 Binance 等交易所提取数据,并向其用户提供机器人。这些机器人作为后台作业运行。这些机器人中的每一个都订阅以下交易所网络套接字:订单簿、交易历史、烛台图表数据、未结订单、账户交易、账户余额等。机器人正在使用来自交易所的这些网络套接字订阅并基于策略他们执行命令。后端还托管 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,但我不是专家,我不知道这是否是一个好的解决方案。
解决方案
我自己找到了解决方案。它是 IIS、Nginx 或任何服务器的 Round Robin/Weighted Robin 负载均衡器。
循环负载平衡是一种在一组服务器之间分发客户端请求的简单方法。客户端请求依次转发到每个服务器。该算法指示负载均衡器返回列表顶部并再次重复。
Ardalis 在MSDN上记录了它。
推荐阅读
- elasticsearch - 如何在过滤结果之前按时间戳对弹性搜索桶进行排序?
- javascript - 在Angular 7中计算数组元素的差异
- amazon-web-services - 使用 SSM 参数存储存储不同的第三方 API 密钥/凭据
- postgresql - Postgres:如何使用单个命令更新表中的多个记录
- javascript - 使用Javascript切换切换时如何再次编辑HTML文本?
- javascript - 使用 javascript 在 lu 列表中添加 li 对象
- java - Corda:如何将 AndComposition 与 VaultCustomQueryCriteria 一起使用
- c++ - openCV:使用重载运算符和不使用矩阵乘法时的不同结果
- http-live-streaming - HLS 播放列表通知
- javascript - React:刷新页面时无法访问组件道具