7 个请求各分几个

👁️ 2 人浏览 💬 0 人评论 ❤️ 添加收藏

按模型,7 个请求轮询分给 3 台,distribute(3, 7) 各接几个?

贯穿本节的负载均衡模型:rr(n, k) 轮询——第 n 个请求(从 0 数)发给第 n%k 个后端;weighted_expand(权重) 把下标按权展开成一轮([2,1]→[0,0,1]),weighted_pick(权重, n) 加权轮询第 n 个;distribute(k, 总数) 交回每个后端各接几个(下标 0 先多拿余数);least_conn(连接数) 发给连接最少的;total_weight/spread_ok 权重之和 / 是否都为正。

def rr(n, k):
    # 轮询:第 n 个请求(从 0 数)发给第 (n % k) 个后端,交回下标
    return n % k


def weighted_expand(weights):
    # 加权轮询:按权重把后端下标展开成一轮序列,如 [2, 1] -> [0, 0, 1]
    seq = []
    for i, w in enumerate(weights):
        seq += [i] * w
    return seq


def total_weight(weights):
    return sum(weights)


def weighted_pick(weights, n):
    # 第 n 个请求(从 0 数)按加权轮询发给哪个后端下标
    seq = weighted_expand(weights)
    return seq[n % len(seq)]


def distribute(k, total):
    # total 个请求轮询分给 k 个后端,交回每个后端各接了几个(下标 0 先多拿余数)
    return [total // k + (1 if i < total % k else 0) for i in range(k)]


def least_conn(conns):
    # 最少连接:把新请求发给当前连接数最少的后端(并列取下标小的)
    return conns.index(min(conns))


def spread_ok(weights):
    # 权重都是正数才是合法的加权配置
    return all(w > 0 for w in weights)

print(",".join(map(str, distribute(3, 7))))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论