当前位置: 首页 > 编程日记 > 正文

基于第四层交换技术的负载均衡

摘 要 本文介绍了第四层交换技术的概念,技术原理以及如何使用第四层交换技术实现远程教育系统中的应用服务器负载均衡。

作者:

凌仲权,现就读于西安电子科技大学,2001级硕士研究生。主要的科研方向为计算机网络技术研究以及远程教育的相关技术。

丁振国,西安电子科技大学远程教育学院院长,西安电子科技大学电子商务研究所副所长,中国工程技术信息网副总工程师。主要从事计算机网络与信息处理技术方面的研究与教学工作,电子商务中的网络技术研究等工作。

1 引言

当今世界已经步入信息时代,随着社会的迅速发展以及人们对网络应用需求的不断提高,对网络速度及带宽的要求不断上升。正是在这样的发展形势下,许多高速交换的新技术不断涌现。第二层交换实现局域网内主机间的快速信息交流,第三层交换可以说是交换技术与路由技术的完美结合,而下文要详细介绍的第四层交换技术则可以为网络应用资源提供最优分配,实现应用服务的负载均衡。

2 第四层交换技术

2.1 简述

第四层交换的一个简单定义是:它是一种功能,它决定传输不仅仅依据MAC地址(第二层网桥)或源/目标IP地址(第三层路由),而且依据TCP/UDP(第四层)应用端口号。第四层交换功能就像是虚拟IP,指向物理服务器。它传输的业务服从的协议多种多样,有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基础上,需要复杂的载量平衡算法。在IP世界,业务类型由终端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同决定。

在第四层交换中为每个供搜寻使用的服务器组设立虚拟IP地址(VIP),每组服务器支持某种应用。在域名服务器(DNS)中存储的每个应用服务器地址是VIP,而不是真实的服务器地址。

当某用户申请应用时,一个带有目标服务器组的VIP连接请求(例如一个TCP SYN包)发给服务器交换机。服务器交换机在组中选取最好的服务器,将终端地址中的VIP用实际服务器的IP取代,并将连接请求传给服务器。这样,同一区间所有的包由服务器交换机进行映射,在用户和同一服务器间进行传输。

2.2 技术原理

OSI模型的第四层是传输层。传输层负责端对端通信,即在网络源和目标系统之间协调通信。在IP协议栈中这是TCP(传输控制协议)和UDP(用户数据报协议)所在的协议层。

在第四层中,TCP和UDP标题包含端口号(port number),它们可以唯一区分每个数据包包含哪些应用协议(例如HTTP、FTP等)。端点系统利用这种信息来区分包中的数据,尤其是端口号使一个接收端计算机系统能够确定它所收到的IP包类型,并把它交给合适的高层软件。端口号和设备IP地址的组合通常称作“插口(socket)”。分配端口号的最近清单可以在RFC 1700“Assigned Numbers”上找到。

TCP/UDP端口号提供的附加信息可以为网络交换机所利用,这是第四层交换的基础。具有第四层功能的交换机能够起到与服务器相连接的“虚拟IP”(VIP)前端的作用。每台服务器和支持单一或通用应用的服务器组都配置一个VIP地址。这个VIP地址被发送出去并在域名系统上注册。

在发出一个服务请求时,第四层交换机通过判定TCP开始,来识别一次会话的开始。然后它利用复杂的算法来确定处理这个请求的最佳服务器。一旦做出这种决定,交换机就将会话与一个具体的IP地址联系在一起,并用该服务器真正的IP地址来代替服务器上的VIP地址。

每台第四层交换机都保存一个与被选择的服务器相配的源IP地址以及源TCP 端口相关联的连接表。然后第四层交换机向这台服务器转发连接请求。所有后续包在客户机与服务器之间重新影射和转发,直到交换机发现会话为止。

在使用第四层交换的情况下,接入可以与真正的服务器连接在一起来满足用户制定的规则,诸如使每台服务器上有相等数量的接入或根据不同服务器的容量来分配传输流。

2.3 具有第四层交换能力的产品

