docker - 同一容器在单个主机上多次部署时水平扩展的效率
问题描述
当同一个容器(在这种情况下,容器有一个 apache 服务器和一个 php 应用程序)在同一个主机或虚拟机上部署 5 次或更多次(即部署 5 个或更多容器)时,我们是否在负载处理方面获得了效率?
这里的效率意味着这种架构中的应用程序是否能够处理更多请求或更快地处理请求?
据我所知,每个请求都会启动一个新的 apache-php 线程,如果我们有 5 个容器处理请求,那么它会不会效率低下,因为现在 apache 启动的线程将在上下文中更频繁地被切换出来?
解决方案
扩展应用程序需要了解应用程序达到其限制的原因。为此,您需要在完全加载时从应用程序和主机收集指标。如果不进行测试和收集指标,您只能猜测您为什么有能力。
如果应用程序正在充分利用一个或多个 cpu 核心,但不是全部,那么它不是多线程的,或者遇到了阻止所有核心被使用的锁。在这种情况下,向主机添加更多容器可能有助于扩展。
通常,水平扩展是因为单个主机正在使用所有资源,如磁盘 io、网络带宽、内存或 cpu。如果您发现应用程序在高负载下使用所有这些资源中的一种或多种,那么您需要更多主机,而不是在同一主机上运行更多容器。
这一切都假设您没有配置 docker 来限制容器上的资源。如果您使用一个容器达到您的容量,并配置了资源限制,那么获得进一步性能的最简单方法是删除或减少这些限制。
推荐阅读
- php - 在 World jVectorMap 上显示自定义区域标签
- ios - 支持 NFC 和蓝牙的 ISO 14443 智能卡/标签,用于 iPhone 配对
- android - 如何使用 Android 分页库将本地数据库与远程服务器同步?
- node.js - 如何测量 Nodejs 中的事件循环阻塞?
- zend-framework - Zend Framework 3 迁移/视图助手覆盖
- java - 如何访问 CSV 文件中的特定行并更新该行中的值?
- python - 什么是 cnumpy.core.multiarray?如何释放(删除)它?
- encoding - 带替换的 Blob.decode 似乎不起作用
- azure - Web 应用程序 - 更新应用程序设置 - json 格式
- scala - 使用 ciris-kubernetes 从 kubernetes secret 加载配置的单元测试或集成测试