高性能服务系统的构建和实战书的学习笔记(2)负载均衡技术之nginx

nginx是一款轻量级的web服务器,反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。特点是占用内存少,并发能力强

在正式介绍nginx前,先介绍几个关键的算法:

1  一致性hash算法

(1) 一致性hash算法的思路是它能够根据不同的属性数据,生成一串不同的hash值,并且能够将这个hash值转换为0到2的32次方-1范围的整数(或者是有可排列依据的其他数据类型),形成一个圆环。而这个圆环是个抽象的结构,在实际编程中需要使用各种数据结构来模拟。例如在数据库中间件Mycat中,就用红黑树来形成这个抽象的环。

(2)一台服务器的某个或某些属性可以进行hash计算,并根据计算分布在这个圆环的某一个点。称为服务器的hash落点

(3)一个处理请求也可以根据某个或某些属性进行hash计算(参与计算的属性可以是这个请求的IP端口cookie值URL值或者请求时间等),经过hash计算分布在这个圆环的某个点上。称为处理请求的落点

(4)我们可以约定处理请求经过hash计算后,落在A点左侧和B点右侧,便是这些处理请求都由A点所代表的服务器进行处理,这样就完全解决了谁来处理的问题

(5)这样有两个好处:服务处理映射的稳定性,来自于同一个IP和端口的请求经过hash计算后,落在圆环上的位置是一样的

(6)当某个服务器hash计算结果的落点由于某种原因下线,其所影响到的处理请求落点也是有限的。就会有下一个服务器hash落点代表的服务器进行处理。

(7)记住一致性hash算法更多的是描述了一种处理的思路,而适用它的具体hash算法可以有很多,CRC16,CRC32,SHA-1,MD5等,甚至自己写个hash算法,这要满足hash算法的三大标准:计算速度,散列均度,碰撞度。

2 轮询和加权轮询的算法

    轮询算法就是根据每次来的第几次的请求来执行该次请求由那个目标节点来执行。是依次执行  算法是   目标节点 = (N mod  X) + 1      (N是第N次请求,X是有几个节点)

    轮询算法没有考虑每个节点的处理能力的问题。加权轮询就是按照某种规则计算得到的每个处理节点的权值。例如CPU利用率,网络占用请求或者在配置文件中固定的权重。

    算法逻辑是:假如给定三个节点的权重是A节点100,B节点80,C节点60,再求这个三个权值的最大公约数,是20   那么上面提到的X就等于12 = 5 + 4 + 3   在通过 目标节点 = (N mod X) + 1 这个算法,得到  1到5的请求落到A节点

6到9的请求落到B节点,10到12请求落到C节点。


高性能服务系统的构建和实战书的学习笔记(2)负载均衡技术之nginx_第1张图片

nginx的安装和使用  CentOS6

首先使用yum安装nginx最小的支撑组件:

ps:使用yum命令之后我linux报了错


那么解决的办法是:

vi /usr/bin/yum  

然后把 #!/usr/bin/python改成如下


问题解决后执行 yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel   gcc   pcre-devel

安装好最小支撑依赖后 下载nginx 然后解压

wgethttp://nginx.org/download/nginx-1.8.0.tar.gz


安装nginx之前还要安装PCRElib,为了支持HTTP重新模块

否者在安装nginx时会报错


执行命令

yum -y install pcre-devel  就解决上述问题

再执行nginx的安装步骤


即可

有个完善的安装操作步骤的连接,亲测,是可以的 

有两点不同的是第一步安装的tools要按照我上面写的更完善些 (yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel   gcc   pcre-devel)

第二是我直接用的./configure  命令,而没有加--prefix  指定目录,默认安装目录是在/usr/local下,这本身就是我打算安装地方。

http://www.runoob.com/linux/nginx-install-setup.html

ps:最后再提醒一句  有的资料上说 pcre在Centos上是安装的,在安装新的pcre前要通过rpm  -e --nodeps  pcre-xxxxx-xx  卸载掉,这会把一些默认的目录也删掉,重新安装是安装不上的,不可取

nginx各个重点模块的说明

1 gzip 模块

2 rewrite模块  下面的链接对该模块有详细的讲解

https://segmentfault.com/a/1190000002797606

3 健康检查模块

4 图片动态缩略模块

后续我会开篇再些这些

你可能感兴趣的:(高性能服务系统的构建和实战书的学习笔记(2)负载均衡技术之nginx)