服务器 负载均衡 java实现
小弟想自己做个简单点的服务器集群负载均衡器,实现简单的请求转发功能就好。没有太多头绪,不知道怎么实现接收所有的www访问请求,然后再根据服务器节点的负载状况分发出去.
各位大虾给点指导啊,尽量java的方式实现的。不胜感激了~~~
------解决方案--------------------除非有某些非常特殊性的要求,否则没必要“根据服务器节点的负载状况分发出去”。
考虑到你还要保证“会话粘着”问题,建议直接用 Hash 来进行处理会更方便。
这里有个简单例子可以参考下:
http://www.tidytutorials.com/2009/12/simple-java-proxy-servlet-using.html
------解决方案--------------------复杂问题简单化,通盘考虑你会发现,负载均衡是整个服务链路上的“瓶颈点”,所以如果处理太复杂,就会成为最大的性能阻碍。
所以其实真实系统里面,一般前端用硬件负载均衡或EngineX这类超轻量级Web服务器来做负载均衡。
唯一不得不考虑的事情,就是会话粘着问题,也就是有相同JSessionId的请求,是否需要仍然发给上一个服务器。
如果你打算做的事情跟性能有很大关系的话,我推荐《构造高性能Web站点》,电子工业出版社,看看。
------解决方案--------------------
哦,如果是为了学习为目的的话,怎么做都不过分。
循序渐进:
1、先实现单节点转发;
2、实现多节点随意转发;
3、实现多节点规则(比如先循环,然后是最少连接数的节点)转发;
4、实现会话粘着;
5、实现缓存(也就是相同请求不转发,直接把上一次请求所缓存下来的数据返回去);
6、等等...
加油!