提升网站性能:Nginx五种高效负载均衡策略

这篇具有很好参考价值的文章主要介绍了提升网站性能:Nginx五种高效负载均衡策略。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文收录于我是沐风晓月的csdn专栏《linux基本功-系统服务实战》, 关于nginx的系列后面会汇总起来,关注我,一起学习与成长。

本专栏写作的过程中,联合了csdn几位大佬,目前正在整理更新目录,力争让大家学到一些真东西,将所学的理论落地,帮助你更快的提升自己。

学技术最难的地方,其实是找到最优资料的过程,这次联合几位csdn的云原生方向的博主大佬,一起打造易学,易懂,落地的架构和云原生专栏。

一. 重点知识回顾

1.1 Nginx内核与模块划分

  1. 内核

其设计非常微小和简洁,完成的工作也非常简单。仅通过查找配置文件将客户端请求映射到一个location block(location是nginx配置中的一个指令,用例URL匹配),而在这个location中所配置的每个指令将会启动不同的模块取完成相应的工作。

  1. 从结构上划分:
  • 核心模块:HTTP模块、EVENT模块和MAIL模块。 基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP
  • Proxy模块和HTTP Rewrite模块。 第三方模块:HTTP Upstream Request
  • Hash模块、Notice模块和HTTP Access Key模块。

一般我们需要记住 模块名字即可,做到心里有底。

  1. 从功能上划分
  • Core(核心模块):构建nginx基础服务、管理其他模块。
  • Handlers(处理器模块):此类模块直接处理请求,并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。
  • Filters (过滤器模块):此类模块主要对其他处理器模块输出的内容进行修改操作,最后由Nginx输出。
  • Proxies (代理类模块):此类模块是Nginx的HTTP Upstream之类的模块,这些模块主要与后端一些服务
    比如FastCGI等进行交互,实现服务代理和负载均衡等功能。

1.2 Nginx模块处理流程

  1. 收到HTTP请求。
  2. Nginx基于配置文件中的位置选择一个合适的处理模块(Handlers)。
  3. Handlers模块需要把请求反向代理到后端服务器,就需要就变成另外一类的模块:load-balancers(负载均衡模块)
  4. 负载均衡模块的配置中有一组后端服务器,当一个HTTP请求过来时,它决定哪台服务器应当获得这个请求。
  5. 处理完成后,filters(过滤模块)将被调用。每个请求都可以被压缩成块,依次经过多个filters过。它们的执行顺序在编译时决定。过滤模块链以流水线的方式高效率地向客户端发送响应信息。每个filters不会等上一个filters全部完成,就像是流水线一样。
  6. 最后把响应发给客户端。

Nginx本身做的工作实际很少,当它接到一个HTTP请求时,它仅仅是通过查找配置文件将此次请求映射到一个location block,而此location中所配置的各个指令则会启动不同的模块去完成工作,因此模块可以看做Nginx真正的劳动工作者

1.3 nginx负载均衡的作用

  • 解决服务器的高并发压力,提高应用程序的处理性能;
  • 提供故障转移,实现高可用;
  • 通过添加或减少服务器数量,增强网站的可扩展性;
  • 在负载均衡器上进行过滤,可以提高系统的安全性。

二. 负载均衡的算法

2.1 关于负载均衡的理论回顾

负载均衡,就是 Nginx 把请求均匀的分摊给上游的应用服务器,这样即使某一个服务器宕机也不会影响请求的处理,或者当应用服务器扛不住了,可以随时进行扩容。
nginx负载均衡策略,# 3. linux基本功-系统服务实战,运维,linux,服务器
nginx将客户端的请求,根据相应的规则分发到部署项目的后端服务器,比如tomcat。 这里的相应规则其实就是在配置文件中指定:pass_proxy指令以及upstream指令。

静态负载均衡的算法: 主要包括 轮询算法,基于比率的加权轮询算法或者基于优先级的加权轮询算法;
动态负载均衡的算法: 主要包括基于任务量的最少连接优化算法、基于性能的最快响应优先算法、预测算法及动态性能分配算法等;

一般动态的负载均衡算法更加适用于复杂的网络环境。

负载均衡都是基于OSI七层模型来划分的:

OSI七层模型:

  1. 物理层:比特流传输
  2. 数据链路层:控制网络层与物理层之间的通信;
  3. 网络层:IP寻址和路由选择;
  4. 传输层:建立、维护、管理端到端的连接,常见的有TCP/UDP;
  5. 会话层:建立、维护、管理会话连接;
  6. 表示层:对数据进行格式化、编码、加密、压缩等操作;
  7. 应用层:为应用程序提供网络服务;
  • 四层负载是在传输层,基于IP+port的负载均衡,常见的有:
