我有一个 docker swarm,我在其中部署了 3 个微服务副本。微服务的工作是让客户端下载文件。我目前正在测试最大 3GB 的大文件,并同时进行多个此类下载。我在 17.06.1-ce
我的微服务在我的服务中安装了“docker.sock”。它与我的 mac-docker-vm 上的套接字相同
我有一个 bash 脚本,无论我在微服务中还是在 mac 上执行它,都应该给我相同的输出(因为相同的套接字安装在容器内)。输出为 3 个 IP 地址。该脚本基本上只是运行“docker 检查以获取 IP 地址”。它做得很好。bash 脚本使用 docker 命令,我认为它在内部使用 docker.sock 来处理这些命令。
问题描述
- 当我让我的微服务忙(我运行的服务副本不止一个)时,它正在流式传输大量数据流,比如最多 3 个 3GB 文件流,我认为 docker sock 会变慢。我觉得这是因为当我发送下载流请求时,它会到达 REST 控制器,控制器执行 bash 脚本,并坐在那里等待脚本完成。为了验证我的理论,即脚本是瓶颈,而不是“Scala”的“Process”类,当这个瓶颈出现时,我在笔记本电脑上执行了相同的 bash 脚本。在流式传输过程中,脚本等待了超过一分钟才做出响应。请记住,无论我是从笔记本电脑还是从我的 Scala 代码(在微服务内部,它是正在使用的同一个套接字(因为安装了相同的 docker.sock))执行脚本
- 如何进一步调试以确保我的理论是正确的并绕过它?我知道这是我为支持下载文件而编写的代码库,但是我是否可能会打开一个资源,从而使套接字表现不佳?我没有在 CentOS Docker 上测试过这个。不确定那里的行为是否也会与 Mac 上的一样