程序员的nginx技能包(5)——负载均衡,高大上架构的起源

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 背景不管是否很大型的系统,采用负载均衡的意义都是相当滴重要。

如果是大型系统,毫无疑问当系统负载能力达到一个服务所能承受的极限时,用多个服务来分摊用户请求的压力是非常合理的想法。这就好比汽车站刚开始只有一辆汽车,当人实在是太多时,最简单拓展运输能力的方式就是再来一辆汽车。


如果是小型系统,负载均衡也是相当重要,最基本的需求,当你的代码需要升级时,要求系统运行不能停止,如果只有一个服务在跑,那就没办法了。但是如果有负载均衡,完全可以在负载比较低时,一台一台的更新。


综上所述,无论你是大神架构师,还是虾米程序员,都应该对负载均衡有些了解。


这其中,nginx实现负载均衡那是相当简单,而且高效,厉害了。


原理

原理灰常简单,nginx监听一个80端口,然后将请求转发到不同服务去处理即可。


注意此处不同服务可能是一台服务器上的不同端口的web服务,也可以是不同服务器上的各个端口的web服务,都可以。


原理如此简单,实现也很容易,详细说下。


搭建实践环境

无非是安装一个nginx,用来监听请求,安装两个tomcat,用来测试是否实现了负载均衡。


具体安装nginx和两个tomcat的过程此处不再一一细讲,前面的章节说的很明白了。


我们要的效果是nginx在80端口如图:

image.png

image.png

配置nginx负载均衡

很简单,如下,我感觉都无需解释了:


首先nginx server监听80端口,然后将请求转发到mytomcats。


mytomcats这个upstream有两个权重一样的服务器负责接收请求,也就是如果有100个请求,那这老哥俩一人500个请求呗。这哥俩就是8012端口和8022端口的服务。


当然如果你想负载均衡到别的机器上,可以将127.0.0.1改成别的IP或者域名。

image.png

重新加载下nginx,命令为:nginx -s reload,然后看效果,就会发现请求同一个地址,有时候是tomcat1响应,有时候是tomcat2响应。当然不是严格的第一次tomcat1响应,第二次就tomcat2响应,毕竟咱们的请求来自同一台计算机,nginx肯定有比较复杂的考量以提高效率,比如IP相似的机器的请求优先安排同一台服务器响应。

image.png

总结与展望

本篇简明但不算扼要的说了nginx如何实现负载均衡,当然nginx负载均衡有很多策略,单独说策略没有意思,下篇还是结合实际场景说下如何来设置具体策略。


项目源码、系列教程及更多内容,请访问熊猫编程网

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
19天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
24 4
|
20天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
30 3
|
5月前
|
Ubuntu 前端开发 JavaScript
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
技术笔记:Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
|
1月前
|
负载均衡 监控 算法
每个程序员都应该知道的 6 种负载均衡算法
每个程序员都应该知道的 6 种负载均衡算法
95 2
|
3月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
58 2
|
3月前
|
消息中间件 负载均衡 Kafka
Kafka 实现负载均衡与故障转移:深入分析 Kafka 的架构特点与实践
【8月更文挑战第24天】Apache Kafka是一款专为实时数据处理和流传输设计的高性能消息系统。其核心设计注重高吞吐量、低延迟与可扩展性,并具备出色的容错能力。Kafka采用分布式日志概念,通过数据分区及副本机制确保数据可靠性和持久性。系统包含Producer(消息生产者)、Consumer(消息消费者)和Broker(消息服务器)三大组件。Kafka利用独特的分区机制实现负载均衡,每个Topic可以被划分为多个分区,每个分区可以被复制到多个Broker上,确保数据的高可用性和可靠性。
69 2
|
3月前
|
应用服务中间件 Linux nginx
在CentOS上使用源码包安装Nginx、以及手动启动Nginx的步骤过程
这篇文章介绍了在CentOS系统上使用Nginx源码包进行安装和配置的详细步骤,包括源码包的获取、解压、配置、编译、安装、启动验证以及注意事项。
361 0
在CentOS上使用源码包安装Nginx、以及手动启动Nginx的步骤过程
|
4月前
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
82 1
|
4月前
|
运维 负载均衡 算法
SLB与NGINX的异同是什么
SLB与NGINX的异同是什么
434 2
|
4月前
|
负载均衡 监控 Kubernetes
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。
Service Mesh 是一种用于处理服务间通信的基础设施层,它通常与微服务架构一起使用,以提供诸如服务发现、负载均衡、熔断、监控、追踪和安全性等功能。