目前Berkeley Networks公司、Alteon Networks公司等公司都有比较成熟的第四层交换产品和模块推出。Berkeley Networks公司的exponeNT e4和Alteon Networks公司的ACEswith 180两款第四层交换产品具有突出的性能和灵活性,能够比第二层和第三层交换机做出更智能的转发决定。由于把包头查询的代码嵌入到交换机中的专用集成电路(ASIC)中去实现上述功能,几乎不会造成任何延时。这两家厂商的交换机都能实现10M、100M和吉比特以太网功能,但是Berkeley的交换机是设计用于企业应用的,而Alteon交换机则是用于拥有大量Web或FTP服务器的机构的。Alteon的第四层交换技术能通过对服务器的性能和运行状况的实时监测,根据不同服务器的健康状况,将来访的数据流量以经济高效的方式分配到合适的服务器上。同时,Alteon的第四层交换技术具有Web高速缓存重定向功能,能把指定发往远程Internet主机的HTTP通信拦截,并将这些通信重新定向到本地的高速缓存服务器上,从而大大加快了访问Internet的速度,并节省了大量宝贵的广域网带宽。而且这对于用户和信息提供者来说是完全透明的,不需要用户和信息提供者做任何的设置。

Cabletron 公司的SmartSwitch Router和Torrent Networking Technologies公司推出的IP9000 吉比特 Router 也是具有第四层交换功能的产品。其中SmartSwitch Router可以实现骨干网从常规第三层交换向全面的第三层、第四层交换功能的升级转换,其独特的广域网集成能力以及基于第四层交换的访问控制能力对于网络数据传输安全、有序地进行发挥了关键作用。此外,Cabletron SmartSwitch Router基于第四层交换的QoS功能为特定业务应用数据交换提供了不同级别的优先处理能力。

3 使用第四层交换技术实现服务器负载均衡

以下设计来源于某高校网络教育学院网络中心的实际应用。通过Alteon的第四层交换机为远程教学提供各种应用服务的负载均衡,提高网络的整体性能。

学生通过互联网进行远程交互学习。网络学院的网络中心配制了三组服务器,每组服务器包括若干台具备相同内容的服务器。其中有Web服务器组,教学服务器组,DATA(数据库)服务器组。其中每组服务器组都配制一个虚拟IP。学生通过互联网访问这些应用服务器。每一组服务器都连接到Alteon的第四层交换机上,在交换机上实现应用服务的负载均衡。

Alteon的第四层交换机监测服务器的可用性,包括物理连接、服务器主机、服务应用本身的健康状况,当发现某台服务器不能提供相应的服务时,交换机自动把该应用请求分配到好的其他服务器。Alteon第四层交换机还可以通过设置每台服务器能承受的最大会话数,设置溢出服务器、备份服务器等方法来进一步保证服务器系统的可靠性。服务器在同一局域网内实现负载均衡时采用多种负载均衡算法,包括Least Connection、Round Robin、MinMiss和散列算法,以及对算法的加权等等。当服务器不在同一局域网内时,利用Alteon交换机的GlobalLoad Balance技术来实现负载分担的合理性问题。

假设Web服务器组有三台内容相同的Web服务器S1、S2、S3。其中S1的真实IP是10.1.1.1,S2的真实IP是10.1.1.2,S3的真实IP是10.1.1.3。这个Web服务器组的虚拟IP为61.134.38.5。

当同时有多个学生访问我们的Web服务,Alteon第四层交换机接受到多个并发请求访问61.134.38.5上的Web服务。此时,Alteon第四层交换机将会根据一定的算法将这些请求合理地分配给S1、S2、S3实现动态的负载均衡。

以上简单介绍了第四层交换技术在服务器负载均衡方面的应用。然而第四层交换除了负载均衡功能外还支持其他功能,如基于应用类型和用户ID的传输流控制功能。采用多级排队技术,第四层交换机可以根据应用来标记传输流以及为传输流分配优先级。此外,第四层交换机直接安放在服务器前端,它了解应用会话内容和用户权限,因而使它成为了防止非授权访问服务器的理想平台。

4 总结

随着网络信息系统由小型到中型到大型的发展趋势,交换技术也由原来最初的基于MAC地址的交换,发展到基于IP地址的交换,进一步发展到基于IP+端口的交换,如今也提出了第七层交换(基于内容的交换)。本文对第四层交换技术作了一个比较全面的介绍,并将该技术应用到教育系统上实现了服务器的负载均衡。可见,网络交换技术的不断发展使得原来由基于数据的交换变成了基于应用的交换,不仅提高了网络的访问速度,而且不断地优化了网络的整体性能。