硬件:F5、BIG-IP、Radware等;
 软件:LVS、Nginx、Hayproxy等

nginx 增加了一个stream模块,用来实现四层协议的转发,代理,负载均衡等。

stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发我们的请求,通过upstream添加多个后端服务,实现负载均衡;

要使用stream的模式,需要在编译的时候加上 --with-stream才能用。

  • 七层负载均衡主要在应用层,主要基于虚拟的URL或者主机的IP的负载均衡:
实现七层负载均衡的方式:
    软件:Nginx、Hayproxy等

2.2 目前nginx常用的算法

Nginx的upstream支持如下六种方式的分配算法,分别是:

算法名称 说明
轮询 默认方式
weight 权重方式
ip_hash 依据ip分配方式
least_conn 依据最少连接方式
url_hash 依据URL分配方式
fair 依据响应时间方式

1. 轮询(默认方式)

轮询是upstream模块负载均衡默认的策略,每个请求会按时间顺序逐个被分配到不同的后端服务器。轮询不需要额外的配置.

upstream mufengserver{
        server  192.168.1.41:8080;
        server  192.168.1.42:8081;
    }
server {
		listen 80;
		server_name localhost;
location / {
			# mufengserver 就是服务器组的名称
			proxy_pass http://mufengserver/;
		}
	}

2. 权重策略(weight 加权轮询)

weitht=number后面的weight参数越高,任务也就越多,权重数字越大,被分配到请求的几率越大,默认为1;
用于在服务器性能不均衡的情况下使用,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的,所有此策略比较适合服务器的硬件配置差别比较大的情况。

比如你的服务器 4C8G 和 8C16G 的服务器都有,那么这时候就可以对服务器设置一些权重,让性能好的承担更多的请求。

upstream mufengserver{
        server  192.168.1.41:9001 weight=5;
        server  192.168.1.42:9002 weight=1;
    }
server {
		listen 8080;
		server_name localhost;
		
		location / {
			# mufengserver 就是服务器组的名称
			proxy_pass http:/mufengserver/;
		}
	}

3. ip_hash

当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上;
当来自某一个IP的用户在后端Web服务器A上登录后,再访问该站点的其他URL,能保证其访问的还是后端web服务器A;

	# 代理服务器
	# 设置服务器组
	upstream mufengserver{
        ip_hash;
		server localhost:9001;
		server localhost:9002;
		server localhost:9003;
	}
	server {
		listen 8080;
		server_name localhost;
		
		location / {
			# backend 就是服务器组的名称
			proxy_pass http://mufengserver/;
		}
	}

注意:使用ip_hash指令无法保证后端服务器的负载均衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接受的请求少,而且设置后端服务器权重等方法将不起作用.

4. fair

fair 主要根据访问的时间来分配任务,根据页面的大小,加载时间长短等智能的进行负载均衡;
要使用第三方模块fair必须安装upstream_fair模块;

upstream myserver{
        server  192.168.137.13:8082;
        server  192.168.137.13:8081;
        fair;
    }
server {
		listen 8080;
		server_name localhost;
		
		location / {
			# mufengserver 就是服务器组的名称
			proxy_pass http://mufengserver/;
}
}

5. url_hash

第三方插件,需要安装Nginx的hash软件包,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。
有时候同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费,但使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以从缓存中读取。

	# 代理服务器
	# 设置服务器组
	upstream mufengserver {
        hash $request_uri;
		server localhost:9001;
		server localhost:9002;
		server localhost:9003;
	}
	server {
		listen 8080;
		server_name localhost;
		
		location / {
			# mufengserver 就是服务器组的名称
			proxy_pass http://mufengserver;
		}
	}

6. least_conn

least_conn:最少连接,把请求转发给连接数较少的后端服务器。

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

这种方式适合请求处理时间长短不一造成服务器过载的情况。

	
	upstream mufengserver{
        least_conn;
		server localhost:9001;
		server localhost:9002;
		server localhost:9003;
	}
	server {
		listen 8080;
		server_name localhost;
		
		location / {
			# mufengserver 就是服务器组的名称
			proxy_pass http://mufengserver/;
		}
	}

总结

💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 本文由沐风晓月原创,首发于CSDN博客, 博客主页:mufeng.blog.csdn.net
💕 学习如逆水行舟,不进则退,一起努力加油哦!
💕 喜欢的话记得点赞收藏哈文章来源地址https://www.toymoban.com/news/detail-781438.html

