Hardware based load balancing is preferred than Software based load balancing due to the reason like stability, performance, Stress Handling etc.
A Combination of both Software and Hardware based load balancing may improve the performance of the application. Performance in the sense of Latency, Concurrency, etc
When Active-Active Availability is required, Clustering is performed at Software Level. A Common Front End configured to connect to multiple back ends with multiple instances of application.This is called Clustering. Ex. JBoss Clustering, Tomcat Clustering. At this case, sessions are required to shared at the Cluster level via Redis of Memcache.
Software based load balancer like HaProxy, NGINX, Pound etc shall be employed