Nginx源码学习-负载均衡-关于轮询策略原理的自我理解

本文介绍了作者在学习Nginx源码过程中,对负载均衡中的轮询策略的理解。通过解析ngx_http_upstream_get_peer函数,阐述了如何在轮询中选择服务器节点,并解释了为何在选中节点后要降低其权重,以防止连续被选中。通过类比勇者战斗的比喻,帮助理解这一策略的运作机制。
摘要由CSDN通过智能技术生成

由于曾经缺乏手撕源码的经验,这段时间从零开始一点点啃nginx源码实在是啃的过于痛苦,加之自己的代码水平实在有限,只能结合多方大佬的源码分析文章以及自己的“意会”,用自己能理解的大白话梳理一下我所理解的算法实现过程。

轮询算法的原理就不作叙述了,这里直接贴出每轮轮询中选出最后结果的方法ngx_http_upstream_get_peer的源码:

static ngx_http_upstream_rr_peer_t *
ngx_http_upstream_get_peer(ngx_http_upstream_rr_peer_data_t *rrp)
{
    time_t                        now;
    uintptr_t                     m;
    ngx_int_t                     total;
    ngx_uint_t                    i, n, p;
    ngx_http_upstream_rr_peer_t  *peer, *best;

    now = ngx_time();

    best = NULL;
    total = 0;

#if (NGX_SUPPRESS_WARN)
    p = 0;
#endif

    for (peer = rrp->peers->peer, i = 0; //peer表示当前服务器
         peer;
         peer = peer->next, i++)
    {
		//计算当前服务器的标记位在位图中的位置
        n = i / (8 * sizeof(uintptr_t));
        m = (uintptr_t) 1 << i % (8 * sizeof(uintptr_t));

		//已经选择过,跳过
        if (rrp->tried[n] &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值