【修真院JAVA小课堂】nginx如何实现负载均衡

大家好,我是IT修真院西安分院第一期的JAVA学员,一枚正直纯洁善良的XX程序员

今天给大家分享一下,修真院官网JAVA任务五,深度思考中的知识点——nginx如何实现负载均衡

---------------------------------------------------------------------------------------------------------------------------

1.背景介绍

什么是nginx

Nginx是俄罗斯人编写的十分轻量级的 HTTP 服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。

因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名,其特点是占有内存少,并发能力强。

2.知识剖析

Nginx常用功能

反向代理,负载均衡,动静分离。

反向代理

反向代理服务器架设在服务器端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。

动静分离

运用Nginx的反向代理功能分发请求:所有动态资源的请求交给应用服务器,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻应用服务器的压力

负载均衡

意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。

负载均衡是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

我们都知道,普通的服务器在处理能力上, 每秒只能处理几万到十几万的请求,根本无法在一秒内处理更多的请求。负载均衡就是可以将多台服务器组成一个系统,通过技术将这些请求平均分配到这个系统的服务器当中去,这个系统就可以在每秒处理百万以上的请求。这样不仅给企业的网络提高了工作效率,还给企业节省了很多资源。

负载均衡的作用

1.解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);

2.提供故障转移,实现高可用;

3.通过添加或减少服务器数量,提供网站伸缩性(扩展性);

4.安全防护(负载均衡设备上做一些过滤,黑白名单等处理)

3.常见问题

负载均衡的几种策略

4.解决方案

轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

指定权重

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

IP绑定 ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

状态设置

down 表示单前的server暂时不参与负载

weight 默认为1.weight越大,负载的权重就越大

max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误

fail_timeout:max_fails次失败后,暂停的时间

backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻

5.编码实战

6.扩展思考

7.参考文献

Nginx 负载均衡的几种方式

百度

8.更多讨论


Q1:

 加权轮询的算法?

A1:

来看个例子。

现在使用以下的upstream配置块:

upstream backend {

    server a weight=4;

    server b weight=2;

    server c weight=1;

}

按照这个配置,每7个客户端请求中,a会被选中4次、b会被选中2次、c会被选中1次,且分布平滑。

我们来算算看是不是这样子的。

initial current_weight of a, b, c is { 0, 0, 0 }

通过上述过程,可得以下结论:

1. 7个请求中,a、b、c分别被选取了4、2、1次,符合它们的权重值。

2. 7个请求中,a、b、c被选取的顺序为a, b, a, c, a, b, a,分布均匀,权重大的后端a没有被连续选取。

3. 每经过7个请求后,a、b、c的current_weight又回到初始值{ 0, 0, 0 },因此上述流程是不断循环的。

Q2:

 跨域访问应该用什么保存用户状态

A2:

使用反向代理跨域访问,cookie保存状态

Q3:

 nginx怎么处理静态资源的?

A3:

静态资源的请求直接由Nginx返回到浏览器

-------------------------------------------------------------------------------------------------------------------------

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~


   技能树.IT修真院     
  “我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

   这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。

---------------------------------------------------------------------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/jimo621/article/details/80599766