在多租户环境中如何实现缩减规模

46次阅读
没有评论

问题描述

在云环境中,例如AWS,可以由用户自己管理多租户,典型的例子是容器编排器,比如ECS或Kubernetes。当你有两个服务,一个需要内存,另一个需要CPU,并且你将它们放在一个集群中时,扩展(Scaling Up)相对较简单。每次在CPU或内存方面需要更多容量时,只需添加更多的资源。因为EC2的容量意味着CPU和内存两者的单位。使用CloudWatch Alarms可以相对容易地基于单个指标进行扩展(Scaling Up)。

但是,在缩减规模(Scaling Down)时,为了降低成本,需要同时考虑内存和CPU的限制,不要让其中任何一个降至所需的数量以下。由于不幸的是,CloudWatch Alarms不允许使用布尔逻辑或考虑多个指标。

问题: 有没有一个好的方法来实现自动扩展组(Auto Scaling Group)的容量缩减(Scaling Down)?

解决方案

请注意以下操作可能涉及版本差异及修改前做好备份。

最佳解决方案:基于机器学习的自动缩减

在处理多维资源需求和限制时,实现自动缩减是一个复杂的问题。在云环境中,资源需求不仅包括CPU和内存,还包括磁盘空间、磁盘IO、网络IO、并发性、延迟等多个维度。而资源需求的指标也不仅限于这些,还包括并发访问、页面访问量、用户交互等。

此外,资源需求随时间变化的模式也多种多样,例如日常、周末、特殊事件等。同时,还要考虑财务决策因素,如收入是否与流量相关、成本模型等。

因此,手动优化会导致技术债务的积累,而亚马逊等云服务提供商在保守方向上更容易赚钱,所以他们的工具可能无法满足你的需求。因此,选择一个能够在不完全正确的情况下增长/扩展的架构/技术栈是一个好的选择。

然后,从一些明显的因素入手,尝试为多个可能性制定一种排序方式。收集一些真实世界的数据,尝试构建一个近似模型,以解决多维资源需求和限制的自动缩减问题。

方案2:手动管理容器的启动顺序

如果你想要更加精细地控制容器的启动顺序,你可以考虑编写脚本或使用工具来管理容器的运行。以下是一些策略:

  1. 创建第三个自定义指标,跟踪两个指标中的较大者。例如,如果CPU分配率为60%,内存分配率为70%,则将该指标设置为70%。
  2. 选择CPU或内存中的一个资源,并始终分配较高的百分比给每个容器,与另一个资源相比。这样,在另一个资源之前,你总会达到你首选资源的不足,这样就不需要担心在它上面进行扩展或缩减。尽管这是最简单的解决方案,但明显的缺点是可能会导致资源浪费。
  3. 如果你不想使用CloudWatch指标进行自动扩展,还可以考虑使用工具(如 ECSpander)来辅助进行扩展管理。

需要注意的是,Kubernetes并不使用CloudWatch指标来进行扩展管理,它通过内部机制设置ASG的期望实例数量,因此不会受到你所描述问题的影响。

注意事项

在实施任何自动缩减策略之前,请确保在实际环境中测试并监控,以确保系统的稳定性和可靠性。

以上解决方案仅为参考,根据你的具体场景和需求,可能需要进一步的调整和定制。建议在实际应用中进行测试和验证,以确保系统的性能和可靠性。

请根据实际情况选择合适的解决方案,避免影响生产环境的稳定性和性能。

这些解决方案将帮助你在多租户环境中实现缩减规模,以达到节省成本的目标。根据你的具体情况选择最适合的方法,并在实际应用中进行测试和调优。

正文完