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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 背景上篇讲了负载均衡详细的实现方法,其实已经基本够用了,但是还有一些更为复杂的负载均衡策略配置,今天结合使用场景介绍下。

轮询

轮询是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即可,完全不会影响业务正常运作。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
4月前
|
缓存 负载均衡 网络协议
电商API接口性能优化技术揭秘:缓存策略与负载均衡详解
电商API接口性能优化是提升系统稳定性和用户体验的关键。本文聚焦缓存策略与负载均衡两大核心,详解其在电商业务中的实践。缓存策略涵盖本地、分布式及CDN缓存,通过全量或部分缓存设计和一致性维护,减少后端压力;负载均衡则利用反向代理、DNS轮询等技术,结合动态调整与冗余部署,提高吞吐量与可用性。文中引用大型及跨境电商平台案例,展示优化效果,强调持续监控与迭代的重要性,为电商企业提供了切实可行的性能优化路径。
|
5月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
159 21
|
4月前
|
人工智能 负载均衡 Cloud Native
云原生之负载均衡策略
ai必学之负载均衡 @[TOC]轮询处理;weight权重;ip_hash
|
8月前
|
运维 负载均衡 测试技术
软件负载均衡和硬件负载均衡分别适合哪些场景?
软件负载均衡和硬件负载均衡分别适合哪些场景?
227 55
|
9月前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
1874 11
架构学习:7种负载均衡算法策略
|
9月前
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
410 9
SpringBoot整合XXL-JOB【04】-  以GLUE模式运行与执行器负载均衡策略
|
10月前
|
安全 测试技术 网络安全
slb模拟故障场景
slb模拟故障场景
139 7
|
10月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
610 3
|
12月前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
969 7
|
10月前
|
负载均衡 Java Nacos
常见的Ribbon/Spring LoadBalancer的负载均衡策略
自SpringCloud 2020版起,Ribbon被弃用,转而使用Spring Cloud LoadBalancer。Ribbon支持轮询、随机、加权响应时间和重试等负载均衡策略;而Spring Cloud LoadBalancer则提供轮询、随机及Nacos负载均衡策略,基于Reactor实现,更高效灵活。
633 0