Nginx负载均衡策略:
1.轮询
2.加权轮询:一个服务器的吞吐能力强,一个服务器的吞吐能力弱,根据服务器的资源进行配置
3.IP_Hash:会根据我们客户端的IP地址进行hash以后再分配到响应的机器上,这个好处就是当我们在做session共享的这种情况下,我们希望我们的客户端同一时间永远连接到同一台nginx服务器上,固定的IP会连固定的服务器,这样会出现服务挂了session不可用,可以把session放到redis中
4.最小链接leastconn(第三方提供的,它是比较智能的,它是根据我们服务器现在负载的状态,例如有三台服务器,每个服务器的负载都是1000,服务器1请求900,服务器2请求800,服务器3请求400,客户端请求服务器就会把请求智能的分配服务器3上)
Nginx两种限流方案(Nginx自带的模块)
基于连接ngx_http_limit_conn_module
基于请求ngx_http_limit_req_module
同一时间
Nginx限流---------令牌桶原理:
①令牌以固定的速率产生,并缓存到令牌桶中
②令牌桶最多存放N个令牌,放满时,多余的令牌被丢弃
③请求要消耗等比例的令牌才能被处理(有多少个请求就消耗多少个令牌)
④令牌不足N个时,不会删除令牌,且请求被丢弃
Nginx限流---------漏桶原理:
①每秒固定的速率流出请求
②漏桶的容量不变
③如果放入的请求超过桶的容量,则多余的请求被丢弃
令牌桶和漏桶有什么区别?
漏桶:流出的速率是恒定的,对于突发流量不做额外的处理
限流解决方案:
①基于连接(connection)limit_conn
http {
/**
limit_conn_zone用来配置限流key及存放key对应信息的共享内存区域大小
$binary_remote_addr表示根据ID地址
*/
limit_conn_zone $binary_remote_addr zone=addr:10m;
/**
$server_name 限制域名最大数 10m 共享内存大小
*/
limit_conn_zone $server_name zone=preserver:10m;
//被限流后记录日志的级别,默认error级别
limit_conn_log_level error;
//被限流后返回的状态码
limit_conn_status 503;
server {
listen 80;
server_name www.qiantian.com;
location / {
root html;
index index.html index.htm;
limit_conn addr 1; // 1 代表同一时间并发连接的最大数是1个
limit_conn preserver 2;// 2 针对这个域名同一时间允许的最大连接数是2个
}
}
}
$binary_remote_addr 基于客户端IP的限流(192.168.2.135)
②基于请求(request)limit_req(漏桶算法)
http {
limit_req_zone $binary_remote_addr zone=addr:10m rate=1r/s;
limit_conn_log_leve error;
limit_conn_status 503;
server {
listen 80;
server_name www.qiantian.com;
location / {
root html;
index index.html index.htm;
limit_req zone=addr burst=5 nodelay;
# burst默认值是0;延迟模式默认是delay;
}
}
}