到了这里,关于提升网站性能:Nginx五种高效负载均衡策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【创作赢红包】Nginx四——Nginx实现负载均衡的多种策略

    【Nginx一】——Nginx介绍(正向代理 反向代理 负载均衡 动静分离) 【Nginx二】——Nginx常用命令 配置文件 Nginx如何处理请求 【Nginx三】——Nginx实现反向代理 本篇博客主要介绍Nginx实现负载均衡的多种策略,包括轮询、最少连接、IP哈希、加权轮询、URL哈希。 Nginx可以通过反

    2023年04月09日
    浏览(34)
  • Nginx配置大全【六大使用场景、七大负载均衡策略、四大负载健康检查】

    !!! 反向代理也可以基于请求路径转发到不同服务器 !!! !!!反向代理路径结尾加不加 / 符号的区别!!! 如果只是简单的重定向操作,并且不需要进行复杂的路径重写或捕获,推荐使用 return 301 的方式来实现重定向。这样能够更直接、更高效地达到重定向的目的,避免不必要的

    2024年04月16日
    浏览(54)
  • 后端架构师必知必会系列:性能优化与负载均衡策略

    作者:禅与计算机程序设计艺术 在互联网高速发展的今天,网站的流量越来越多,为了保证网站的正常运行,优化服务器的性能显得尤为重要。同时为了提升网站的访问速度、节省网络带宽成本、提供更好的用户体验,很多网站都会采用分布式架构或云计算平台来提高网站的

    2024年02月06日
    浏览(55)
  • 深入浅出 -- 系统架构之负载均衡Nginx的性能优化

       到这里文章的篇幅较长了,最后再来聊一下关于 Nginx 的性能优化,主要就简单说说收益最高的几个优化项,在这块就不再展开叙述了,毕竟影响性能都有多方面原因导致的,比如网络、服务器硬件、操作系统、后端服务、程序自身、数据库服务等,对于性能调优比较感兴

    2024年04月14日
    浏览(50)
  • Nginx搭配负载均衡和动静分离:构建高性能Web应用的完美组合

    目录 前言 一、Nginx简介 1.Nginx是什么 2.Nginx的特点 3.Nginx在哪使用 4.如何使用Nginx 5.Nginx的优缺点 6.Nginx的应用场景 二、负载均衡和动静分离 1.负载均衡 2.动静分离 三、Nginx搭载负载均衡并提供前后端分离后台接口数据 1.Nginx安装 2.tomcat负载均衡 3.负载均衡后台项目发布 四、前

    2024年02月06日
    浏览(49)
  • SpringCloud(3) Ribbon负载均衡,负载均衡策略,自定义负载均衡

    假设我们有一台 order-service 订单服务,两台 user-service 用户服务,当订单服务需要调用用户服务获取用户信息的时候,应该怎么分配调用哪台服务呢? 这时候就需要用到 Ribbon 组件了。 首先,我们发起远程调用的时候,指定的是需要调用的服务名称,然后我们会调用 Ribbon 组

    2024年02月11日
    浏览(46)
  • k8s之service五种负载均衡byte的区别

    在 k8s 中, service 是一个固定接入层,客户端可以通过访问 service 的 ip 和端口访问到 service 关联的后端pod,这个 service 工作依赖于在 kubernetes 集群之上部署的一个附件,就是kubernetes 的 dns 服务 (不同 kubernetes 版本的 dns 默认使用的也是不一样的,1.11 之前的版本使用的是 ku

    2024年02月05日
    浏览(42)
  • LVS负载均衡(web网站负载均衡)

        一、概述         功能强大         转发策略比较多         适合大型的网络高可用      二、作用         使用keepalived解决lvs的单点故障高可用集群      三、环境         1.准备6台虚拟机,2台做LVS主备调度器,2台做web服务器,1台做存储,1台客户机验证

    2024年02月09日
    浏览(41)
  • 负载均衡策略 LVS

    (1) 概念: LB:负载均衡 (Load Balancing) 是一种分发网络流量的技术,LB 负载均衡的基本原理是将传入的网络流量分发到多个后端服务器,以确保这些服务器都承担相似的工作负载,从而避免某一台服务器过载而其他服务器处于空闲状态。 (2) 负载均衡产品分类: ① 软件负载均

    2024年02月08日
    浏览(44)
  • gateway网关负载均衡策略

    前言  之前作业是使用 nacos注册中心来搭建有一个微服务,消费者必然要用到gateway网关来操作路由,并且配置负载均衡策略。 搭建微服务-文章链接:快速搭建微服务-Nacos_一码超人的博客-CSDN博客_微服务搭建nacos  添加一个gateway模块  配置文件application.yml  访问服务:http:

    2024年02月12日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包