各位前辈,我一枚在校自学java的学生,没有比较专业的老师可以交流,最近遇到个瓶颈问题,希望得到指教。
最近参加了个比赛,题目就一句话,设计一个
简单实现web负载均衡服务器,最好是七层负载均衡。在做之前我完全不懂,一顿查资料。从什么是负载均衡,到什么是七层,什么http重定向方式、反向代理方式等等。最终我对这个题目的理解是:用java的做这么一个小软件,通过配置,建立一个内部服务器集群,这个软件绑定某个端口。因为是七层(我理解的是http协议的层次上),这个小软件利用
NIO读取io数据,把client的http请求处理后,根据配置及一些算法
把请求转发到某个服务器上,再收到该服务器的http响应,再把这个
响应转发给clinet(这是反向代理的意思吗??我是这么理解的)
最终实现的,对于客户端访问一个web项目(向这个小软件的ip+端口访问),我可以通过配置,根据client的ip或是http请求头里的内容进行分发,比如图片、html、action等等不同类型的请求分别发到不同的真实服务器上。
当时演示的时候也是配了几台本地的服务器模拟了整个流程。而评委问问题的时候,问我什么是七层负载均衡,我简单的说是:当一台服务不能满足大量请求的时候,考虑增加服务的数量,而七层的负载均衡是根据第七层(CS这种模式也就是http)中请求的内容,将客户端的请求通过某种分配算法转发给某台真实服务器,再将服务器的响应转发给客户端。当评委听到我说
转发的时候,直接了当的说我根本不清楚什么是负载均衡(一脸蒙蔽...)。
完事我又单独去请教他,他告诉我七层是网络层的东西,四次是物理层(???更是一脸懵逼),而七层负载均衡是
对http的重定向,
不是IO的读取(不处理IO怎么给client响应?),根据客户端的IP给客户端返回一个重定向的响应,让它直接去和某台真实服务器再连接(我想这样还更简单)。四层是物理链路层的,用软件很难实现,一般是路由偏硬件的方式。
即使负载均衡是什么我理解错了,但七层和四层是哪个层还是清楚的(明明是应用层http和传输层tcp嘛),毕竟人家是前辈,我也没顶嘴,客气了下就撤了。不过回来后真的好纠结呀,到底是我哪里理解错了,他的那种是http重定向方式,我的是类似反向代理的方式嘛,网上的文章都差不多翻了一遍也没啥结果。
没个人交流,就来论坛请教各位了,大家方便的话帮我解答一下,纠结死了
或者简单的说一下如果
用java来做一个简单七层负载均衡(不是分配服务器的算法,网上都是种算法),是一个什么思路,要用到哪些技术,我也想学一下。(我用的是NIO读取SocketChannel中http请求响应,master+worker的一个线程配合模式实现异步非阻塞IO读取,简单处理了下并发)
大佬们感谢
