作家
登录

运维老司机说不容错过的Nginx负载均衡那点事

作者: 来源: 2018-03-28 14:30:43 阅读 我要评论

2. 源码分析

大年夜代码中可以看出,hash值既与ip有关又与后端机械的数量有关。经由测试,上述算法可以持续产生1045个互异的value,这是该算法的硬限制。对此nginx应用了保护机制,当经由20次hash仍然找不到可用的机械时,算法退化成轮询。是以,大年夜本质上说,ip hash算法是一种变相的轮询算法,如不雅两个ip的初始hash值正好雷同,那么来自这两个ip的请求将永远落在同一台办事器上,这为均衡性埋下了很深的隐患。

2.3 fair

fair策略是扩大策略,默认不被编译进nginx内核。其道理是根据后端办事器的响应时光断定负载情况,大年夜中选出负载最轻的机械进行分流。这种策略具有很强的自适应性,然则实际的收集情况往往不是那么简单,是以要慎用。

这两种也是扩大策略,在具体的实现上有些差别,通用hash比较简单,可以以nginx内置的变量为key进行hash,一致性hash采取了nginx内置的一致性hash环,可以支撑memcache。

3. 比较测试

本测试重要为了比较各个策略的均衡性、一致性、容灾性等,大年夜而分析出个中的差别性,并据此给出各自的实用处景。为了可以或许周全、客不雅的测试nginx的负载均衡策略,我们采取了两个测试对象、在不归并景下做测试,以词攀来降低情况对测试结不雅造成的影响。起首简单介绍测试对象、测试收集拓扑和根本的测试流程。

3.1 测试对象

3.1.1 easyABC

easyABC是公司内部开辟的机能测试对象,采取epool模型实现,简单易上手,可以模仿GET/POST请求,极限情况下可以供给上万的压力,在公司内部获得了广泛的应用。因为被测试对象为反向代劳办事器,是以须要在厥后端搭建桩办事器,这里用nginx作为桩webserver,供给最根本的静态文件办事。

3.1.2 polygraph

polygraph是一款免费的机能测试对象,以对缓存办事、代劳、交换机等方面的测试见长。它针砭范的设备说话PGL(Polygraph Language),闻敉件供给了强大年夜的灵活性。其工作道理如下图所示:

此处输入图片描述

3.2 测试情况

本测试运行在5台物理机上,个中被测对象零丁搭在一台8核机械上,别的四台4核机械分别搭建了easyABC、webserver桩和polygraph,如下图所示:

3.3 测试筹划

起首介绍下关键的测试指标:

均衡性:是否可以或许将请求平均的发送给后端

一致性:同一个key的请求,是否能落到同一台机械


容灾性:当部分后端机械挂掉落时,是否可以或许正常工作

以上述指标为指导,我们针对如下四个测试场景分别用easyABC和polygraph进行测试:

场景2 server_4挂掉落,其他正常;

场景3 server_3、server_4挂掉落,其他正常;

场景4 server_*均恢复正常办事。

上述四个场景将按照时光次序进行,每个场景将建立在上一个场景基本上,被测试对象无需做任何操作,以最大年夜程度模仿实际情况。别的,推敲到测试对象自身的特点,在easyabc上的测试压力在17000阁下,polygraph上的测试压力在4000阁下。以上测试均包管被测试对象可以正常工作,且无任何notice级别以上(alert/error/warn)的日记出现,在每个场景中记录下server_*的qps用于最后的策略分析。

3.4 测试结不雅

表1和图1是轮询策略在两种测试对象下的负载情况。比较在两种测试对象下的测试结不雅会发明,结不雅完全一致,是以可以清除测试对象的影响。大年夜图表中可以看出,轮询策略对于均衡性和容灾性都可以做到很好的知足

表2和图2是fair策略在两种测试对象下的负载情况。fair策略受情况影响异常大年夜,在清除了测试对象的干扰之后,结不雅仍然有异常大年夜的颤抖。大年夜直不雅上讲,这完全不知足均衡性。然则大年夜另一个角度出发,恰好是因为这种自适应性确保了在复杂的收集情况中可以或许物尽所用。是以,在应用到工业临盆中之前,须要在具体的情况中做好测试工作。

经由过程实际的比较测试,我们对nginx各个负载均衡策略进行了验证。下面大年夜均衡性、一致性、容灾性以及实用处景等角度比较各类策略。

以下图表是各类hash策略,所不合的仅仅是hash key或者是具体的算法实现,是以一路做比较。实际测试中发明,通用hash和一致性hash均存在一个问题:当某台后端的机械挂掉落时,原有落到这台机械上的流量会损掉,然则在ip hash中就不存在如许的问题。正如上文中对ip hash源码的分析,当ip hash掉效时,会退化为轮询策略,是以不会有损掉流量的情况。大年夜这个层面上说,ip hash也可以算作是轮询的进级版。

图5为ip hash策略,ip hash是nginx内置策略,可以看做是前两种策略的特例:以来源ip为key。因为测试对象不便于模仿海量ip下的请求,是以这里朝长进步线上实际的情况加以分析,如下图所示:


  推荐阅读

  无服务器计算给云计算埋了哪些“坑儿”

沙龙晃荡 | 3月31日 京东、微博、华为拭魅战专家与你合营商量容器技巧实践! 毋庸置疑 无办事器>>>详细阅读


本文标题:运维老司机说不容错过的Nginx负载均衡那点事

地址:http://www.17bianji.com/lsqh/40983.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)