【问题标题】:Docker service poor network performanceDocker 服务网络性能差
【发布时间】:2019-06-08 14:02:18
【问题描述】:

我有一个 go 服务 (http.ListenAndServe),它简单地回显“hello world”(最基本的服务,以免给基准测试带来开销)。问题是,如果我使用 go run server.go 运行服务并在我的本地机器(Macbook pro)上运行性能测试(使用 wrk https://github.com/wg/wrk),我的性能是

请求/秒:59336.07 传输/秒:8.66MiB

但如果我只是在 docker (docker run -p8080:8080 periket2000/goku) 中运行服务并再次运行性能测试,我得到:

请求/秒:4743.77 传输/秒:0.69MiB

这有意义吗? docker性能这么差? 我已经使用多个服务/堆栈对其进行了测试,并得到了相同的结果。

【问题讨论】:

  • Docker for mac 会比在 Linux 机器上运行 docker 慢。我不知道网络设置的细节,但它不如直接在主操作系统上运行的进程快是有道理的。将在 Linux 服务器上测试 docker 性能。开销不应该像你看到的那么大:stackoverflow.com/questions/21889053/…
  • 大概你可以使用docker run --net=host -p8080:8080 periket2000/goku 进行测试,但我不确定它在 osx 上是如何工作的。
  • 好的,我会在 linux 上做,让你知道这篇文章完成了。
  • 如果我在 Docker for Mac 的另一个容器中运行 wrk,性能会更接近:``` wrk_1 |请求/秒:39878.21 wrk_1 | Transfer/sec: 4.87MB不管怎样,docker for mac 是一个开发工具,预计不会有生产性能。
  • 你是对的。如果我在远程位置(例如aws)运行服务器并从远程机器(linux服务器----互联网----测试机器)运行测试,性能非常相似。所以,不要依赖 docker@Macbook 来测试性能。

标签: performance docker


【解决方案1】:

你描述的服务做的很少,从它的 GitHub 页面看,wrk 竭尽全力避免像 HTTP 持久连接这样的事情,所以你的基准基本上只测试组合系统可以设置多快建立和断开 TCP 连接。请注意,即使在环回情况下,数据速率也非常低:在您说“hello world”并挂断之前,有很多握手、IP 和 TCP 开销以及 HTTP 标头。

在环回情况下,MacOS 内核很可能几乎可以直接将数据从一个进程传送到另一个进程。

Process A |--> Local loopback ----> | Process B

在 Docker 案例中,流量需要经过虚拟网络接口,进入虚拟机,被 Linux 内核网络接口接收,经过 NAT 层进入 Docker 空间,然后被进程接收;回复需要反向通过这个堆栈。这并不奇怪,这有更多的开销,并且涉及的小数据包使情况变得更糟(参见connection establishment in the Wikipedia page on TCP的讨论;等待每一方完成SYN-ACK和FIN-RST序列并且那些不携带数据IIRC)。因此,这些结果并不令人惊讶。

Process A |--> Virtual interface
               Linux VM eth0
               iptables NAT
               Linux VM docker0
               Container eth0 ----> | Process B

就绝对数字而言,在我过去使用过的系统中,每秒处理超过 4,000 个请求肯定会进入“可观的性能”领域。 (由于工作负载的性质,仅环回的 8 MB/s 数据速率看起来并不出色。)可能值得用更现实的工作负载重新运行基准测试(GET 和 POST 的混合;不平凡数据响应;产生结果所需的一些计算或外部 I/O)。我不希望 Docker for Mac 达到纯本机无外部网络设置的 100% 的性能,但我希望更大的数据与开销比率以及 HTTP 持久连接之类的东西会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    相关资源
    最近更新 更多