IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nginx保姆级教程(四)-就怕你还学不会-Nginx之负载均衡、限流熔断、限流熔断、动静分离 -> 正文阅读

[系统运维]Nginx保姆级教程(四)-就怕你还学不会-Nginx之负载均衡、限流熔断、限流熔断、动静分离

Nginx负载均衡介绍

  • 负载均衡的意思是在服务器集群中,需要有一台服务器作为调度者,客户端所有的请求都由调度者接收,调度者再根据每台服务器的负载情况,将请求分配给对应的服务器去处理;
  • 在这个过程中,调度者如何合理分配任务,保证所有服务器将性能充分发挥,从而保持服务器集群的整
    体性能最优,这就是负载均衡的问题了。

nginx负载均衡的方式

轮询

  • 轮询方式是Nginx默认的方式、所有请求按照时间分配到不同的服务上,如果服务挂了,可以自动提出。如果没挂,按照服务器配置的顺序,轮流将请求发送到这些服务器上。
upstream  dalaoyang-server {
       server    localhost:10001;
       server    localhost:10002;
}

权重

  • 制定每个服务的权重比例,weight和访问量成正比。
  • 通常用于后端服务器性能不统一,将性能好的服务器的权重设置高一点,来发挥服务器的最大性能。
  • 如下配置后,10002服务的访问比率是10001服务的两倍
upstream  dalaoyang-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

iphash

  • 每个请求按照ip的hash结果分配,经过处理,每个请求固定访问一个后端服务,如下配置(ip_hash可以与weight一起使用)
upstream  dalaoyang-server {
       ip_hash; 
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

最少连接

  • 将请求分配到连接数最少的服务上。
upstream  dalaoyang-server {
       least_conn;
       server    localhost:10001 ;
       server    localhost:10002 ;
}

fair

  • 后端服务器的响应时间来分配请求,响应时间短的优先分配。 需要插件来帮我们实现
upstream  dalaoyang-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
       fair;  
}

Nginx配置

以轮询为例,如下是nginx.conf完整代码。

worker_processes  1;

events {
    worker_connections  1024;
}


http {
   upstream  dalaoyang-server {
       server    localhost:10001;
       server    localhost:10002;
   }

   server {
       listen       10000;
       server_name  localhost;

       location / {
        proxy_pass http://dalaoyang-server;
        proxy_redirect default;
      }
    }
}

Nginx限流熔断

  • 作为优秀的负载均衡模块,目前是我工作中用到最多的。
  • 其实,该模块是提供了我们需要的后端限流功能的。通过官方文档介绍

令牌桶算法

在这里插入图片描述
算法思想:

  • 令牌以固定速率产生,并缓存到令牌桶中
  • 令牌桶放满时、多余的令牌被丢弃
  • 请求要消耗等比例的令牌才能被处理
  • 令牌不够时,请求被缓存(队列);

漏桶算法

在这里插入图片描述
算法思想是:

  • 请求从上方倒入水桶,从水桶下方流出
  • 来不及流出的请求存在水桶中,以固定速率流出
  • 水桶满后,请求溢出(丢弃)
  • 缓存请求、匀速处理、多余的请求直接丢弃。
    相比漏桶算法,令牌桶算法不同之处在于它不但有一只“桶”,还有个队列,这个桶是用来存放令牌的,队列才是用来存放请求的

Nginx按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值。

案例

  • Nginx中文网案例:https://www.nginx.cn/doc/standard/httplimitrequest.html
    https://www.nginx.cn/doc/standard/httplimitzone.html

通过查看Nginx官方文档:
1、limit_conn_zone
2、limit_req_zone
3、ngx_http_upstream_module
前两种只能对客户端(即单一ip限流),并且文档也很全。

limit_conn_zone

可以针对条件,进行会话的并发连接数控制。(例如:限制每个IP的并发连接数。)
nginx配置

http{
limit_conn_zone $binary_remote_addr zone=one:10m; 
	server { 
		......
		 limit_conn one 10; 
	 	......
  		}
 }
  • 其中“limit_conn one 10”既可以放在server层对整个server有效,也可以放在location中只对单独的
    location有效。
  • 该配置表明:客户端的并发连接数只能是10个

limit_req_zone

  • 指令
limit_req_zone $session_variable zone=name_of_zone:size rate=rate

示例1 :

limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;

示例2:

limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;

配置文件:

limit_req_zone  $binary_remote_addr  zone=one:10m   rate=1r/s;

 
    server {
        location /search/ {
            limit_req   zone=one  burst=120;
        }
  • 其中“limit_req zone=req_one burst=120”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效。
  • rate=1r/s的意思是每个地址每秒只能请求一次,也就是说令牌桶burst=120一共有120块令牌,并且每秒钟只新增1块令牌,

ngx_http_upstream_module

作为优秀的负载均衡模块,目前是我们工作中用到最多的。其实,该模块是提供了我们需要的后端限流 功能的。通过官方文档介绍,该模块有一个参数:max_conns可以对服务端进行限流

配置

upstream xxxx{ 
 	server 127.0.0.1:8080 max_conns=10;
 	server 127.0.0.1:8081 max_conns=10; 
 }

表示最大连接数是10个;

动静分离

  • Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
  • 动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对服务的动静分离:
  • 静态页面交给Nginx处理
  • 动态页面交给服务器或Apache处理。
  • 在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式。
  • 实现整个网站的动静分离,实现如下要求:
    1 前端Nginx收到静态请求,直接从NFS中返回给客户端。
    2 前端Nginx收到动态请求转交给通过FastCGI交给服务器处理。
    ----如果得到静态结果直接从NFS取出结果交给Nginx然后返回给客户端。
    ----如果需要数据处理服务器连接数据库后将结果返回给Nginx
    3 .前端Nginx收到图片请求以.jpg、.png、.gif等请求交给后端Images服务器处理
  location ~* \.(jpg|gif)$ {             # location匹配将图片交给Image处理
?     proxy_pass http://10.10.0.23:80;      # Image服务器要开启web服务
?    }
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-25 12:01:39  更:2021-07-25 12:02:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 20:28:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码