我目前在 AWS EC2 上托管了大约 20 个网站和应用程序。有些有自己的 EC2,而其他的则与该 EC2 上的多个虚拟主机共享一个 EC2。
每个站点都完全独立,彼此之间没有关联。共享 EC2 的站点通常规模小得多,流量/资源需求也很少(因此是共享服务器)。
我还有一台 EC2 服务器,仅用于与网站的实时版本一起运行批处理和计划任务,以确保即使在计划任务繁重的情况下实时网站仍可访问。
我希望在整个开发 > 生产环境中使用 Docker,以便更好地利用服务器资源,并更轻松地在环境之间迁移等。
我很想了解您对生产服务器硬件最佳实践的看法。
最好使用一个更大的 EC2,并将每个站点作为其自己的 Docker 容器吗?这听起来像是更少的服务器管理员,更整洁的整体设置,而且据我所知,从安全角度来看,每个 Docker 容器仍然保持自身独立。但是,任何服务器问题或资源峰值都会影响所有站点(由负载平衡器缓解)。
或者,我最好将它们分散到多个 EC2 上,即每个 docker 容器上的 EC2?这似乎完全违背了 docker 的初衷,但不确定我是否遗漏了什么。
所有站点使用单个 EC2 可以更轻松地(减少管理员)设置负载均衡器和/或服务器故障转移。
注意;如果有任何区别,我使用 RDS for MySQL;没有在任何 EC2 上直接运行 MySQl。
提前致谢
答案1
我们通常使用ECS(弹性容器服务)有 X 个任务(= 您的网站)和 Y 个主办方(= 用于运行这些任务的 EC2 实例),其中 X >= Y。然后我们让 ECS 根据需求在主机之间分配任务。您可以指定每个任务/网站所需的 RAM 和 CPU 能力。
我们也有 EC2 实例自动扩展组- 如果其中一个容器死亡,它将被自动替换,然后 ECS 会自动重新部署丢失的容器并将它们注册到负载均衡器,整个过程无需任何人工干预。
您可能还想在AWS Fargate,这是一种无服务器容器服务 - 尤其是对于较大的任务/网站来说,它可能是一个不错的选择。对于小任务,将它们整合到单个 EC2 实例上通常更经济。
底线是将任务(容器)与主机分离- 拥有一个网站池,不关心它们在哪里运行,拥有一个主机池,不关心它们上运行什么。但它需要一定程度的自动化 - 您希望任务自动注册到 ALB 目标组,主机容量耗尽时自动添加/如果主机死机则自动替换,等等。但无论如何,这种基本的自动化应该是既定的。
希望有帮助:)