gpt4 book ai didi

multithreading - 多线程代码上的 Kubernetes 工作负载扩展

转载 作者:行者123 更新时间:2023-12-02 20:56:39 24 4
gpt4 key购买 nike

Kubernetes入门所以有以下问题:
假设一个微服务具有以下 C# 代码片段:

   var tasks = _componentBuilders.Select(b =>
{
return Task.Factory.StartNew(() => b.SetReference(context, typedModel));
});

Task.WaitAll(tasks.ToArray());
在我的盒子上,我知道每个线程都在 vCPU 上执行。因此,如果我有 4 个启用超线程的内核,我将能够同时执行 8 个任务。因此,如果我有大约 50000 个任务,大约需要
(50,000/8) * approximate time per task 
完成这项工作。这忽略了上下文切换等。
现在,移动到云端并假设此代码位于由 Kubernetes Deployment 管理的 docker 容器中,并且我们每个 VM 都有一个 docker 容器以保持简单。上述代码如何在部署中的虚拟机之间横向扩展?在这方面找不到非常明确的指导,所以如果有人有任何引用资料,那会很有帮助。

最佳答案

您通常会使用 Kubernetes 部署对象来部署应用程序代码。有一个 replicas:设置,它会启动一些相同的一次性 Pod。每个 Pod 都有一个容器,每个 Pod 将独立运行您上面引用的代码块。
这里的挑战是跨 Pod 分配工作。如果每个 Pod 生成自己的 50,000 个工作项,它们都会做同样的工作,事情不会发生得更快。仅仅在 Kubernetes 中运行您的应用程序并没有为您提供任何在 Pod 之间共享线程池或任务队列的预构建方式。
这里的一个典型方法是使用作业队列系统; RabbitMQ是一个流行的开源选项。系统的一部分生成任务并将它们写入 RabbitMQ。一名或多名工作人员从队列中读取作业并运行它们。您可以在不使用容器技术的情况下进行设置并向自己演示,然后在 Docker 或 Kubernetes 中重新打包,只需在部署时更改 RabbitMQ 代理地址。
在这个设置中,我可能会让工作人员连续运行作业,一次一个,没有线程。这将简化 worker 的实现。如果你想并行运行更多的工作,运行更多的 worker ;在 Kubernetes 中,增加 Deployment replica:数数。

关于multithreading - 多线程代码上的 Kubernetes 工作负载扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62587444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com