Services provided by leading cloud providers may give you idea about how to achieve SN in tree-tier application. Using load balancers with different policies help you to move shared resources to their own servers, so it makes your application servers available to network. But RDBMS is always bottleneck against to SN.
To offload session handling load from database, in memory cache comes for the help, since the data is in the RAM and resiliency managed by Redis(e.g.) session data access becomes faster. File storage for app and db servers is addressed by NAS and servers can be mounted to NAS, it helps to mitigate HDD, SSD failures and provides faster/resilient IO. Search activities are also the burden on RDBMS. ElasticSearch can offload search load from your DB. Another improvement that can be done is using an in-memory cache in front of your database for queries. If a record hasn’t changed since the last fetch, you can simply pull it from the cache, instead of DB.
Most of the time read queries are more than updates/inserts. In such case, if one DB is not able to handle the read load then you can create multiple read replicas of your DB.
If load reaches a stage where even using the read replicas doesn’t work, then the last option is to shard your database, so your business are going quite good and you will have resources to solve it when the time comes for sharding.