We host websites that range from solo blogs and small eCommerce stores to huge WordPress publications and Magento stores with stratospheric levels of traffic. We can accommodate such a diverse range of hosting requirements because of the different infrastructure configurations we offer. In this article, I’d like to discuss how we are able to host the biggest, high-traffic sites and keep them performing faster than most hosts dream of.
First, let’s look at how small sites and stores are hosted. The most economical option for low-traffic sites is shared hosting. That means lots of sites are hosted on the same server. The CPUs, memory, and storage are shared between these sites. The physical servers are much more powerful than the average PC, but they’re roughly comparable.
Often, small sites grow into big sites with lots of traffic. These sites don’t work well in a shared hosting environment — they use too many resources. Mid-sized sites are hosted on dedicated servers. All of the server’s resources are available to one site. For all but the largest sites and stores, a dedicated server equipped with our optimizations is enough. But for very large sites, we need to go even bigger than the hugely powerful enterprise-grade server hardware we use.
Servers only get so big. After a certain point, it doesn’t make sense to simply keep upgrading to a bigger server. Sometimes there are no bigger servers, and sometimes a single server isn’t the most efficient option. For sites like these, the best option is a server cluster. That’s just what it sounds like — instead of one server, there are two or more servers. As you might imagine, server clusters can have lots of different configurations, so I’ll discuss one of the most common.
For a high-traffic site to perform well, it should be able to respond quickly to incoming requests from users. Each of those requests can use a lot of memory, sometimes more than is available on a single server. In this case, we could add one or more extra web servers, and move other site-critical functionality like the database server and file server onto separate machines.
Let’s say we now have three web servers. Incoming requests are spread across the servers. Choosing which server to send a specific request to is complex and there are lots of ways of organizing it, but for simplicity’s sake think about sending the requests to each server in turn. Every new request is sent to the next web server. Of course, we need a way to decide which web server will receive each response — that’s the job of the load balancer. Load balancers sit in front of the web servers and send the requests on to them.
Because there is now far more web server capacity, every request can be dealt with in a timely fashion. Requests hit the load balancer, are sent to one of the web servers, which gathers information from the database and file server, and sends the response. If the load adds up to more than three web servers can handle, it’s relatively straightforward to add another web server.
I’ve concentrated on the web server here, but it’s possible to add new database servers, file servers, and load balancers to the cluster as required, that’s part of what makes a cluster so flexible.
Enterprise Magento Clusters and WordPress Clusters, along with our expertise in building high-performance systems for PHP applications like WordPress and Magento, are one of the ways we support some of the biggest publishing and eCommerce ventures.