NetWork Load Balancing for Web Application:- BIG IP vs NLB

Posted: October 14, 2008 in Architecture Series
As an Architect you need to deal with this at certain point of time ,When you need to choose either a scaleout or a scale-in to provide a robust application.Clustering,Failover  and  Load Balancing often becomes a critical decision process,when you found the number of users of your site grows and you need high availability in your application with good performance and scalability .
 

 Coming to Load balancing decision you need to consider if a hardware load balancing is more suited you or a software load balancing is more suited you[scaleout vs scale-in].When you choose Load balancing,although many products provides the features ,the 3 commonly used were BIG IP,NLB and CIsco.

 
Althouugh NLB is cost affective although I found it is not so good in term of performance and traffic.The good point is that all servers in a cluster monitor each other with a heartbeat signal, so there is no single point of failure. To achieve similar functionality using external hardware load balancing appliances, such as the BIG-IP series from F5 Networks, two or more hardware appliances must be used.In win2k3 NLBS does not support automatic removal of a failed server from a cluster unless the server is completely offline.I also saw NLB configuration is tedious.[Although i ll provide few links:)].
 
Coming to the BIG-IP   Its purpose built just to do load balancing, and the physical boxes (which come in pairs) are highly redundant and easy to configure.  Some of the biggest production sites in the world run on Big-IP, so if you have a high volume site, use Big-IP.  you will need to think about your https sticky session strategy regardless of whether you use NLB or Big-IP).
Another advantage of BIG-IP is that it does the failover on the application level.
What I mean is if the IIS go down but OS is Ok,then BIG-IP will notice that the WebServer is not responding to Http Request and hence take it out from farm pool automatically.
 
The NLB support of sticky session is limited and it works based on Client IPs.So if need Https or sticky sessions:-The NLB needed to push all data from same Ip to same Server since the server cannot look at the contents (the session ID) before it decrypted the data.This can be problematic if a lot of traffic comes through a few HTTP proxies or VPN gateways to your site.In SSL scenario the IIS servers  have to do the decryption themselves.
 
BIG-IPs can decrypt the data on the loadbalancer and then look at session IDs when they are decrypted and distribute the load accordingly .It can also do true load balancing based on session IDs (even when SSL is not required), not just IP-based.Also BIG-IPs can do load-dependant balancing with appropriate plugins if for some reason you want more than a simple round-robin load distribution

Although I mentioned the demerits of NLB,its still a viable option for medium scale application and there are quite a few performance improvement happne in win2k8 which needed to be watch out.I am now posting few of the links which will be helpful further for you while taking a decision.

 
Other Links which you might found useful:-
 
Advertisements
Comments
  1. Unknown says:

    I have got this error while I’m working with .net remoting over F5 BigIp.System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond Server stack trace: at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket(EndPoint ipEndPoint) at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket() at System.Runtime.Remoting.Channels.SocketCache.GetSocket(String machinePortAndSid, Boolean openNew) at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream) at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream) at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) atAnd this is my scenario:1-I’ve developed a .net 2.0 remoting application.2-I’m using four Windows Services to host my remoting objects.3-I’m using TCP Channel and SAO activation.4-This is the Windows Services .app config <!– CONFIGURACION SERVICIOS REMOTOS –> <system.runtime.remoting> <customErrors mode="off"/> <application> <channels> <channel ref="tcp" port="23501" socketCacheTimeout="0" socketCachePolicy="absoluteTimeout"> <serverProviders> <formatter ref="binary" typeFilterLevel="Full"/> </serverProviders> </channel> </channels> <service> <wellknown mode="SingleCall" type="SAFI_NET.Negocios.Operaciones.Ordenes, SAFINET.Negocios.Operaciones" objectUri="Ordenes"/> 5- This is the Client Activation: CType(Activator.GetObject(GetType(Interfaces.Operaciones.ICierresDiarios), Aplicacion.TraerURLOperaciones & "/CierresDiarios"), Interfaces.Operaciones.ICierresDiarios) 6-I have a Middleware farm (F5 BIGIP) address (192.168.162.162). This farm has two nodes (192.168.162.50, 192.168.162.51).This nodes has the same hardware and software specification. Both of them have installed my Windows Services. 7-When I try to connect trough the farm , I get this error “An active connection was forcibly closed by remote host” or even : System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond Server stack trace: at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket(EndPoint ipEndPoint) at System.Runtime.Remoting.Channels.RemoteConnection.CreateNewSocket() at System.Runtime.Remoting.Channels.SocketCache.GetSocket(String machinePortAndSid, Boolean openNew) at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.SendRequestWithRetry(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream) at System.Runtime.Remoting.Channels.Tcp.TcpClientTransportSink.ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, ITransportHeaders& responseHeaders, Stream& responseStream) at System.Runtime.Remoting.Channels.BinaryClientFormatterSink.SyncProcessMessage(IMessage msg) Exception rethrown at [0]: at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at 8- I try to connect to a single node 192.168.162.50 OR 192.168.162.51 and I don’t get any error. Thanks for your help!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s