聊聊Java中的负载均衡

引言

前几天在面试的时候被问到了负载均衡,因为只是简单的用过,所以就只说出了常见的负载均衡算法,以及SpringCloud的负载均衡组件,并没有深入进行了解,因此总结了下负载均衡。

什么是负载均衡

负载均衡是指将用户请求分摊到不同的服务器上去处理,以提高系统整体的并发处理能力以及可靠性,负载均衡由专门的软件或者硬件来完成,一般情况下,硬件的性能越好,软件的更便宜。

服务端负载均衡

服务端负载均衡主要应用在系统外部请求和网管之间,可以使用硬件和软件去实现。

硬件负载

如F5,A10,Array实现负载均衡 硬件的负载均衡的优势是性能很强且稳定,缺点是费钱。

软件负载均衡

常见的就是Nginx。 原理: 客户端将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外暴露的是反向代理服务器地址,隐藏了真实服务器 IP 地址。反向代理"代理"的是目标服务器,这一个过程对于客户端而言是透明的。Nginx 就是最常用的反向代理服务器,它可以将接收到的客户端请求以一定的规则(负载均衡策略)均匀地分配到这个服务器集群中所有的服务器上。

客户端负载均衡

客户端负载均衡主要应用于系统内部不同服务之间,可以使用现成的负载均衡组件实现。 在客户端负载均衡中,客户端自己维护一份服务器的地址列表,或者请求对应的注册中心,获取在线的服务列表,然后根据相应的负载均衡算法处理请求。 常见的负载均衡组件如RibbonSpring Cloud Load Balancer

负载均衡算法

  • 随机法

    如果没有配置权重的额话,所有服务器被访问到的概率都是相同的,如果配置权重的话,权重越高的服务器被访问的概率越高。未加权重的随机算法适合于服务器性能相近的集群,其中每个服务器承载相同的负载。加权随机算法适合于服务器性能不等的集群,权重的存在可以使请求分配更加合理化。不过,随机算法有一个比较明显的缺陷:部分机器在一段时间之内无法被随机到,毕竟是概率算法,就算是大家权重一样, 也可能会出现这种情况

  • 轮询法

    是挨个轮询服务器处理,也可以设置权重。如果没有配置权重的话,每个请求按时间顺序逐一分配到不同的服务器处理。如果配置权重的话,权重越高的服务器被访问的次数就越多。未加权重的轮询算法适合于服务器性能相近的集群,其中每个服务器承载相同的负载。加权轮询算法适合于服务器性能不等的集群,权重的存在可以使请求分配更加合理化。

  • 一致性Hash法

    相同参数的请求总是发到同一台服务器处理,比如同个 IP 的请求。

  • 最小连接法

当有新的请求出现时,遍历服务器节点列表并选取其中活动连接数最小的一台服务器来响应当前请求。活动连接数可以理解为当前正在处理的请求数。最小连接法可以尽可能最大地使请求分配更加合理化,提高服务器的利用率。不过,这种方法实现起来也最复杂,需要监控每一台服务器处理的请求连接数。

其他方法实现负载均衡

  1. DNS解析

    DNS解析实现负载均衡的原理:在DNS服务器中同一个主机记录配置多个IP地址,这些IP地址对应不同的服务器,当用户请求域名时,DNS服务器采用轮询的方式返回IP地址。

相关推荐
JiaWen技术圈6 分钟前
nginx 安全响应头 介绍
运维·nginx·安全
Don.TIk3 小时前
ChapterOne-搭建项目骨架
java·spring·spring cloud·mybatis
阿里云云原生4 小时前
从 Nginx 堆溢出看网关安全:为什么说“指令式配置”正在成为攻击面的温床?
nginx
m0_751018669 小时前
docker 安装 nginx
vue.js·nginx·docker
幽络源小助理10 小时前
PS网页版源码_在线Photoshop源码_Nginx免环境部署_支持PSD
nginx·ui·photoshop
林三的日常10 小时前
Nginx-Rift 漏洞
运维·nginx
摇滚侠11 小时前
SpringCloud 面试题 真正的 offer 偏方 Java 基础 Java 高级
java·spring·spring cloud
yqzyy13 小时前
C#如何优雅处理引用类型的深拷贝(十一)
java·网络·nginx
华万通信king13 小时前
腾讯云CLB负载均衡接入实战:高并发Web服务的稳定性配置
前端·负载均衡·腾讯云
沪漂阿龙14 小时前
Spring Cloud 面试题深度解析:微服务架构、注册中心、配置中心、Gateway、OpenFeign、负载均衡、熔断降级全攻略
spring cloud·微服务·架构