JAVA面试——负载均衡(一)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: JAVA面试——负载均衡

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备服务器的带

宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性

image.png

18.1.1.1. 四层负载均衡(目标地址和端口交换

主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择

的内部服务器。

以常见的 TCP 为例,负载均衡设备在接收到第一个来自客户端的 SYN 请求时,即通过上述方式选

择一个最佳的服务器,并对报文中目标 IP 地址进行修改(改为后端服务器 IP),直接转发给该服务

。TCP 的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类

似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在

转发报文的同时可能还会对报文原来的源地址进行修改。实现四层负载均衡的软件有:

F5:硬件负载均衡器,功能很好,但是成本很高。

lvs:重量级的四层负载软件。

nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活。

haproxy:模拟四层转发,较灵活。

18.1.1.2. 七层负载均衡(内容交换)

所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,

再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器

七层应用负载的好处,是使得整个网络更智能化。例如访问一个网站的用户流量,可以通过七层

的方式,将对图片类的请求转发到特定的图片服务器并可以使用缓存技术;将对文字类的请求可

以转发到特定的文字服务器并可以使用压缩技术。实现七层负载均衡的软件有:

haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;

nginx:只在 http 协议和 mail 协议上功能比较好,性能与 haproxy 差不多;

apache:功能较差

Mysql proxy:功能尚可。

18.1.2. 负载均衡算法/策略

18.1.2.1. 轮循均衡(Round Robin)

每一次来自网络的请求轮流分配给内部中的服务器,从 1 至 N 然后重新开始。此种均衡算法适合

于服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。

18.1.2.2. 权重轮循均衡(Weighted Round Robin)

根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请

求。例如:服务器 A 的权值被设计成 1,B 的权值是 3,C 的权值是 6,则服务器 A、B、C 将分

别接受到 10%、30%、60%的服务请求。此种均衡算法能确保高性能的服务器得到更多的使用

率,避免低性能的服务器负载过重。

18.1.2.3. 随机均衡(Random)

把来自网络的请求随机分配给内部中的多个服务器。

18.1.2.4. 权重随机均衡(Weighted Random)

此种均衡算法类似于权重轮循算法,不过在处理请求分担时是个随机选择的过程。

18.1.2.5. 响应速度均衡(Response Time 探测时间)

负载均衡设备对内部各服务器发出一个探测请求(例如 Ping),然后根据内部中各服务器对探测

请求的最快响应时间来决定哪一台服务器来响应客户端的服务请求。此种均衡算法能较好的反映

服务器的当前运行状态,但这最快响应时间仅仅指的是负载均衡设备与服务器间的最快响应时

间,而不是客户端与服务器间的最快响应时间。

18.1.2.6. 最少连接数均衡(Least Connection)

最少连接数均衡算法对内部中需负载的每一台服务器都有一个数据记录,记录当前该服务器正在

处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡

更加符合实际情况,负载更加均衡。此种均衡算法适合长时处理的请求服务,如 FTP。

18.1.2.7. 处理能力均衡(CPU、内存)

此种均衡算法将把服务请求分配给内部中处理负荷(根据服务器 CPU 型号、CPU 数量、内存大小

及当前连接数等换算而成)最轻的服务器,由于考虑到了内部服务器的处理能力及当前网络运行

状况,所以此种均衡算法相对来说更加精确,尤其适合运用到第七层(应用层)负载均衡的情况

下。

18.1.2.8. DNS 响应均衡(Flash DNS)

在此均衡算法下,分处在不同地理位置的负载均衡设备收到同一个客户端的域名解析请求,并在

同一时间内把此域名解析成各自相对应服务器的 IP 地址并返回给客户端,则客户端将以最先收到

的域名解析 IP 地址来继续请求服务,而忽略其它的 IP 地址响应。在种均衡策略适合应用在全局负

载均衡的情况下,对本地负载均衡是没有意义的。

18.1.2.9. 哈希算法

一致性哈希一致性 Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往

该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

18.1.2.10. IP 地址散列(保证客户端服务器对应关系稳定

通过管理发送方 IP 和目的地 IP 地址的散列,将来自同一发送方的分组(或发送至同一目的地的分

组)统一转发到相同服务器的算法。当客户端有一系列业务需要处理而必须和一个服务器反复通信

时,该算法能够以流(会话)为单位,保证来自相同客户端的通信能够一直在同一服务器中进行处

理。

18.1.2.11.URL 散列

通过管理客户端请求 URL 信息的散列,将发送至相同 URL 的请求转发至同一服务器的算法

18.1.3. LVS

18.1.3.1. LVS 原理

IPVS

LVS 的 IP 负载均衡技术是通过 IPVS 模块来实现的,IPVS 是 LVS 集群系统的核心软件,它的主要

作用是:安装在 Director Server 上,同时在 Director Server 上虚拟出一个 IP 地址,用户必须通

过这个虚拟的 IP 地址访问服务器。这个虚拟 IP 一般称为 LVS 的 VIP,即 Virtual IP。访问的请求

首先经过 VIP 到达负载调度器,然后由负载调度器从 Real Server 列表中选取一个服务节点响应用

户的请求。 在用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的 Real Server 节

点,而 Real Server 节点如何返回数据给用户,是 IPVS 实现的重点技术。

ipvs : 工作于内核空间,主要用于使用户定义的策略生效

ipvsadm : 工作于用户空间,主要用于用户定义和管理集群服务的工具

image.png


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
8天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
31 2
|
13天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
18天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
15天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
39 4
|
15天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
55 4
|
28天前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
54 5
|
27天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
20 1
|
1月前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
28 3
|
25天前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
15 0
|
5月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
122 2

热门文章

最新文章