Docker:在同一节点上实现负载均衡的真正性能吗?

时间:2018-01-10 23:38:17

标签: docker load-balancing

this page上,docker文档显示了一个包含4个节点和8个Web服务的集群的示例。部署策略均匀地部署容器:我假设每个节点2个。还添加了负载均衡器服务。

如果我理解正确,您将拥有3个节点,其中包含2个Web应用程序容器,第4个节点具有2个Web应用程序容器和负载平衡器容器。

在同一节点上进行负载均衡是否真的有性能提升?

具有负载均衡器的节点在负载均衡繁忙时是否会自行负载均衡?

1 个答案:

答案 0 :(得分:0)

在我看来,这取决于:

  1. 您的网络应用程序架构,
  2. 运行它的引擎,
  3. 您的服务器容量(CPU,内存,IO带宽等)
  4. 例如,Node Web应用程序是一个单线程应用程序,根据它的编写方式,它可能会或可能不会对运行它的机器执行最佳操作。例如,如果您有一个计算量很大的应用程序,或者您的应用程序的某些部分执行阻塞IO(文件,http等)操作,那么您将很快达到在单个核心上运行的单线程应用程序的限制。如果您的CPU具有其他内核,则您的Node应用程序将不会使用它们,并且将不会使用额外的电源。

    在这种情况下,是的,运行应用程序的多个实例(它们之间的“负载平衡”)可以提供明显的改进,只要您的CPU和其他资源尚未被任何一个实例耗尽。换句话说,如果应用程序的单个实例没有充分利用主机上可用的整个CPU容量,那么运行它的多个实例将有所帮助。

    但是,如果您的Web应用程序和运行它的引擎能够进行多线程并利用多个CPU核心,那么运行它的多个实例将不会增加任何价值,并且实际上可能会对您的服务器性能产生负面影响。

    构建应用程序和配置服务器的最终目标应该是最佳地利用所有可用资源:CPU,内存,磁盘和网络带宽。如果您的应用程序的单个实例可能耗尽这些资源中的任何一个,那么启动其他实例就没有任何好处。但是,如果单个实例无法使用所有资源(自然地,如Node的单线程性质,或者通过设计,例如当您的应用程序限制自己使用太多内存或磁盘访问时等),那么您可以利用剩余容量通过并排运行多个实例。