docker - 并行运行 Docker 服务多次以利用具有多个 CPU 内核的计算机
问题描述
我有一个小型 Python 应用程序,它作为一个服务打包到一个撰写文件中。app
db
该app
服务的工作是使用来自(PostgreSQL)的数据运行一些空间计算,db
并将一些结果与磁盘上的一些文件一起写入同一个数据库中。对于后一点,我使用绑定挂载作为卷,以便将文件保存在主机上。
我面临的问题是,基于样本数据集,我估计完成对数据库所有记录的计算的时间大约为 1 年......
我还注意到应用程序的 Python 脚本一次只使用一个 CPU 内核。这很好,因为我不习惯并行编程,也因为我依赖第三方软件来运行一些分析,而那个软件也是单线程的。
另一方面,我可以使用多 CPU 核机器 (60x)。我注意到每次启动撰写文件时,只有一个 CPU 内核处于活动状态。
因此,我提出了天真的问题;我可以利用 dockerization 来运行相同的app
服务,因为那台机器上有很多可用的 CPU(或者可能少一点)?
请注意,该db
服务只能存在一次并共享给这些多个相同的app
服务。
如果是,如何正确有效地做到这一点?
我正在考虑在撰写文件中“复制粘贴”该app
服务 50 次,每次都给它另一个名称,但这可能非常难看(!)。应该有更好的方法来做到这一点......也许来自主机?任何提示表示赞赏。我不是码头专家。
解决方案
简而言之,这可以通过使用以下--scale
选项来实现docker-compose up
:
docker-compose up --scale app=50 app
文档:https ://docs.docker.com/compose/reference/up/
这将启动 50 个app
服务实例。
当然,如果应用程序访问唯一的数据库,则必须将应用程序设计为并行运行以避免麻烦。
Ubuntu 18.04(`5.4.0-81-generic x86_64 GNU/Linux`)的版本信息:
$ docker-compose --version
dockedocker-compose version 1.27.4, build 40524192
$ docker --version
Docker version 20.10.8, build 3967b7d
推荐阅读
- c# - 获取 2 次之间的 DateTime 差异
- flutter - 如何在 Flutter 中使用不同的 DropdownMenuItem 值时在 DropdownButton 上显示文本?
- python - 为不同对象的 DAO 编写通用功能的理想方式
- python - 训练模型后绘图时出错
- c# - Unity VSCode Intellisense 在 2020 版本中不起作用
- flutter - Flutter Places API 仅在 web 上返回 null
- java - SpringBoot API 方法的验证不起作用
- jquery - Datatables.net - 自定义时导出到 Excel 显示错误
- c# - C# 读取字符串中的 XML 元素
- javascript - 如何使用 rnfirebase 动态链接和身份验证模块 v6 在 React Native 中实现 signInWithEmailLink