应用负载均衡基本原理解析(一)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:

负载均衡,这个词对现在的IT工程师来说已经不陌生了,随着各类大型网站的访问量节节高升,各种数据存放越来越集中,对服务器性能的要求也越来越高,这个时候,一个完善的应用负载均衡就显得尤为重要。也许很多IT工程师都已经配置过类似的设备,但是在配置过程中往往对一些细节不甚了了,所以也就不能很好的分析解决碰到的问题,这篇文章将从本质上分析一下应用负载的过程细节以及应用负载的重要组成部分及常见的一些问题。

       在谈应用负载之前,我们先来看下未使用负载分担的常规应用流程:

在上图中,源IP172.16.0.1client去访问目标IP10.0.0.1,目标端口为80server,整个应用流程分2个部分:

第一部分:1,2为请求从client到达server的部分,在常规流程中,请求经过三层交换机到达server1,2中源IP,源端口,目的IP,目的端口均未发生改变。

第二部分:3,4为应答从server返回clienet的部分,在常规流程中,应答经过三层交换机到达client3,4中源IP,源端口,目的IP,目的端口均未发生变化。

 

 在了解了常规应用流程以后,让我们假设一个场景,在该场景中,我们采用单臂方式旁路部署应用负载均衡设备,这个时候应用流程会如何改变呢?

 

 

 

     在上图中,172.16.0.1172.16.0.2两台client仍旧去访问10.0.0.1,但是这个时候的10.0.0.1只是一个虚拟IP,而其后面有10.0.0.210.0.0.3两台真实的server。上图所示的应用负载分担流程中,和常规应用流程不同的是,分为了4个部分:

     第一部分:1,2为请求从client发到应用负载分担设备上的过程,这个过程中源IP,源端口,目标IP,目标端口无变化

     第二部分:3为请求达到应用负载分担设备以后被进行目标地址转换和源地址转换以后发往选择的server的过程,这个过程中,源IP,源端口,目标IP均发生了变化(在该场景中,目标端口未发生变化,但是在实际场景中,是否发生变化视应用需求而定)

     第三部分:4为应答从server返回应用负载设备的过程

     第四部分:5,6为应答达到应用负载设备以后,将3步骤中被修改的源IP,源端口,目标IP改回来以后,返回到client的过程,这个过程中,源IP,源端口,目标IP均发生了变化。   

     我们注意一下上图中3对应的过程,请求的源IP已经发生改变,从172.16.0.1(或者172.16.0.2)变为了10.0.0.100,该改变是在旁路模式下应用正常工作的需要。如果不进行源IP的改变会怎么样呢? 

我们来看下面的图:

     在上图中我们可以发现,如果只进行目标IP和目标端口的转换,而不进行源IP的转换,那当上图中3步骤中请求到达真实server 10.0.0.2:80的时候,源IP还是172.16.0.1,所以10.0.0.2就会直接把应答发回给client,而不会返回给应用负载设备,这个时候连接是无法建立的。所以在旁路模式下,到达应用负载设备的请求,除了进行目标IP、目标端口转换,还需要进行源IP的转换,这样,服务器的应答才能返回给应用负载设备,从而应用负载设备才能将转发请求时候更改的相关参数再改回来,如此才能让clientserver建立一个完成的连接,完成一个完整的负载分发过程。(旁路模式下,除了让应用负载设备进行请求的源IP转换这个方式外,如果clientserver不在同一个网段,则还有另外一种处理,既将server的网关指向应用负载设备,这种方式的优点在于应用负载设备上不需要进行请求的源地址转换,所以server上可以看到请求的真实IP地址,有些应用有这个需求;而缺点在于server上所有走向不同网段的流量,不管是主动还是被动,不管是相关应用流量还是无关应用流量都会发往应用负载设备,从而导致无关流量占用了应用负载设备的宝贵资源。

 

     经过对以上2个应用过程的分析,我们可以对应用负载分担的本质做出如下总结:

     对于到达某个特定的IP及端口的请求进行处理,将该请求的目标IP(和端口)进行目标地址转换(或端口转换)以后发往转换后的IP(和端口),并在需要的时候进行请求的源IP转换。

     看起来很简单吧,但是难道仅仅如此吗?

 

     (待续)

 


本文转自 virtualadc 51CTO博客,原文链接:http://blog.51cto.com/virtualadc/648258

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
20天前
|
存储 缓存 安全
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
掌握Go语言:Go语言中的字典魔法,高效数据检索与应用实例解析(18)
|
23天前
|
存储 缓存 算法
Python中collections模块的deque双端队列:深入解析与应用
在Python的`collections`模块中,`deque`(双端队列)是一个线程安全、快速添加和删除元素的双端队列数据类型。它支持从队列的两端添加和弹出元素,提供了比列表更高的效率,特别是在处理大型数据集时。本文将详细解析`deque`的原理、使用方法以及它在各种场景中的应用。
|
1天前
|
SQL 分布式计算 资源调度
一文解析 ODPS SQL 任务优化方法原理
本文重点尝试从ODPS SQL的逻辑执行计划和Logview中的执行计划出发,分析日常数据研发过程中各种优化方法背后的原理,覆盖了部分调优方法的分析,从知道怎么优化,到为什么这样优化,以及还能怎样优化。
|
1天前
|
Java
并发编程之线程池的底层原理的详细解析
并发编程之线程池的底层原理的详细解析
8 0
|
1天前
|
Java
并发编程之线程池的应用以及一些小细节的详细解析
并发编程之线程池的应用以及一些小细节的详细解析
11 0
|
1天前
|
JSON Java Maven
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
5 0
Javaweb之SpringBootWeb案例之 SpringBoot原理的详细解析
|
1天前
|
前端开发 JavaScript 编译器
深入解析JavaScript中的异步编程:Promises与async/await的使用与原理
【4月更文挑战第22天】本文深入解析JavaScript异步编程,重点讨论Promises和async/await。Promises用于管理异步操作,有pending、fulfilled和rejected三种状态。通过.then()和.catch()处理结果,但可能导致回调地狱。async/await是ES2017的语法糖,使异步编程更直观,类似同步代码,通过事件循环和微任务队列实现。两者各有优势,适用于不同场景,能有效提升代码可读性和维护性。
|
6天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
10天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
11天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
33 0

推荐镜像

更多