源码地址 https://github.com/gnosek/nginx-upstream-fair
一、模块简介:
fair模块会对全局的请求进行统计,并根据该服务器空闲状态,及处理过的请求及所有请求数进行权衡,实现负载均衡。
二、主要函数:
2.1、主要函数:
2.1.1、ngx_http_upstream_fair_try_peer:
该函数出现在idle调度和busy调度,会对一些符合条件的候选服务器中进行尝试。
尝试首先会判断该候选服务器是否已经进行了尝试,在未尝试且服务器未下线的情况下,会判断服务器的失败次数,如果服务器失败的次数在允许范围之内,会根据服务器上一次接受请求的时间与当前时间的时间差,判断上一次请求是否已经超时,如果已经超时,会重置该服务器的失败次数,同时返回尝试成功。
if (ngx_bitvector_test(fp->tried, peer_id))
return NGX_BUSY;
peer = &fp->peers->peer[peer_id];
if (!peer->down) {
if (peer->max_fails == 0 || peer->shared->fails < peer->max_fails) {
return NGX