这里原文在这里 http://blogread.cn/it/article/5608?f=wb1
由于之前研究过一段时间的nginx源码,所以这篇文章在nginx功能方面的原生介绍没有多少新意,
但是,
他的实验部分确实很值得关注的。
恩,最大的收获,就是在这里,不错。
本文将从源码的角度介绍nginx的内置负载均衡策略和扩展负载均衡策略,以实际的工业生产为案例,对比各负载均衡策略,为nginx使用者提供参考。
插播一句,看nginx的实现代码,有时会感到一阵激动,总会让我想起曾经第一次围着火炉读巴金的《家》那种感觉,额,有些跳跃了。。
文中首先介绍了下nginx内置的load balancepolicy: 轮询策略(有点像DFS,首先对于新到来的请求,总是选择当前拥有最大权重值的节点,将request发送给该节点对应的后台服务器上,同时当前节点权重值减一,当降至与其他某些节点相同权重时,就要选择其他的节点和后台服务器了)和ip hash方法(将request中的ip作为key进行hash,当经过连续20次hash找不到可用的机器,就退回到轮询算法);
另外又插播一句,在很多高性能的软件当中,RBtree,AVL,treap等数据结构很重要很重要啊。。。
关于实验:
首先简单介绍测试工具、测试网络拓扑和基本的测试流程
实验工具,这个有很多的开源工具,例如简单的ab,复杂的。。。忘记了。。webbench?等等,这里原文用的是polygraph,是个不错的工具。
nginx server夹在中间作为reverse proxy即可。测试他的调度策略的平衡性,一致性。
首先介绍下关键的测试指标:
均衡性:是否能够将请求均匀的发送给后端
一致性:同一个key的请求,是否能落到同一台机器
容灾性:当部分后端机器挂掉时,是否能够正常工作
学习了。。三种指标的测试。需要对于不同的指标设计不同的实验。在测试时,沿着时间轴将测试情景划分为四种情形:后台服务器全部正常 --> 部分挂掉-->全部挂掉 --> 全部恢复正常;