Nginx负载均衡IP HASH

没有昵称阿
阿里巴巴Java技术专家
领域专家: C/C++技术领域
2013-07-15 04:00:45
Nginx负载均衡ip hash算法中,先依据ip计算hash值,然后计算所要映射到的后端服务器,代码如下(nginx1.4.0):
 for ( ;; ) {

for (i = 0; i < iphp->addrlen; i++) {
hash = (hash * 113 + iphp->addr[i]) % 6271;
}

if (!iphp->rrp.peers->weighted) {
p = hash % iphp->rrp.peers->number;

} else {
w = hash % iphp->rrp.peers->total_weight;

for (i = 0; i < iphp->rrp.peers->number; i++) {
w -= iphp->rrp.peers->peer[i].weight;
if (w < 0) {
break;
}
}

p = i;
}


我的问题是,为什么要依据iphp->rrp.peers->weighted是否为零做两种不同的计算呢?

这个值的计算代码如下:
        n = 0;
w = 0;

for (i = 0; i < us->servers->nelts; i++) {
if (server[i].backup) {
continue;
}

n += server[i].naddrs;
w += server[i].naddrs * server[i].weight;
}

peers->weighted = (w != n);


即判断总的地址数目和权值之和是否相等来做计算~

求解~
...全文
425 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
没有昵称阿 2013-07-18
  • 打赏
  • 举报
回复
引用 1 楼 Hack95 的回复:
帮顶,这个问题值得探讨,这个板块有价值的帖子真不多。
查阅了一些资料,基本看懂了是怎么回事了。具体请参考: Nginx负载均衡-IP哈希策略剖析
没有昵称阿 2013-07-18
  • 打赏
  • 举报
回复
引用 1 楼 Hack95 的回复:
帮顶,这个问题值得探讨,这个板块有价值的帖子真不多。
谢顶!
柳晛 2013-07-18
  • 打赏
  • 举报
回复
帮顶,这个问题值得探讨,这个板块有价值的帖子真不多。

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