现在我有一个运行 50 个线程来处理数据的 Python 应用程序。它需要一个 xlsx 文件并将处理一个值列表,并将输出一个简单的 csv。
我对自己说,既然这是一个简单的 50 个线程的 Python 应用程序,我该如何创建一个集群来分配更多的数据处理?例如:让每个 Worker 节点处理 master 给它的子集。这听起来很简单,只需将主应用程序对生成的数据集进行切片,然后通过负载平衡将其推送给工作人员。
我如何获得结果?我想获取所有结果(在这种情况下为 out.csv)并将它们返回给主并合并它们以创建 1 master_out.csv
起初我在想一个 Docker swarm,但我知道没有人使用它们,除了一个简单的 docker 容器之外的所有东西都被卸载到了 K8。
现在,我有一个简单的文件结构:
app/
__init__.py (everything is in this file)
dataset.xlxs
out.csv
我正在考虑创建一个 docker 映像,这样我就可以将这个应用程序移动到映像中,更新/升级,如果它还没有安装 python3,然后运行这个应用程序。
我开始深入处理,并意识到可能有一些内置的方法来处理这个问题。创建一个烧瓶应用程序来处理摄取,然后在 master 上创建一个烧瓶应用程序以在完成时接受文件等。但是 master 需要知道所有工作人员等。
- 我正在考虑创建一个集群。
- 主节点可以访问包含我需要处理的文件的卷。
- 负载平衡将每个文件(ROWS / NUM_WORKERS)的一部分推送到每个节点。
- WORKERS FINISH 后,Master 聚合生成的 csv 文件以制作主文件。
- Master_OUT.csv 将存在于文件夹中以供使用。
所以集群会打开,准备好后会运行所有东西,然后在最后去皮重。由于他们希望集群可能是分布式的,因此我不确定这将如何工作,因为处理具有 IP 地址限制。似乎这在本地集群上不起作用,因为用于引用的机器会在足够多的请求后撞到 cloudflare(或类似)墙,所以我试图想一个 UNIQUE IP 解决方案。
我对架构有一个想法,但我不确定是否应该为此创建一个 dockerfile,然后找出 kube 可以为我处理所有这些的方式。虽然我认为在 kube 配置文件中我们可以放置远程 aws 实例登录凭据,这样它就会启动所有远程服务器。
虽然我一直在用 Swarms 做一些事情,但似乎 kube 才是真正完成工作的地方,因为 swarms 似乎更适合其他事情。
我试图从 kube(或 swarm)的角度思考如何处理这个问题。
鉴于这些信息,这个概念让我想起了更少的负载平衡,因为数据聚合,更像是 Kubeflow,您可以在其中专门为 ML 创建一个 CLOUD,但不是 ML,而是任何分布式处理。