在同一主机的两个不同容器上运行MongoDB和Redis

我读过MongoDB和Redis服务器不应该在同一个主机上执行的地方,因为Redispipe理内存的方式损害了MongoDb。 这是Docker.io之前。 但现在看起来很不一样呢? 在同一主机上的两个不同容器上运行Redis服务器和MongoDB是否方便?

Docker不会改变你的硬件,它也是处理没有被虚拟化的资源的操作系统,所以和普通硬件相同的规则应该在这里适用。

内存

MongoDB和Redis不共享任何内存。 使用相同的主机的问题是,你可以用这两个进程用完RAM,你可以把redis的最大容量,对MongoDB你可以做同样的事情,这是强制性的。

如果你的大小是合适的(MongoDB RAM + Redis RAM <硬件RAM),你将不会在磁盘上获得任何交换(这是你想要防止的),但是也许mongodbcaching不会那么好(不够优化的地方)。 如果数据量增加,那么对于redis而言,内存不足一直是一个挑战:如果数据量不可预知,那么请注意内存不足!

如果使用redis使用备份,则会使用比数据集更多的RAM来生成转储,因此请小心。 这意味着也使用IO。

IO

在这种情况下(更less的内存)mongo会做更多的IO访问数据。 Redis,根据您的备份策略,可以使用IO或不使用(您的select)。 最糟糕的情况是:如果你在redis上使用AOF,IO是很多的,所以IO可能会成为这个架构的一个瓶颈。 如果您不使用redis备份,则不会出现问题。 对于Mongo来说SSD也是不错的select。

中央处理器

我不知道MongoDB是否使用了大量的CPU,但大多数情况下,除备份期间外, 如果使用redis使用备份:尝试使用两个CPU内核(一个用于redis,一个用于备份任务)。

networking

这取决于你的客户数量。 但是你应该检查你的机器的吞吐量/input负载,看看你是不是饱和(使用警报例如警报)。 有时候是瓶颈,一台机器吞吐量不够!

今天的许多服务,特别是数据库,都是非常积极的消耗资源,并且被devise成认为他们将(或者应该)在他们的专用机器上执行。 MongoDB和Redis试图在内存中保存大量的数据,并试图为自己提供更多的内存。 为了避免使用这个服务,你可以在主机上使用-m="<number><optional unit>"来限制容器使用的最大内存。 例如: docker run -d -m="2g" -p 27017:27017 --name mongodb dockerfile/mongodb

因此,您可以轻松控制服务的资源限制,并在同一台主机上对资源进行细粒度控制。 无论如何,重要的是要考虑到这些服务的性能devise认为主机的资源将完全可用。 例如,Cassandra等其他数据库将消耗大量内存,而且devise为具有顺序访问写入磁盘的function。 在这些情况下,Docker会让你运行限制使用的资源,但是如果你在同一个主机上运行多个服务,它们的性能将会严重下降。