The SQL server is often a performance bottle neck in a large system, as in, you can cluster it, but still it needs to be synchronized. And you need to be able to do backups while keeping it online and in more extreme cases you need to be able to fail over to a 2nd set of servers in case of emergencies. Much easier to scale clients and middle tier.
Clustering in a SQL Server context has nothing to do with performance or scalability, it is for high availability alone, in an active/passive configuration per instance, and even then it'll only work across locally connected nodes, so if you have a site outage you're buggered anyway. Somehow Microsoft managed to sell SQL Server clustering to an awful lot of folk, and at a serious premium too both in terms of software licensing and the hardware required to support it. Only when it was too late did many managers realise the fundamental flaws in it.
While people talk a out active/active clustering on SQL Server, it will be on separate instances, only one node on each instance is ever active at one time. There is no load balancing per the classical definition. To my mind this was one of the more underhand marketing bullshits to come out of Microsoft.
As you say, doing 24/7 on a transactional SQL Server implementation is not easy, especially if you also want high availability. It is possible these days at the database engine level, but in the not too distant past, it had to be done by implementation specific methods which were very hard to maintain.