Windows下做7层软负载方案分析
2010-06-25 00:00:00 来源:WEB开发网对windows下做7层软负载做了一些分析,感觉最不靠谱的就是HttpWebRequest,这玩意实现太复杂,包装太深,而且也不是设计为发送大量出站HTTP连接用的,HttpListener应该还行,就是设计为做HTTP服务器用的,实在不行Proxy和RealServer之间用 Remoting传递HTTP信息,然后两边把Remoting再转换成HTTP信息。
大家有啥做7层软负载的经验可以讨论分享一下,最好是windows平台下的。
性能分析
1、 对外网的连接管理和协议解析使用http.sys(HttpApi.dll,HttpListener)内置机制,http.sys在内核级别进行HTTP的连接管理和协议解析,性能应该可以保证。
2、 对内网RealServer的连接管理和拼包使用HttpWebRequest的内置机制,但有如下问题
a) 连接管理:默认Proxy向RealServer发送请求会新建立一个连接,收到应答后会拆除连接,也就是说Proxy和RealServer之间会建立大量连接,但是由于受端口(65535)限制,出站连接不可能太多。这个问题要想办法解决,可以尝试把RealServer启用KeepAlive解决。
b) 拼包:HttpListener收到包后,虽然自动已经解析成对象,但是还要把这些包重新拼成HttpWebRequest的格式发给 RealServer,这里面包括拷贝Uri,HttpHeader,Cookies,Body等,这些数据量挺大的,在内存中拷贝一遍肯定损耗性能。该问题应该无法规避。
3、如果是常规的web应用(资源访问类),Request小,Response很大,RealServer返回Response时还要经过Proxy,还要进行内存拷贝,这个也非常影响性能。然后7层又做不到LVS的那种DirectRoute机制(需要修改网络包的mac地址),实现IP隧道和TCP的状态迁移需要修改操作系统的TCP/IP协议栈。鉴于代价太大,该问题也无法规避。
更多精彩
赞助商链接