大家好,我是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.参考文献
百度
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:
A3:
静态资源的请求直接由Nginx返回到浏览器
-------------------------------------------------------------------------------------------------------------------------
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。
---------------------------------------------------------------------------------------------------------------------------