解析Nginx负载均衡
13页1、对于一种大型网站来说,负载均衡是永恒的话题。随着硬件技术的迅猛发展,越来越多的负载均衡硬件设备涌现出来,如F5 BIG-IP、Citrix NetScaler、Radware等等,虽然可以解决问题,但其高昂的价格却往往令人望而却步,因此负载均衡软件仍然是大部分公司的不二之选。nginx作为webserver的后起之秀,其优秀的反向代理功能和灵活的负载均衡方略受到了业界广泛的关注。本文将以工业生产为背景,从设计实现和具体应用等方面具体简介nginx负载均衡方略。核心字:nginx 负载均衡 反向代理1.前言随着互联网信息的爆炸性增长,负载均衡(load balance)已经不再是一种很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给顾客较好的体验。迅速增长的访问量和数据流量催生了各式各样的负载均衡产品,诸多专业的负载均衡硬件提供了较好的功能,但却价格不菲,这使得负载均衡软件大受欢迎,nginx就是其中的一种。nginx第一种公开版本发布于,发布了1.0版本。它的特点是稳定性高、功能强大、资源消耗低,从其目前的市场占有而言,nginx大
2、有与apache抢市场的势头。其中不得不提到的一种特性就是其负载均衡功能,这也成了诸多公司选择它的重要因素。本文将从源码的角度简介nginx的内置负载均衡方略和扩展负载均衡方略,以实际的工业生产为案例,对比各负载均衡方略,为nginx使用者提供参照。2. 源码剖析nginx的负载均衡方略可以划分为两大类:内置方略和扩展方略。内置方略涉及加权轮询和ip hash,在默认状况下这两种方略会编译进nginx内核,只需在nginx配备中指明参数即可。扩展方略有诸多,如fair、通用hash、consistent hash等,默认不编译进nginx内核。由于在nginx版本升级中负载均衡的代码没有本质性的变化,因此下面将以nginx1.0.15稳定版为例,从源码角度分析各个方略。2.1. 加权轮询(weighted round robin)轮询的原理很简朴,一方面我们简介一下轮询的基本流程。如下是解决一次祈求的流程图:图中有两点需要注意,第一,如果可以把加权轮询算法分为先深搜索和先广搜索,那么nginx采用的是先深搜索算法,即将一方面将祈求都分给高权重的机器,直到该机器的权值降到了比其她机器低,
3、才开始将祈求分给下一种高权重的机器;第二,当所有后端机器都down掉时,nginx会立即将所有机器的标志位清成初始状态,以避免导致所有的机器都处在timeout的状态,从而导致整个前端被夯住。接下来看下源码。nginx源码的目录构造很清晰,加权轮询所在途径为nginx-1.0.15/src/http/ngx_http_upstream_round_robin.c|h,在源码的基本上,针对重要的、不易理解的地方我加了注释。一方面看下ngx_http_upstream_round_robin.h中的重要声明:从变量命名中,我们就可以大体猜出其作用。其中,current_weight和weight的区别重要是前者为权重排序的值,随着解决祈求会动态的变化,后者是配备值,用于恢复初始状态。接下来看下轮询的创立过程,代码如下图所示。这里有个tried变量需要做些阐明。tried中记录了服务器目前与否被尝试连接过。她是一种位图。如果服务器数量不不小于32,则只需在一种int中即可记录下所有服务器状态。如果服务器数量不小于32,则需在内存池中申请内存来存储。对该位图数组的使用可参照如下代码:最后是实际
4、的方略代码,逻辑很简朴,代码实现也只有30行,直接上代码。2.2. ip haship hash是nginx内置的另一种负载均衡的方略,流程和轮询很类似,只是其中的算法和具体的方略有些变化,如下图所示:ip hash算法的核心实现如下图:从代码中可以看出,hash值既与ip有关又与后端机器的数量有关。通过测试,上述算法可以持续产生1045个互异的value,这是该算法的硬限制。对此nginx使用了保护机制,当通过20次hash仍然找不到可用的机器时,算法退化成轮询。因此,从本质上说,ip hash算法是一种变相的轮询算法,如果两个ip的初始hash值正好相似,那么来自这两个ip的祈求将永远落在同一台服务器上,这为均衡性埋下了很深的隐患。2.3. fairfair方略是扩展方略,默认不被编译进nginx内核。其原理是根据后端服务器的响应时间判断负载状况,从中选出负载最轻的机器进行分流。这种方略具有很强的自适应性,但是实际的网络环境往往不是那么简朴,因此要慎用。2.4. 通用hash、一致性hash这两种也是扩展方略,在具体的实现上有些差别,通用hash比较简朴,可以以nginx内置的变量
《解析Nginx负载均衡》由会员公****分享,可在线阅读,更多相关《解析Nginx负载均衡》请在金锄头文库上搜索。
湖南郴州市安仁县公开招聘紧缺专业医疗技术人员53人模拟试卷【附答案解析】(0)
某年述职报告(教育副区长)
初一教师历史工作总结(三篇).doc
给小学一年级学生积累的好词好句
4000亩无公害茶叶基地及生态旅游开发项目可行性研究报告
第二学期高二生物备课组教学工作计划
化粪池的设计及位置要求
中药饮片净制生产工艺
造价工程师年终个人工作总结模板(4篇).doc
简易红外无线耳机
业务员月度总结与计划样本(3篇).doc
登康口腔护理用品股份有限公司办事员岗位工作说明书
暑假社会实践报告范文三篇
相似三角形的判定2导学案
酒店前台实习自我鉴定
欣悦一世手写计划书Word版
建筑合同模板合集9篇
市级先进教学教改先进个人材料
Mathematica求解方程(组)、级数
【管理精品】行销与广告计划编拟指南
2023-01-22 6页
2024-01-02 51页
2022-08-04 16页
2023-10-24 14页
2023-11-23 4页
2023-02-14 8页
2023-08-01 8页
2022-08-16 57页
2023-05-28 27页
2023-02-03 9页