用于消费者程序的multithreading与容器的优缺点

考虑一个RabbitMQ消费者计划。 你可以编写一个multithreading的线程,其中每个线程使用队列项目的一部分。 或者你可以用一个线程编写一个简单的CLI程序,连接到RabbitMQ代理程序,在这个代理程序中循环使用队列中的项目,然后在不同的容器中运行它们中的几个!

你认为我应该执行哪一个? 在这种情况下,multithreadingvs容器有什么优点和缺点?

个人而言,我发现multithreading在我的应用程序中几乎总是一个坏主意。 我更喜欢单线程和多个实例。

如果没有其他原因,比其他的原因,让其中一个实例崩溃而其余的继续工作。 如果你有一个单一的应用程序与多个线程,你必须先处理线程问题,然后如果事情崩溃一切停止工作。

显然有multithreading的有效用途。 我通常不会在适用的情况下。

你正在谈论一个集群场景,一个经纪人会触发多个容器上的工人。
这将涉及到docker swarm和一个发现代理,你可以在“ 在AWS上运行分布式Docker Swarm ”find一个例子:

http://levvel.io/wp-content/uploads/2015/11/Docker-Swarm-Distributed-Environment-Reference-Diagram-1024x936.png

Pro主要解决高可用性和可扩展性:如果一个节点资源(CPU /内存)开始被parsing,swarm会根据请求产生一个新的节点。
它假设你有基础设施(如AWS)来支持这个容量来获得新的节点。
骗局当然是它的复杂性和pipe理。

与单个容器(multithreading)模型相反,您可以在任何地方产卵,但是会受到一个主机资源的限制。

Interesting Posts