# 负载均衡模拟
## 课程设计目的
本文主要是针对使用反向代理作为负载均衡设备的情景进行研究。将反向代理放置在客户端和服务器集群之间,用户的请求都将由反向代理统一进行处理,而不直接与服务器交互,即采用反向代理透明处理负载的策略。本文的研究意义在于,其一为建立服务器集群减少成本的开支,在负载均衡的产品中,硬件产品的均衡效果是比较理想的,但是它的价格不菲,比较适合大型业务,对于一般的企业来说是不堪重负;其二是目前的软件产品中多数需要和后端服务器有比较大的耦合度,存在特定的交互协议,来获取服务器的负载情况,其三是对后端服务器保持的持久状态考虑不是很充分,处理过于简单。本文通过对反向代理和改进后的负载均衡调度算法以期在这三个问题上得到有效的解决方法。
## 课程设计任务
本文设计并使用Python语言实现了一个用来构建高并发、高可用、合作式的反向代理负载均衡模拟系统,该系统包括负载均衡服务器、多个模拟客户端、多个模拟服务器。实现了对多并发负载的动态合理的均衡。
本文的创新性主要有以下几点:
1. 利用Python语言搭建起集群的通信和信息分发系统,利用Python语言的丰富的多线程和网络编程库实现高并发的负载均衡程序。
2. 采用心跳包与服务器信息相结合的方式并采用UDP方式以减轻负载均衡器和服务器的处理压力,心跳包不但能够作为判断服务器存活的依据,而且能为动态均衡算法提供数据。
3. 考虑到动态负载均衡的实现,综合了易于实现而且性能优良的常见的负载均衡调度策略,提出以“单位时间任务的到达数/单位时间任务的完成数”、“CPU利用率*连接数”作为负载指标,并对负载均衡调度算法做了改进。
4. 使用代理服务器技术将请求均匀转发给多台内部Web服务器之一上,从而达到负载均衡的目的。可以将负载均衡和代理服务器的高速缓存技术结合在一起,提供有益的性能,具备额外的安全性,外部客户不能直接访问真实的服务器。并且实现起来可以实现较好的负载均衡策略,将负载可以非常均衡的分给内部服务器,不会出现负载集中到某个服务器的偶然现象。
## 负载均衡的设计
### 负载均衡系统的整体设计
本节结合的特点,论述了负载均衡系统的总体设计方案与步骤,简化了负载均衡系统模型,使系统的实现更加简洁明了。
负载均衡器的实现方式为:将网络服务的地址(如公网IP地址、TCP套接字等)部署在负载均衡器上,将负载均衡器作为网络服务的总入口,接收客户端的所有访问请求。负载均衡器受到用户的访问请求后,将访问请求按照一定的策略分发给某一台真实的服务器进行处理。真实服务器对访问请求处理后,将处理结果返回给负载均衡器,负载均衡器受到真实服务器的处理结果,将它返回给客户端。
下图3.1展示了一个负载均衡系统的组网结果,图中包含了4台客户端,1台负载均衡器,4台真实的计算节点服务器。公网IP配置在负载均衡器上,负载均衡器与计算节点服务器之间,则通过私网地址进行通讯。
![](https://www.writebug.com/myres/static/uploads/2022/11/2/a89af910d05e1991537ff7af4f46ac04.writebug)
图3.1负载均衡系统
图3.1仅仅描述了负载均衡器与计算节点服务器的关系,即一个负载均衡器对应着多个计算节点服务器,当然这是逻辑上的结构,在实际的应用中,负载均衡器可以有多个,这样还能避免单点失效,提高系统的可靠性。该系统运行着两个守护进程,中心节点与计算节点分别运行着一个守护进程,系统的结构拓扑如图3.2所示。
![](https://www.writebug.com/myres/static/uploads/2022/11/2/f3b1551f25054c93c46c0baec4011d68.writebug)
图3.2负载均衡系统结构拓扑
由上图可以看出,负载均衡器守护进程用来接受用户的各种请求,并调度作业,管理系统资源。它维护着整个系统的关键配置信息和两种队列:作业队列和服务器队列。作业队列存放着用户已提交的各个作业的信息.服务器队列存放各个服务器节点的资源信息。该守护进程还负责作业的调度和执行服务器的选取,根据一定的作业调度策略选取作业和服务器,将执行作业的命令发送给服务器守护进程。服务器守护进程用来接收中心节点的命令,还使用心跳包定期向负载均衡报告各服务器的负载信息。
要实现简单的负载均衡系统,必须有一定的模块支撑。系统整体模块图如3.3所示。负载均衡器的模块包括日志记录模块、服务器管理模块、服务器心跳包接收模块、任务接收转发调度模块。计算节点服务器模块包括节点CPU使用率获取模块、心跳包发送模块、任务接收返回模块、任务处理模块。客户端模块包括任务的选择模块、任务的发送模块。
![](https://www.writebug.com/myres/static/uploads/2022/11/2/777d3b59b486f104e3535b5eb113ff6d.writebug)
图3.3系统整体模块图
- 基于动态性能指标的负载均衡系统的设计
本文的动态性能指标是以“CPU使用率*连接数”作为节点负载大小度量来实现负载均衡调度。本节主要介绍以“CPU使用率*连接数”为负载指标的动态负载均衡系统的详细设计过程。
- 计算节点服务器的设计
计算节点服务器是真正对客户端任务请求进行响应的服务器,模块包括节点CPU使用率获取模块、心跳包发送模块、任务接收返回模块、任务处理模块。
- 节点CPU使用率获取模块设计
本文的动态性能指标是以“CPU使用率*连接数”作为节点负载大小度量来实现负载均衡调度。所以需要获得当前计算节点服务器的CPU使用率。
在linux系统下可以使用/proc/stat文件来计算cpu的利用率。这个文件包含了所有CPU活动的信息,所有值都是从系统启动开始累计到当前时刻,得到数据如图3.4所示。
![](https://www.writebug.com/myres/static/uploads/2022/11/2/a82786483c48896fb8e3a88bc95f2f71.writebug)
图3.4 获得CPU信息
参数使用的单位都是jiffies,jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数,在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间。
获取使用率的具体方法是:先在t1时刻读取文件内容,获得此时cpu的运行情况,然后等待一段时间在t2时刻再次读取文件内容,获取cpu的运行情况,然后根据两个时刻的数据通过以下方式计算cpu的利用率:
cpu usage = 100 – (idle2 -idle1)*100/(total2 – total1),
其中total = user + system + nice+ idle + iowait + irq + softirq。
参数描述如表3.1所示
| 参数 |描述 |
|----|----|
| user |从系统启动开始累计到当前时刻,用户态的CPU时间,不包含 nice值为负进程 |
| nice |从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间 |
| system |从系统启动开始累计到当前时刻,核心时间 |
| idle |从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间 |
| iowait |从系统启动开始累计到当前时刻,硬盘IO等待时间 |
| irq |从系统启动开始累计到当前时刻,硬中断时间 |
| softirq |从系统启动开始累计到当�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本文设计并使用Python语言实现了一个用来构建高并发、高可用、合作式的反向代理负载均衡模拟系统,该系统包括负载均衡服务器、多个模拟客户端、多个模拟服务器。实现了对多并发负载的动态合理的均衡。
资源推荐
资源详情
资源评论
收起资源包目录
100011147-基于 Python 实现负载均衡模拟.zip (12个子文件)
proc
LICENSE 1KB
client
Client.py 1KB
语言类综合项目实践报告.doc 2.82MB
balance
__init__.py 226B
Balance.py 9KB
server
Server.py 2KB
UDP_Server.py 702B
CpuUsage.py 1KB
README.md 31KB
log
task_log.txt 1024B
Server_log.txt 1024B
system_log.txt 1024B
共 12 条
- 1
资源评论
- m0_713082222023-06-04发现一个超赞的资源,赶紧学习起来,大家一起进步,支持!
神仙别闹
- 粉丝: 2676
- 资源: 7664
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功