我知道它运行得很好,所以它可以很好地用于开发,但它不会因为 AuFS 而具有相当糟糕的磁盘和/或网络 IO 性能吗?
3 回答
如果将 Cassandra 数据放在一个卷上,磁盘 I/O 性能将与容器外部完全相同,因为 AUFS 将被完全绕过。
即使您不使用卷,只要您稍后不将commit
Cassandra 数据转换run
为该图像的新图像,性能就会很好。即使你这样做了,性能只会在每个文件的第一次写入期间受到影响;之后,它将是原生的。
您不会看到网络 I/O 性能有任何不同,除非您的容器每秒处理 100s 的 Mb/s 网络流量和/或 1000s 的连接。在这种情况下,您可以使用Pipework等工具将 MAC VLAN 接口甚至本地物理接口分配给您的容器。
我们实际上是在生产环境中在 Docker 中运行 Cassandra,并且不得不解决很多性能问题。
网络:您应该将其设置为 --net=host 以使用主机网络。否则,您的网络速度将受到重大影响。有关推荐最佳实践的更多信息,请参阅本文。
数据量:您应该将数据量暴露给物理主机。如果您在云中操作,请注意您放置数据量的位置可能会限制您的 iops。
JVM:仅仅因为您在容器中运行 Cassandra 并不意味着您可以摆脱对 jvm 的调整。您仍然需要对其进行修改以考虑主机上的系统资源。
集群名称/种子:这些需要配置并且需要从硬编码值更改以使用 sed 查找和替换为环境变量。
最大的收获是,就像任何软件一样,您需要进行一些配置。这不是 100% 的即插即用。
调查同样的事情,刚刚在slideshare上发现了这个:
“Docker 使用 Linux 以太网网桥进行基本的软件路由。这将提高您的网络吞吐量。(50% 命中)使用主机网络堆栈代替(10% 命中)”