大家来谈谈关于负载均衡的设计

最近要搞一个负载均衡,看了下ipvs ( lvs ) 的介绍:但是非常遗憾,ipvs只是做了IP层的负载均衡,无法做到基于URL的负载。

我找了,网上都推荐ipvs+nginx来完成基于url的负载均衡。

自己总结了一下:大概是一下的模式:

一台做做 IPVS的机器(或者加一台备份机器)=====》多台装有nginx的机器(做反向代理)==》N台web服务器

听网上说:IPVS只做ip层的解析,效率应该不成问题。而对于nginx,需要做应用层协议的解析(找到相应的URL,hostname等),效率要低些,听说一般的机器能承受2-3W个链接。下面是就web服务器,这里暂时不讨论。

我没看过nginx的源码,但是大概了解了下,估计就是一种数据转发,这种基于应用层的数据转发,效率都会有问题,应为一个有内容的链接都要经过两次的内核空间与用户空间的切换。这样一来效率就有所下降了。

我在想,能不能把nginx的这层的数据转发也做到内核空间里面去。
例如:当一台机器接受到从IPVS 转发过来的包的时候,通过SKB直接读取到应用层的数据,在根据这些内容做相应的转发,这在netfilter里面应该可以实现吧?

对于上面的内容我想做一些效率的优化:

1.只对某种端口的链接进行处理(例如HTTP等),这样可以大大减少过滤的包。

2.做一个hash表,记录连接的5元组等信息,这条连接在hash 表里面保存一段的时间。例如一个链接来了,马上对这个链接进行hash查找,如果在hash表里面,直接转发到相应的机器,以免过多的过滤而影响效率。
对于这一条,一般的http请求在三次握手后的两个包就会包含url等信息(除了https).所以我们需要过滤的包并不是很多。


这样一样来,就可以不用nginx 了,我感觉这样的效率应该要高于实现与用户空间的nginx.

大家来看看我这样设计有没有价值,我没搞过(只做过ipvs),只是随便想想的。希望大家来一起讨论下这个实现的一些问题。或者说市面上有没有相关的开源产品。

各路神仙都过来讨论讨论啊。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值