一、nginx初体验

Nginx是一个http服务器。是一个使用c语言开发的高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

nginx可以用来做什么

1、反向代理:反向代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,简单来说就是真实的服务器不能直接被外部网络访问,想要访问必须通过代理。
2、动静分离:运用Nginx的反向代理功能分发请求:所有动态资源的请求交给应用服务器,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻应用服务器的压力。
3、负载均衡:负载均衡也是 Nginx常用的一个功能,当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。

二、nginx的5种负载均衡策略

1.轮询(默认)

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

2.weight

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

upstream bakend {  server 192.168.0.14 weight=10;  server 192.168.0.15 weight=10;
}

3.ip_hash

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

upstream bakend {  ip_hash;  server 192.168.0.14:88;  server 192.168.0.15:80;
}

4.least_conn

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

  #动态服务器组upstream dynamic_zuoyu {least_conn;  #把请求转发给连接数较少的后端服务器server localhost:8080  weight=2; #tomcat 7.0server localhost:8081; #tomcat 8.0server localhost:8082 backup; #tomcat 8.5server localhost:8083  max_fails=3 fail_timeout=20s; #tomcat 9.0}注意:此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

5.fair(第三方)

第5种和第6中需要安装插件来实现。

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

upstream backend {  server server1;  server server2;  fair;
}

6..url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

upstream backend {  server squid1:3128;  server squid2:3128;  hash $request_uri;  hash_method crc32;
}

三、小结

通过实际的对比测试,我们对nginx各个负载均衡策略进行了验证。下面从均衡性、一致性、容灾性以及适用场景等角度对比各种策略。如下图示:

我们从源码和实际测试数据角度分析说明了nginx负载均衡的策略,给出了各种策略适合的应用场景。通过分析不难发现,无论哪种策略都不是万金油,在具体场景下应该选择哪种策略一定程度上依赖于使用者对策略的熟悉程度。
以上分析和测试数据能够对大家有所帮助,期待有更多越来越好的负载均衡策略涌现,造福更多运维开发同学。


我的微信公众号:架构真经(id:gentoo666),分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。每日更新哦!

参考资料:

  1. https://blog.csdn.net/x1021333506/article/details/80975462
  2. https://blog.csdn.net/youanyyou/article/details/78990133
  3. https://blog.csdn.net/qq_35119422/article/details/81505732
  4. https://www.jb51.net/article/143985.htm

​​​

算法高级(14)-Nginx的负载均衡策略相关推荐

  1. Nginx多种负载均衡策略搭建

    背景介绍 上篇介绍了利用Nginx反向代理实现负载均衡,本文详细讲述Nginx下的几种负载均衡策略. 轮询 轮询,顾名思义,就是轮流请求,基于上篇文章的介绍,我们将负载均衡策略聚焦于default.c ...

  2. Nginx(三):负载均衡策略 与 Nginx静态服务器

    相关阅读: Nginx(一):Nginx原理概述 与 安装步骤详解 Nginx(二):反向代理原理 与 配置文件详解 Nginx(三):负载均衡策略 与 Nginx静态服务器 Nginx(四):Ngi ...

  3. nginx负载均衡策略

    nginx的负载均衡策略有4种: 轮询(默认) 最基本的配置方法,它是upstream的默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器. 参数有: 项目 Value fail_timeout ...

  4. nginx根据参数转发到不同服务器_Nginx服务器之负载均衡策略

    一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器. 二.Nginx负载均衡策略 负载均 ...

  5. Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1.什么是Nginx,谈谈个人都理解,项目中是否用到,为什 ...

  6. nginx 反向代理和负载均衡策略实战案例

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:glmapper https://juejin.im/pos ...

  7. Nginx负载均衡策略介绍

    负载均衡策略 介绍完Nginx负载均衡的相关指令后,我们已经能实现将用户的请求分发到不同的服务器上,那么除了采用默认的分配方式以外,我们还能采用什么样的负载算法? Nginx的upstream支持如下 ...

  8. Nginx负载均衡策略之fair介绍

    fair fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小.加载时间长短智能的进行负载均衡.那么如何使用第三方模块的fair负载均衡策略. upstream backend{f ...

  9. Nginx服务器之负载均衡策略(6种)

    一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器. 二.Nginx负载均衡策略 负载均 ...

最新文章

  1. 网页转变成app,隐藏浏览器地址栏
  2. 全球及中国模块化塑料带行业供需调查及产销形势预测报告2021-2027年版
  3. 如何远程调试部署在CloudFoundry平台上的nodejs应用
  4. 交互规则_您必须永不中断的10条交互设计规则
  5. 零基础自学html5要多久?Web前端学习路线的6点建议
  6. Excel——字符串操作函数
  7. 做短视频的几个小技巧,助你吸粉引流
  8. (附源码)基于Java SpringBoot的电影院管理系统设计与实现 毕业设计 011633
  9. 112358序列c语言,112358(112358的规律是什么)
  10. gcr.io 国内源 —— 基于 Travis CI + GitHub + DockerHub + Google Cloud 实现自动定时同步 gcr.io 镜像到 DockerHub
  11. 阿里云-云开发平台存储篇——给应用接上后端存储能力
  12. java写入文件中文乱码问题_解决Java写入UTF-8文件中文乱码问题
  13. linux系统英语词汇大全,linux系统中常命令和英语词汇.docx
  14. 二叉树的前中后序遍历(栈)(C++)
  15. 实用Maven插件 - 打包
  16. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇(逻辑+博弈) B
  17. 联通光纤宽带默认无法用ftp连接服务器,这样可以设置解决
  18. Tips(1):windows命令行删除软件
  19. SpringBoot如何整合前端页面
  20. 网众无盘服务器 快车挂盘失败 显示 当前磁盘已经为超级工作站模式,快吧无盘精简版结合网众...

热门文章

  1. Nginx实战基础篇一 源码包编译安装部署web服务器
  2. 后端开发如何设计数据库系列文章(二)设计大数据量表结构
  3. RabbitMQ 拓展基础组件封装思路
  4. golang nil切片与空切片
  5. python--while循环
  6. Python精通-Python字符串格式化操作
  7. tp5讲一个值传到另外一个控制里_统计起源 第四讲:黑暗中诞生的天才——自由度与标准差...
  8. 处理下载文件时中文乱码
  9. 【3】docker-compose
  10. SpringBoot整合kafka之kafka分区实战