TLDR 我想重新创建https://github.com/KorayGocmen/scheduler-worker-grpc而无需对工作人员进行端口转发。
我正在尝试建立一个有竞争力的编程评判服务器来评估提交的内容,作为我学校的一个项目,我在那里教孩子们编程。
因为评估的计算量很大,所以我希望有多个工作节点。调度程序将接收提交并将它们分发给工作节点。为了便于工人部署(因为它会经常变化),我希望工人能够订阅调度程序,从而成为一名工人并接受工作。
worker 可能与调度程序不在同一个网络上 + worker 驻留在 VM 中(也许稍后会移植到 docker 但目前存在问题)。
调度器应该能够知道 worker 的资源使用情况,向 worker 发送不同类型的作业并接收结果流。
我目前正在考虑使用 grpc 来解决我对工作人员和调度程序之间通信的要求。
我可以创建多个调度程序服务方法,例如:
注册工人,接收工作流
流作业结果,什么也收不到
定期流工作状态,什么也没有收到
但是我更喜欢以下但idk是否可能:
调度器 GRPC api:
注册一个工作人员(使工作人员 GRPC api 可用于调度程序)
工人 GRPC api:
开始工作(返回工作状态流)
取消工作???
获取资源使用情况
如果连接丢失,worker 应该自动注销。
所以我的问题是...是否可以创建一个 grpc worker api,如果该 worker 在没有端口转发的情况下位于 NAT 后面,则可以将其注册到调度程序以供以后使用?
其他可能不必要的信息:
更糟糕的是,我有多种完全不同类型的工作(流式传输交互式控制台,针对准备好的测试用例执行代码)。我可能只是为不同的工作创建不同的工人。
有时作业涉及在本地文件系统(最多 500 MB)上有大文件,这些文件通常保存在调度程序附近,因此我想将作业发送给已经从调度程序下载特定文件的工作人员。否则将大文件下载到其中一名工人身上。在工作人员上同时拥有所有文件将占用超过 20 GB,因此我想避免它。
一个 worker 可以同时运行多个作业(最多 16 个)。
我正在写系统。
MMMHUHU
相关分类