You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python实现根据CPU与RAM需求匹配合适云实例大小

云实例规格最小适配匹配方案实现

需求明确:基于给定的云实例规格列表,筛选出能满足应用CPU(vCPU)和RAM(GB)资源需求的最小适配实例,要求实例的CPU和RAM数值均不低于应用需求,且在所有符合条件的实例中是资源规模最小的。

给定的实例规格列表如下:

instance_sizes = [
    {"name": "t3a.nano", "cpu": 2, "mem": 0.5},
    {"name": "t3a.micro", "cpu": 2, "mem": 1},
    {"name": "t3a.small", "cpu": 2, "mem": 2},
    {"name": "t3a.medium/c5a.large", "cpu": 2, "mem": 4},
    {"name": "t3a/m5a.large", "cpu": 2, "mem": 8},
    {"name": "c5a.xlarge", "cpu": 4, "mem": 8},
    {"name": "t3a/m5a.xlarge", "cpu": 4, "mem": 16},
    {"name": "c5a.2xlarge", "cpu": 8, "mem": 16},
    {"name": "t3a/m5a.2xlarge", "cpu": 8, "mem": 32},
]

测试案例

  • 当应用需求cpu=1.8、mem=6时,返回t3a/m5a.large(该实例有2vCPU、8GB RAM,t3a.small的4GB RAM不满足)
  • 当应用需求cpu=0.1、mem=6时,返回t3a/m5a.large(满足RAM需求的最小实例)
  • 当应用需求cpu=2.1、mem=6时,返回c5a.xlarge
  • 当应用需求cpu=6、mem=16时,返回c5a.2xlarge

实现思路

  1. 先过滤出所有满足cpu >= 应用需求cpu且mem >= 应用需求mem的实例;
  2. 对符合条件的实例,按照CPU优先、其次RAM的顺序从小到大排序(实例规格的资源规模由CPU和RAM共同决定,先看CPU档位,再看同档位下的RAM大小,数值越小越优先);
  3. 取排序后的第一个实例,就是最小适配实例。

代码实现

def find_min_instance(required_cpu, required_mem, instance_list):
    # 筛选符合资源需求的实例
    eligible_instances = [
        inst for inst in instance_list
        if inst["cpu"] >= required_cpu and inst["mem"] >= required_mem
    ]
    if not eligible_instances:
        return None  # 无匹配实例时返回None,可按需调整
    
    # 按CPU升序、RAM升序排序,取第一个即为最小适配实例
    eligible_instances.sort(key=lambda x: (x["cpu"], x["mem"]))
    return eligible_instances[0]["name"]

# 验证测试案例
instance_sizes = [
    {"name": "t3a.nano", "cpu": 2, "mem": 0.5},
    {"name": "t3a.micro", "cpu": 2, "mem": 1},
    {"name": "t3a.small", "cpu": 2, "mem": 2},
    {"name": "t3a.medium/c5a.large", "cpu": 2, "mem": 4},
    {"name": "t3a/m5a.large", "cpu": 2, "mem": 8},
    {"name": "c5a.xlarge", "cpu": 4, "mem": 8},
    {"name": "t3a/m5a.xlarge", "cpu": 4, "mem": 16},
    {"name": "c5a.2xlarge", "cpu": 8, "mem": 16},
    {"name": "t3a/m5a.2xlarge", "cpu": 8, "mem": 32},
]

print(find_min_instance(1.8, 6, instance_sizes))  # 输出: t3a/m5a.large
print(find_min_instance(0.1, 6, instance_sizes))  # 输出: t3a/m5a.large
print(find_min_instance(2.1, 6, instance_sizes))  # 输出: c5a.xlarge
print(find_min_instance(6, 16, instance_sizes))   # 输出: c5a.2xlarge

补充说明

  • 排序逻辑:实例CPU是阶梯式增长(2→4→8),优先按CPU升序能锁定最低满足需求的CPU档位,同档位下按RAM升序则能找到该档位里刚好满足RAM需求的最小实例;
  • 无匹配场景:如果没有符合条件的实例,当前返回None,可根据实际业务需求调整为抛出异常、返回提示字符串等。

内容的提问来源于stack exchange,提问作者turbonerd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:44:54