前端可以了解一下:nginx负载均衡

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 直接封面图可以发现:最左侧的便是客户机,中间的就是负载均衡的机器,最右侧的便是通过负载后真正访问的服务器,我这里只画了两台服务器,实际情况根据需求可能还会不断增加。

image.png


前言:大家好,我是 那个曾经的少年回来了。10年前我也曾经年轻过,如今已步入被淘汰的年龄,但如下幡然醒悟,所以活在当下,每天努力一点点,来看看2024年的时候自己会是什么样子吧,2024年的前端又会是什么样子,而2024年的中国乃至全球又会变成什么样子,如果你也有想法,那还不赶紧行动起来。期待是美好的,但是更重要的是要为美好而为之奋斗付诸于行动。


直接封面图可以发现:最左侧的便是客户机,中间的就是负载均衡的机器,最右侧的便是通过负载后真正访问的服务器,我这里只画了两台服务器,实际情况根据需求可能还会不断增加。


1、前端负载均衡实现


  • 先上一个前端版本,同一份打包编译后的文件,分别部署到one和two.


  • 因为我只有一台服务器,所以这里通过端口进行演示: one对应端口91,two对应端口92.


  • 通过upstream nginxlbdemo进行负载配置.


  • 最后通过proxy_pass反向代理 upstream.


  • 如果有修改nginx的配置文件,修改完毕后记得 nginx -s reload


nginx-lb.conf可以放到/etc/nginx/conf.d路径下


upstream nginxlbdemo{
    server 127.0.0.1:91;
    server 127.0.0.1:92;
}
server {
    listen 90;
    location / {
      proxy_pass http://nginxlbdemo;
    } 
}
server {
    listen 91;
    root /usr/local/aehyok/nginx-lb/one;
    index index.html index.htm;
    if ($request_method = 'OPTIONS') {
        return 204;
    }
    location / {
      try_files $uri $uri/ = 404;
    } 
}
server {
    listen 92;
    root /usr/local/aehyok/nginx-lb/two;
    index index.html index.htm;
    if ($request_method = 'OPTIONS') {
        return 204;
    }
    location / {
      try_files $uri $uri/ = 404;
    } 
}


部署完毕后,通过电脑查看,我没办法做测试,只能通过停掉91或者停掉92来访问90,都是没问题的。 那这里只好通过node开启后端服务来测试一下。


2、node后端负载均衡


下面的代码算算是模拟91和92两个端口,相当于两台服务器,拷贝到linux服务器上,通过 node index.js运行起来


const http = require("http");
const port1 = 91
const server1 = http
  .createServer(function (req, res) {
    console.log(`Request: ${req.url}--port ${port1}`);
    res.end(`hello world! - ${port1}`);
  })
  .listen(port1, "127.0.0.1");
server1.once("listening", () => {
  console.log(`Server http://127.0.0.1:${port1}`);
});
const port2 = 92
const server2 = http
  .createServer(function (req, res) {
    console.log(`Request: ${req.url}--port ${port2}`);
    res.end(`hello world! - ${port2}`);
  })
  .listen(port2, "127.0.0.1");
server2.once("listening", () => {
  console.log(`Server http://127.0.0.1:${port2}`);
});


然后重新配置nginx-lb.conf,然后  nginx -s reload


upstream nginxlbdemo{
    server 127.0.0.1:91;
    server 127.0.0.1:92;
}
server {
    listen 90;
    location / {
      proxy_pass http://nginxlbdemo;
    } 
}


然后通http://139.159.245.209:90 ,你可以不断的刷新,就可以看到node 后台的请求日志 91和92端口在不停的切换


image.png

image.png


3、负载均衡的分类


3.1、默认轮询


nginx默认就是轮询,其权重默认都是1,服务器请求的顺序:


  • 第1个请求 91端口
  • 第2个请求 92端口
  • 第3个请求 91端口
  • 第4个请求 92端口
  • 第5个请求 91端口
  • 第6个请求 92端口
  • 第7个请求 91端口
  • 第8个请求 92端口 ....


upstream nginxlbdemo{
    server 127.0.0.1:91; 
    server 127.0.0.1:92;  
}


3.2、 加权轮询


nginx根据配置的权重大小而分发给对应服务器对应权重 数量的其你,其权重默认都是1,服务器请求的顺序:


  • 第1个请求 91端口
  • 第2个请求 92端口
  • 第3个请求 92端口
  • 第4个请求 91端口
  • 第5个请求 92端口
  • 第6个请求 92端口
  • 第7个请求 91端口
  • 第8个请求 92端口
  • 第9个请求 92端口


upstream nginxlbdemo{
    server 127.0.0.1:91 weight=1;
    server 127.0.0.1:92 weight=2; 
}


3.3、 ip_hash


nginx 会让相同的客户端ip请求相同的服务器。


upstream nginxlbdemo{
    ip_hash;
    server 127.0.0.1:91;
    server 127.0.0.1:92; 
}


3.4、 热备


开始时负载均衡90只会访问91端口,如果91端口服务器发生故障,才会开启第二台服务器给提供服务。


upstream nginxlbdemo{
    ip_hash;
    server 127.0.0.1:91;
    server 127.0.0.1:92 backup; 
}


4、总结


nginx在后端非常的常见,但对于一向爱折腾的我有必要去学习一下。了解完以后。便可以发现,灰度发布其实就可以通过加权轮询来处理,当然nginx的体系还是非常庞大的继续学习吧。


我的个人博客:vue.tuokecat.com/blog


我的个人github:github.com/aehyok


我的前端项目:pnpm + monorepo + qiankun + vue3 + vite3 + 工具库、组件库 + 工程化 + 自动化


不断完善中,整体框架都有了


在线预览:vue.tuokecat.com


github源码:github.com/aehyok/vue-…

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
140 59
|
10天前
|
弹性计算 负载均衡 网络协议
ECS中实现nginx4层7层负载均衡和ALB/NLB原SLB负载均衡
通过本文的介绍,希望您能深入理解并掌握如何在ECS中实现Nginx四层和七层负载均衡,以及如何使用ALB和NLB进行高效的负载均衡配置,以提高系统的性能和可靠性。
50 9
|
1月前
|
缓存 负载均衡 算法
如何配置Nginx反向代理以实现负载均衡?
如何配置Nginx反向代理以实现负载均衡?
|
21天前
|
负载均衡 算法 应用服务中间件
Nginx的负载均衡
Nginx 是一款高性能的Web服务器与反向代理服务器,支持负载均衡功能,能有效提升系统性能与可靠性。其负载均衡策略包括基于轮询和权重的分配方法,以及IP哈希、最小连接数等算法,可根据实际需求灵活选择。
78 5
|
23天前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
43 3
|
2月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
184 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
1月前
|
负载均衡 算法 应用服务中间件
Nginx 常用的负载均衡算法
【10月更文挑战第22天】不同的负载均衡算法各有特点和适用场景。在实际应用中,需要根据具体的业务需求、服务器性能和网络环境等因素来选择合适的算法。
78 3
|
2月前
|
负载均衡 监控 应用服务中间件
除了 Nginx,还有以下一些常见的负载均衡工具
【10月更文挑战第17天】这些负载均衡工具各有特点和优势,在不同的应用场景中发挥着重要作用。选择合适的负载均衡工具需要综合考虑性能、功能、稳定性、成本等因素。
|
2月前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
268 7
|
2月前
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?