Successful WordPress sites follow a fairly predictable path. They begin with an idea, which — because no one has a clue it will be successful — is built on a small shared hosting plan. Shared hosting plans are perfect for moderately trafficked sites, but as the sites grow, they need something more.
A WordPress site is a combination of many different pieces of software and hardware. It includes the WordPress application itself, the PHP interpreter that runs the WordPress code, a database to store the site’s content and other data, a web server to serve the pages WordPress generates, an operating system that manages the filesystem, network interface, and dozens of other components — and that’s the simplified list. Each of those components consumes some of the server’s resources. As a site grows and gains more traffic, the resources it uses will eventually grow beyond that which an individual hosting account can cope with. At that point, it’s time to think about scaling.
Let’s start with the simplest WordPress scaling scenario, and then progress to more advanced configurations.
Shared WordPress Hosting
Shared WordPress hosting is perfectly capable of supporting moderate traffic sites, but if your WordPress site grows beyond a certain level, you are likely to experience performance degradations as the server attempts to keep up with the load.
If your hosting account is only just consuming its available resources, it may be possible to squeeze a bit of extra performance out it with aggressive caching and a CDN, but the best option is to plan for the future and scale up to a larger shared hosting plan.
Once your site has grown to the point at which no shared hosting plan can support it, it’s time to think about moving away from shared hosting altogether.
Dedicated WordPress Hosting
With a shared hosting plan, your site shares a physical server and its resources with other sites. With a dedicated WordPress server, your site has access to all the resources of the physical machine. It doesn’t compete with other sites. Dedicated servers are available in a huge range of specifications that range from less powerful than your laptop to enormously powerful servers with many processor cores and dozens of gigabytes of memory.
But what if that isn’t enough to support your site’s traffic?
Here we’ll take a digression to discuss two fundamental types of scaling: horizontal scaling and vertical scaling. With vertical scaling, a server’s resources are scaled up — in essence, you keep moving to a more powerful server when the site outgrows its current home. Obviously, there’s a limit to how far one can go with vertical scaling. A server can only get so powerful, and the more powerful they get, the more expensive they are.
Which brings us to horizontal scaling. Horizontal scaling adds more resources by increasing the number of servers. A group of dedicated servers is called a cluster.
Earlier I said that a WordPress site is built from many different components. When scaling to a cluster, instead of all those components occupying a single physical machine, they are spread across several. The web server might live on one machine, the database on another (or several others), the fileserver on yet another, and so on. The nice thing about WordPress server clusters is that they can, in theory, be scaled indefinitely. There is no absolute limit on how large a cluster can grow (in theory at least, there are practical limitations.)
Clusters have another benefit: they’re great for redundancy and load balancing. If your site grew to epic proportions, it might need ten web servers, in front of which would be placed a load balancer that decides which web server to send each request to. If one of the web servers fails, the load balancer can just send requests to the other web servers until it’s fixed. Clusters are scalable, resilient, and capable of growing to meet the needs of even the largest WordPress websites.