Our goal is to constantly provide the best web services, using both new and proven tools of today, and to ensure a product that consistently remains the best while supporting the growth of new tools. Because of this goal, we’ve started from scratch redesigning every aspect of hosting, including the servers, the infrastructure, and the software used.
In a typical web hosting infrastructure, one using Plesk, cPanel, or Webmin control panel software, hosting providers are limited by the size of each physical server. Below is a simplified overview of a typical shared hosting infrastructure. While most hosts have their own unique setup, they all generally follow this template.
In the above diagram, each server is its own unit, with its own Control Panel (CP) installed on each server. For the most part, each unit operates autonomously and without communication with other units. If a server incurs a large amount of traffic or experiences an issue, the CP becomes unavailable to all users. Likewise, if the CP becomes overwhelmed due to increased traffic or other causes, it will cause problems for the users on that machine due to its need for additional resources. Finally, once a server is full, user accounts will need to be evacuated in order to compensate for growth. Depending on the size of these accounts, it can be quite an ordeal and is prone to failure.
We need an infrastructure that can be flexible while still being robust. In our search for this configuration, we’ve devised an infrastructure that addresses these issues and implements procedures to accommodate growth and future unforeseeable issues. Our infrastructure is as follows:
This design will allow for constant growth while still maintaining a smaller price point through better allocation of resources and scale-ability. One of the first changes we’ve made is moving the CP software off the physical servers and onto its own machine. In doing so, we’ve simplified the method by which users access their control panel, and we’ve freed up resources typically used by the CP on each server. In the event the CP is overwhelmed due to simultaneous access, additional CP instances can be created to accommodate the increased load. In addition, because the CP is abstracted from each individual server, an account can have domains across multiple servers, allowing for hosting sites on servers that are optimized for certain configurations.
Another change we’ve made is the virtualization of all servers, which addresses several failures of flexibility with the other typical infrastructures. By having all servers virtualized, we’re able to provide redundancy and the ability to create instant failovers. If a Hardware Node (HN) were to fail, all of its servers could be brought up on another HN within seconds of the outage. Since the entire server is virtual, all configurations, files, settings, and sessions will remain intact, allowing for a seamless transition.
Virtualizing our servers also allows for growth of each machine. Overpopulation of servers is a serious issue that plagues the hosting industry. By virtualizing our servers, we have a better gauge of resource consumption, and as a server’s population increases, we can move and adjust resources for each individual server. For example, imagine servers running on a Hardware Node that is at 75% capacity. Several accounts become increasingly popular on one of the servers, which pushes the node past 80% capacity. This server can be seamlessly migrated to another Hardware Node with far more capacity, ensuring that no one server, or account, experiences a degradation of service. Hardware Nodes can also be upgraded in processor, memory, and disk capacity at any time in the event a single server becomes too large for any one node. This is also a seamless process, as Hardware Nodes are built to be modular and expandable, much like Blade Servers are, ensuring that as a machine grows it will scale.
In the spirit of the Open Source technology that this company and many others are built on, we make sure to contribute back to the community as much as possible, including bug triage, packaging, and publishing tools we’ve created to the Open Source community.