首页 > 编程知识 正文

openfeign负载均衡策略,springcloud负载均衡策略

时间:2023-05-05 17:33:46 阅读:280266 作者:310

简介

在多个应用实例中使用负载均衡是一种常用的技术,他可以优化资源利用率,最大限度的提高吞吐量,减少延迟,增强容错。
在多个web应用服务器中,使用nginx 可以有效的做到HTTP负载均衡和流量分配,提高性能,扩展性和稳定性

负载均衡机制

nginx 支持以下负载均衡机制:
nginx可以根据客户端ip进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。

nginx的upstream目前支持的7种方式的分配,分别是:

1. 轮询策略,2. 权重轮询策略,3. ip_hash策略,4. 最少连接负载均衡5. fair策略,6. url_hash策略,7. sticky策略等。

目前我总结的nginx负载策略共两大类,分别是:内置策略和扩展策略。

内置策略有四种
包括:轮询策略、加权轮询策略、 最少连接负载均衡和ip_hash策略。默认情况下内置策略会编译进Nginx的内核,只需要在nginx配置中指明参数即可。
扩展策略有三种
包括:fail 策略,url_hash 策略,sticky 策略。

轮询方式(RR 默认)
把请求以循环的方式分布在不同应用服务器上,每个请求按照时间顺序逐一分配到不同的后端服务器,如果服务器down 掉,能自动剔除。

http { upstream bakendserver{ server server1:8080 max_fails=3 fail_timeout=3s ; server server2:8080 max_fails=3 fail_timeout=3s ; } server { listen 80; location / { proxy_pass http://backendserver; } }}

在上面的示例中,有三个相同的应用实例运行在server1~server2中。当没有配置负载均衡时,它默认使用轮询方式。所有的请求都被代理(proxied)在服务器群组 backendserver,nginx使用HTTP负载均衡来分发请求。

nginx反向代理负载均衡实现包括以下:HTTP,HTTPS,FastCGI,uwsgi,SCGI,和memcached。

配置HTTPS的负载均衡取代HTTP,只需要使用https协议即可。

当为FastCGI,uwsgi,SCGI和memcached设置负载均衡时,分别使用fastcgi, uwsgi_pass, scgi_pass, memcached_pass指令即可。

加权轮询(weight)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 weight值越大,分配到的访问几率越高。

http { upstream bakendserver{ server server1:8080 max_fails=3 fail_timeout=3s weight=8; server server2:8080 max_fails=3 fail_timeout=3s weight=9; } server { listen 80; location / { proxy_pass http://backendserver; } }}

最少连接负载均衡(least_conn)
当某些请求需要很长时间才能完成请求时,这种情况用最少连接方式来控制应用实例更公平一些。
使用最少连接方式,nginx不会过度的去请求一个比较繁忙的服务器,而且把新请求分发到一些不忙的服务器上。

在服务器群组配置中使用least_conn指令,最少连接负载均衡就会启用:

http { upstream bakendserver { least_conn; server server1:8080 max_fails=3 fail_timeout=3s ; server server2:8080 max_fails=3 fail_timeout=3s ; } server { listen 80; location / { proxy_pass http://backendserver; } }}

ip_hash(保留Session)
请注意轮询和最少连接的负载均衡方案,它们客户端后续的请求可能被分发到不同的服务器上,这样就不能保证同一个客户端一直被指向到同一台服务器上。

如果有这样一个需求,就是想把一个客户端绑定到特定的服务器上–换句话说,就是使客户端的Session有粘性和持久化始终选择特定的机器,这种情况可以使用ip_hash负载均衡方式来处理。

使用ip_hash的情况下,客户端的IP地址会被当做一个哈希表的key来决定这个客户端的请求是由服务器群组里的哪一台服务器去处理。这种方式保证了同一个客户端,它的请求总会被指向到同一台服务器上,除非这台服务器不可用。

配置ip-hash负载均衡,只需要在服务(upstream)群组中添加ip_hash指令即可:

http { upstream bakendserver { ip_hash; server server1:8080 max_fails=3 fail_timeout=3s weight=3; server server2:8080 max_fails=3 fail_timeout=3s weight=4; } server { listen 80; location / { proxy_pass http://backendserver; } } }

注意:ip_hash模块和后面的Sticky模块不能够同时使用。

Fail (第三方插件)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
该策略请求转发到负载最小的后端服务器节点上。Nginx通过后端服务器节点对响应时间来判断负载情况,响应时间最短的节点负载就相对较轻,Nginx就会将前端请求转发到此后端服务器节点上。

http { upstream bakendserver { server server1:8080 max_fails=3 fail_timeout=3s weight=3; server server2:8080 max_fails=3 fail_timeout=3s weight=4; fair; } server { listen 80; location / { proxy_pass http://backendserver; } }}

注意:这种策略具有很强的自适应性,但是实际的网络环境往往不是那么简单,因此需要慎用。

url_hash(第三方插件)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
在upstream中加入hash语句,hash_method是使用的hash算法。

http { upstream bakendserver { hash $request_uri;//非域名后面的资源部分 hash_method crc32; server server1:8080 max_fails=3 fail_timeout=3s weight=3; server server2:8080 max_fails=3 fail_timeout=3s weight=3; } server { listen 80; location / { proxy_pass http://backendserver; } }}

Sticky策略
该策略在多台服务器的环境下,为了确保一个客户端只和一台服务器通讯,它会保持长连接,并在结束会话后再次选择一个服务器,保证了压力均衡。

http { upstream bakendserver { sticky; server server1:8080 max_fails=3 fail_timeout=3s weight=3; server server2:8080 max_fails=3 fail_timeout=3s weight=3; } server { listen 80; location / { proxy_pass http://backendserver; } } }

注意:如果浏览器不支持cookie,那么sticky不生效,毕竟整个模块是给予cookie实现。Sticky模块和ip_hash模块不能够同时使用。

极速赛车五码稳赢技巧端服务器的响应时间来分配请求,响应时间短的优先分配。
该策略请求转发到负载最小的后端服务器节点上。Nginx通过后端服务器节点对响应时间来判断负载情况,响应时间最短的节点负载就相对较轻,Nginx就会将前端请求转发到此后端服务器节点上。

http { upstream bakendserver { server server1:8080 max_fails=3 fail_timeout=3s weight=3; server server2:8080 max_fails=3 fail_timeout=3s weight=4; fair; } server { listen 80; location / { proxy_pass http://backendserver; } }}

注意:这种策略具有很强的自适应性,但是实际的网络环境往往不是那么简单,因此需要慎用。

url_hash(第三方插件)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
在upstream中加入hash语句,hash_method是使用的hash算法。

http { upstream bakendserver { hash $request_uri;//非域名后面的资源部分 hash_method crc32; server server1:8080 max_fails=3 fail_timeout=3s weight=3; server server2:8080 max_fails=3 fail_timeout=3s weight=3; } server { listen 80; location / { proxy_pass http://backendserver; } }}

Sticky策略
该策略在多台服务器的环境下,为了确保一个客户端只和一台服务器通讯,它会保持长连接,并在结束会话后再次选择一个服务器,保证了压力均衡。

http { upstream bakendserver { sticky; server server1:8080 max_fails=3 fail_timeout=3s weight=3; server server2:8080 max_fails=3 fail_timeout=3s weight=3; } server { listen 80; location / { proxy_pass http://backendserver; } } }

注意:如果浏览器不支持cookie,那么sticky不生效,毕竟整个模块是给予cookie实现。Sticky模块和ip_hash模块不能够同时使用。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。