程序员的nginx技能包(6)——负载均衡具体实现策略及场景

简介: 背景上篇讲了负载均衡详细的实现方法,其实已经基本够用了,但是还有一些更为复杂的负载均衡策略配置,今天结合使用场景介绍下。

轮询

轮询是nginx默认的负载均衡实现方式,此时会将没给请求按时间顺序分配到对应server,如下所示:


   upstream balance1{

       server 47.104.61.1;#tomcat1所在地址

       server 47.104.61.2;#tomcat2所在地址

   }


对服务器的请求会按顺序分配到47.104.61.1和47.104.61.2。


这种方式下,如果47.104.61.1挂掉了,没事,47.104.61.2还能提供服务。这个nginx能自动检测出。所谓的双机热备,这就是很好的实现方式。所以对应的架构可为:

image.png

权重

上面架构在一些公司就出现问题了,由于历史原因,tomcat1所在服务器性能强大,tomcat2所在服务器性能比较垃圾(内存低、带宽低、响应慢),这样tomcat1其实性能都没发挥出来,tomcat2都快要累死了。


这时候也不着急,配置下轮询权重就是了,如下所示,80%的请求由tomcat1处理,20%tomcat2处理,完美。


   upstream balance1{

       server 47.104.61.1 weight:8;#tomcat1所在地址

       server 47.104.61.2 weight:2;#tomcat2所在地址

   }

1

2

3

4

哈希

上面的架构还是有问题啊,如果是需要用户登录之后反复操作的系统,例如商城。


假如用户是在tomat1登录的,然后系统用session保存了登录用户的信息。


结果用户第二个请求发送到了tomcat2,此时悲剧了,tomcat2认为用户没登录。


没关系,nginx已经考了到了这种情况,直接使用哈希策略,此时nginx会自动识别访问者的ip,然后通过哈希算法分配一个固定的服务器给该访问者,所以对同一个用户来说,每次访问都是由一个服务器响应了。


配置如下:


   upstream balance1{

    ip_hash;#如此简单的配置就能产生重大作用

       server 47.104.61.1 weight:8;#tomcat1所在地址

       server 47.104.61.2 weight:2;#tomcat2所在地址

   }

1

2

3

4

5

后端无状态下负载均衡策略的使用

现在都讲究后端无状态,啥是无状态,简单理解就是后端没有session,用户的请求也不用每次都固定到后端一个服务器上。


那如何来识别用户是否登录呢。


此处举个简单的例子,假设咱们的系统是用户商城。


用户登录成功后,咱们生成一个UUID与用户编号一起存到数据库中,标志着会话开始。


用户在前端拿到UUID后,后续每次请求都携带UUID到达后端。


后端通过拦截器,看看UUID是否合法(数据库中存在且不超时),不合法的请求不响应即可。


当然在现实程序中,这种频繁访问数据的场景放到数据库中速度太慢,对数据库拖累严重。


所以可以放到缓存数据库如redis中,这样速度就大大加快了。


此时负载均衡策略的制定就很自由了,因为nginx重启非常迅速,后端接口又没有状态,我们可以通过监控看各个服务器的负载情况,然后动态的调整权重即可。


当所有服务器都不堪忍受的时候,加服务器,然后重新配置nginx即可,完全不会影响业务正常运作。

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
10月前
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
31136 66
如何保证分布式文件系统的数据一致性
|
11月前
|
前端开发 容器
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局(上)
HTML5+CSS3前端入门教程---从0开始通过一个商城实例手把手教你学习PC端和移动端页面开发第8章FlexBox布局
17588 10
|
10月前
|
人工智能 负载均衡 网络性能优化
灵骏可预期网络:Built for AI Infrastructure
通用人工智能离我们越来越近,全世界的关注和投入正在带来日新“周”异的变化。回顾人工智能的诞生和发展历程,人类计算能力的进步几乎牵动了每一次的重大技术突破,当前的大模型热潮更是如此,只是动辄千万亿参数级的模型体量,所需计算资源远超单颗芯片的上限,超大规模的计算集群成为支撑技术发展和应用创新的关键基础设施。面向智能:云基础设施网络技术面临新挑战如何突破单个芯片、单个服务器节点的算力上限,在超大规模情况
29927 6
灵骏可预期网络:Built for AI Infrastructure
|
10月前
|
设计模式 存储 监控
设计模式(C++版)
看懂UML类图和时序图30分钟学会UML类图设计原则单一职责原则定义:单一职责原则,所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。bad case:IPhone类承担了协议管理(Dial、HangUp)、数据传送(Chat)。good case:里式替换原则定义:里氏代换原则(Liskov 
35897 13
设计模式(C++版)
|
10月前
|
存储 编译器 C语言
抽丝剥茧C语言(初阶 下)(下)
抽丝剥茧C语言(初阶 下)
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
带你简单了解Chatgpt背后的秘密:大语言模型所需要条件(数据算法算力)以及其当前阶段的缺点局限性
24272 9
|
10月前
|
机器学习/深度学习 弹性计算 监控
重生之---我测阿里云U1实例(通用算力型)
阿里云产品全线降价的一力作,2023年4月阿里云推出新款通用算力型ECS云服务器Universal实例,该款服务器的真实表现如何?让我先测为敬!
36375 11
重生之---我测阿里云U1实例(通用算力型)
|
11月前
为笔记本更换固态硬盘的方法
本文介绍为笔记本电脑拆机、更换固态硬盘的具体方法~
17862 40
为笔记本更换固态硬盘的方法
|
10月前
|
SQL 存储 弹性计算
Redis性能高30%,阿里云倚天ECS性能摸底和迁移实践
Redis在倚天ECS环境下与同规格的基于 x86 的 ECS 实例相比,Redis 部署在基于 Yitian 710 的 ECS 上可获得高达 30% 的吞吐量优势。成本方面基于倚天710的G8y实例售价比G7实例低23%,总性价比提高50%;按照相同算法,相对G8a,性价比为1.4倍左右。
|
11月前
|
存储 算法 Java
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务
随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率,以保持稳定和可靠的运行。
29633 51