相关文章:

開始Unity3D的学习之旅

前言:这个系列的文章纯属对自己学习的整理,非高手之作。但确实的记载了我作为一个没接触过3D游戏编程的大学生的心路历程。争取每周整理一次吧。之所以会開始学Unity3D,最基本的原因是由于在快放暑假的时候,我找了一家做iPhone游戏…

linux 定时任务crond

1.定时任务crond 1.1 crond是什么 crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。特殊需求:(秒级别)crond服务就无法搞定了,一般工作中写脚本守护进程执行。 为什么要使用crond定时任务: linux系…

用C#去除代码的SourceSafe管理

经常看一些的程序,有些一个解决方案带有多个项目,由于代码比较多,多人开发,所以好多vs.net下的工程是用source safe进行版本控制的。而用source safe进行版本控制需要局域网路径共享,因此好多项目换一台机器打开会出现…

用jarsigner对android apk进行签名

以前对apk重新打包签名都是用的apktool里面的Auto-sign 工具,后来发现有时候利用该工具对一些apk签名会失败,所以后来就使用 jarsigner这个工具,现记录一下这个工具的使用方法1 首先要生成一个自己的keyD:\>keytool -genkey -alias myKey…

利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上的疏散耦合,而非…

C#操作消息队列

public class QueueManage { /// /// 发送对象到队列中 /// /// 队列名称,因为队列名称在一个应用中应该不改变的,所以大家最好写在配置文件中 /// 要发出去的对象 public static void SendQueue(string QueuePath,MyBase.SmsQueue sq) { Syste…

2021《程序员》数字科技企业研发实力榜TOP50

互联网的盛行带来了众多数字科技企业的崛起,但如何客观地衡量每家企业的技术实力?研发投入、研发人才的数量和人才密度是关键指标。2021年5月,《程序员》根据相关企业披露的财报数据及市场调研数据,整理发布“2021数字科技企业研发实力榜TOP5…

eclipse中java项目转换为web项目

2019独角兽企业重金招聘Python工程师标准>>> 经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目,有过很多次经历,今天也有同事遇到类似问题,就把这个解决方法记下来吧&#x…

MySQL · 引擎介绍 · Sphinx源码剖析(三)

在本节中我会介绍Sphinx在构建索引之前做的一些事情,主要是从mysql拉取数据保存,然后分词排序保存到内存等等一系列的操作。下面是几个相关指令 sql_query \SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, \title, content \FROM doc…

C#给图片添加版权信息

现在越来越多的网站都喜欢将用户上传的图片加上网站的版权信息,不要以为那是用photoshop之类的图片处理软件加上去的,其实我们只要写一小段代码,就可以实现这个功能。 添加版权信息的原理其实挺简单:通过图片获取Graphics类的对象…

Python + 爬虫:可视化大屏帮你选粽子

来源 | 数据分析与统计学之美头图 | 下载于ICphoto端午节快要到了,旅游?回家?拜访亲友?少不了要带上粽子。那么,选择什么牌子的粽子呢?选择什么口味的粽子呢?选择什么价格区间呢?今年…

adviser vs mentor

研究生或博士生提到自己导师的时候是说adviser呢?还是mentor呢? 至少我认识一个Berkeley的博士是说adviser的。 另外,我的导师也是说adviser。 那还是说adviser吧……

T extends Serializable这是什么意思呢?看明白这个,你的问题就自然而然的明白了!...

1.转自:https://blog.csdn.net/liwenqiang758/article/details/8131185 自己动手丰衣足食!!! 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 这种参数类型可以用在类、接口和方法的创建中&a…

C#中switch语句注意

大家肯定对switch语句并不陌生,它能够让程序根据控制表达式的值,从多个动作中作出选择(从逻辑过程看,和多分支语句if-else有些相似)。在C和java中也有这一语句,不过在C#中,这一语句则有了些变化。先看下边一…

对Cost (%CPU) 粗略的理解

今天研究执行计划,看到执行计划里面有Cost (%CPU),我这边研究了一把,不知道对与否,拿出来晒晒在Oracle 10g中,Oracle 把CPU的cost也统计在执行计划中去了, 这和以前的8i,9i(9i其实已经开始了)有很大的不同。…

后疫情时代,RTC期待新的场景大爆发

整理 | 寇雪芹头图 | 下载于ICphoto出品 | AI 科技大本营(ID:rgznai100) 过去的一年中,新冠疫情悄然改变了社会发展和人们的生活,也助推了实时音视频(Real-Time Communication)技术的落地应用,数…

JS-DOM-元素节点

查看元素节点: 1、getElementById():通过 id 取到唯一节点;如果 id 重名,只能取到第一个 getElementByName(): 通过name属性 getElementByTagName(): 通过标签名 getElementByClassName(): 通过class名 获取元素节点时,一定要注意:获取节点的语句,必须在 DOM 渲染完成之后执行。…

现代软件工程 第十章 【典型用户和场景】 练习与讨论

1. 讨论:下面的老板犯了什么错误? 只看用户的表面语言或行动还是不够的。我们还要找到用户语言行动背后的动机! (图像来源: http://www.weibo.com/funnyshoelace) 2. 是否要文档 有人说,我们敏捷的团队,就喜欢直接的面对面的交流&#xff0…

赠书 | 读懂生成对抗神经网络 GAN,看这文就够了

生成对抗神经网络(Generative Adversarial Nets,GAN)是一种深度学习的框架,它是通过一个相互对抗的过程来完成模型训练的。典型的GAN包含两个部分,一个是生成模型(Generative Model,简称G&#…

把Doc文档转换成rtf格式

先在项目引用里添加上对Microsoft Word 9.0 object library的引用。 using System; namespace DocConvert { class DoctoRtf { static void Main() { //创建一个word的实例 Word.Application newApp new Word.Application(); // 指定源文件和目标文件 object Source&quo…

中国书法的造型元素与原理 刘彦湖

为什么80%的码农都做不了架构师?>>> --------------------------------------------------------------------------------中国书法的造型元素与原理 刘彦湖 中国书法是用最基本的元素遵从中国人特有的形式原则建构起来的大厦。 对于元素及其品质的认…

融云任杰:强互动,RTC 下一个“爆点”场景 | 拟合

从无序中寻找踪迹,从眼前事探索未来。2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

推荐一个个人感觉比较有吸引力的网站

2019独角兽企业重金招聘Python工程师标准>>> 廖雪峰的官方网站 转载于:https://my.oschina.net/AaronCN/blog/294293

C# 2进制、8进制、10进制、16进制...各种进制间的轻松转换

在.NET Framework中,System.Convert类中提供了较为全面的各种类型、数值之间的转换功能。其中的两个方法可以轻松的实现各种进制的数值间的转换: Convert.ToInt32(string value, int fromBase): 可以把不同进制数值的字符串转换为数字&#x…

solrj操作单机solr

2019独角兽企业重金招聘Python工程师标准>>> 在目前的生产过程中全文检索技术应用越来越广,其中涌现了一批非常好得开源搜索引擎框架,如solr,elasticsearch等等。其中我工作使用最多的是solr,并在此对之前工作做一个总结。 solr的…

基于微软开源深度学习算法,用 Python 实现图像和视频修复

‍‍作者 | 李秋键编辑 | 夕颜出品 | AI科技大本营(ID:rgznai100)图像修复是计算机视觉领域的一个重要任务,在数字艺术品修复、公安刑侦面部修复等种种实际场景中被广泛应用。图像修复的核心挑战在于为缺失区域合成视觉逼真和语义合理的像素&…

C#实现光盘做启动盘

一 :编程思想 1、创建启动盘 插入要创建的启动盘,程序自动检测光驱中光盘,利用WMI(Windows管理架构:Windows Management Instrumentation)读取该光盘的序列号(具有唯一性)&#xf…

为云服务立规矩——首批可信云服务认证名单公布

俗话说,没有规矩不成方圆。在云服务蓬勃发展的今天,无论从规范行业发展,还是为用户提供保障,推动政府云服务采购的角度来说,云服务市场都需要立规矩。7月15日至16日,以“可信中国云,未来新生态”…

Java:多个文档合并输出到一个文档

多个文档合并输出到一个文档 方法:Java NIO package First;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; import java.nio.channels.WritableByteChannel;public class Test {pu…