极智开发 | 讲解 Nginx 特性之二:负载均衡
Posted 极智视界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了极智开发 | 讲解 Nginx 特性之二:负载均衡相关的知识,希望对你有一定的参考价值。
欢迎关注我的公众号 [极智视界],获取我的更多笔记分享
大家好,我是极智视界,本文讲解一下 nginx 特性之二:负载均衡。
Nginx,也即 engine x,是一个高性能的 http 和 反向代理的 web 服务器,同时也提供了 IMAP / POP3 / SMTP 服务。Nginx 有三大特性:反向代理、负载均衡 和 动静分离。这里我们分三篇来分别进行讲解,这里是第二篇:负载均衡,要学习 反向代理 的同学可以移步 《极智开发 | 讲解 Nginx 特性之一:反向代理》。
文章目录
1. Nginx 负载均衡介绍
负载均衡 是应对 网站 Client 端高请求、调整 Server 端计算均衡的解决方案。在如今的电商、互联网场景下,用户数量十分巨大,高并发 无处不在,为了提高系统整体性能,一般都要用 集群 进行分布式部署,即 将同一个应用部署到多个服务器上,织成 计算集群,形成如下架构:
备注:虽然这里只画了 3个 Client & 3 个 Server,但是你完全可以想象成有很多很多 Client,还有不只 3 台 Server。
这个时候的 代理 (Proxy) 还是个 反向代理中间商,只不过这个 中间商 不只是简单的 请求 / 连接 Server 服务器,还可以 均衡 Server 服务器的计算承载 。
Nginx 服务器的负载均衡策略可以分为:内置策略 和 扩展策略 两大类,其中 内置策略主要包含轮询、加权轮询、IP Hash;而 扩展策略主要通过第三方模块实现,如 url hash、fair 等 。
拿 加权轮询 来说,这个时候可以引入一个 weight 的概念,对于计算能力富余一些的 Server 服务器可以把负载权重赋大一些,把计算能力捉襟一些的 Server 服务器的负载权重稍微调小一些,这样的架构差不多可以这么表现:
通过 weight 可以控制 负载均衡。
2. Nginx 负载均衡实践
还是来看 config/nginx.conf
:
Nginx 对于用户使用来说,我一直觉得是一个 挺简单的 东西,因为你只要 关注 / 修改 conf/nginx.conf
配置文件,就能满足大部分的应用需求。我们来看:
########################### 全局配置块 #########################
# nginx 服务器全局运行配置
# user nobody; # 配置运行 nginx 服务器的用户 (组)
worker_processes 1; # nginx 服务器并发处理服务的配置,值越大,可以支持的并发处理服务越多
########################### EVENTS配置块 #########################
# 配置 nginx 服务器与用户的网络连接
events
worker_connections 1024; # 配置可以同时支持的最大连接数
########################### HTTP配置块 #########################
# 配置代理、缓存、日志等绝大多数功能和第三方模块
http
###################### HTTP全局块 #########################
# 配置包括 文件引入、MIME-TYPE定义、日志定义、连接超时等
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# gzip on;
###################### HTTP SERVER块 #########################
# 配置HTTP连接虚拟主机
# 每个HTTP块可以有多个SERVER块,每个SERVER块就是一个虚拟主机
server
listen 88; # 自定义端口
server_name localhost;
location /
root ~/nginx/html/dist; # 实际写成绝对路径
index index.html index.htm;
try_files $uri $uri /index.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html
root html;
来看 Nginx 反向代理 使用 加权轮询 进行负载均衡 的实例:Client 端访问 www.test.com
,使用 Nginx 进行反向代理转发,同一个应用使用 tomcat 部署在三台服务器 (Server) 上,Nginx 需要根据 三台服务器 计算承载能力 赋 不同的权重。这个例子的 nginx.conf
如下:
# 负载均衡
upstream test
server 192.168.0.110:8081 weight=2;
server 192.168.0.111:8081 weight=3;
server 192.168.0.112:8081 weight=1;
server
listen 80;
server_name localhost;
location /
root html;
index index.html index.htm;
proxy_pass http://www.test.com; # 代理转发
解释一下,以上给 server 192.168.0.111:8081
赋了 权重3,给 server 192.168.0.110:8081
赋了 权重2 ,给 server 192.168.0.112:8081
赋了 权重1,这样相当于 如 前端来了 6 次请求,则会分配给 server 192.168.0.111:8081
3次,分配给 server 192.168.0.110:8081
2次,分配给 server 192.168.0.112:8081
1次,加起来就是 6 次,这样的话 就不是没做 负载均衡 前的 等概率访问了。
当然,这里也只是讲了 Nginx 中的 加权轮询 的例子,其他就先不多说了。
好了,以上分享了 讲解 Nginx 特性之二:负载均衡。希望我的分享能对你的学习有一点帮助。
【公众号传送】
扫描下方二维码即可关注我的微信公众号【极智视界】,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !
以上是关于极智开发 | 讲解 Nginx 特性之二:负载均衡的主要内容,如果未能解决你的问题,请参考以下文章
极智开发 | 讲解 React 组件三大属性之二:props