These days, public clouds are all the rage. It seems like you can't go a day, without hearing how some amazing new product is being created faster and cheaper thanks to cloud computing. People have very strong opinions on whether to use a public cloud or build a private cloud, and there is no denying that public access to large and sophisticated compute environments has transformed the landscape for businesses of all types and sizes. However, as with many things tech, the solution is not so static. Rather, it’s a bit more flux and must be determined, at any given time, by the needs of the application and the business creating it. Thankfully there are plenty of factors to guide this very important decision, but first, let’s talk cloud type real quick.
"The needs of the business and the application should dictate the choice of technologies, including what type of cloud to use"
Despite the atmospheric moniker, there are essentially two basic types of clouds – public and private. A public cloud allows anyone to create and manage resources, while a private cloud is restricted to the owner/operator of the cloud. Amazon Web Services (AWS), RackSpace, and Google Compute Platform (GCP) are examples of well-known public clouds. You will also see a third type of cloud mentioned, the hybrid cloud, but this is just a convenient term for talking about a compute environment that combines both public and private clouds and is not really a different type of cloud.
Okay, so there are just two clouds, but how do we know whether to choose public or private? Well, let’s consider some main decision factors like price, reliability, ease of operations, and control:
Control is perhaps the simplest factor to evaluate. If the business or application requires control over the compute environment, then building a private cloud is the only option. Only the private cloud will allow use of cutting edge technologies. The public cloud, while continuously updated, lags behind the cutting edge of the technology curve and, at best, delivers only the latest main stream technologies, and rightly so.
Ease of operations is a common reason for selecting the public cloud as the optimal compute environment. It is also where the evaluation starts to get cloudy. The pitch here is that without needing to manage physical equipment, a business can reduce its operational staff and speed deployment of resources. In practice, the most complex part of the operational staff's job is not dealing with the physical equipment, but rather the management of these resources after deployment. The public cloud does not often reduce the size of the business' operational staff by any meaningful amount. Physical equipment procurement and management can add delay and a small overhead, but those issues are easily solved by businesses with predictable compute needs and a knowledgeable team. It is not intuitive to think operational stress would be reduced with the private cloud, but neither is leaning forward during downhill skiing—we have all seen what happens when you lean back!
Reliability is another very important factor to consider when deciding on a cloud strategy. Most public clouds are run by companies with very good reputations for reliability. This is often a leading factor for choosing to use a public cloud. However, none of them have perfect reliability. It is important to understand how the application must be deployed in order to maximize its reliability. Some things to consider here are:
(i) How are the failure domains defined,
(ii) What happens when a virtual machine is migrated,
(iii) Can a bad neighbor be tolerated or detected, and
(iv) How long does it usually take to recover from outages? In AWS, for example, high reliability can only be achieved by spreading the application across availability zones and data centers—an engineering problem that no public cloud helps businesses solve.
Price, surprisingly, is perhaps the most contentious factor in this selection process. This is mostly due to the fact that public and private clouds use completely opposite cost models. The public cloud is a flexible subscription model with costs categorized as expenses, while the private cloud is a capital expenditure model with most costs categorized as assets. Both the public and private cloud claims emphatically that they are the most cost effective solution. Can they both be right? Pound for pound, the public cloud is 2-6 times more expensive than the private cloud. This should be obvious as the public cloud operators are just making their own private clouds public and must charge more than it costs them to build and maintain them to stay in business. However, the subtlety of the pricing differences comes into play when considering the needs of the applications. For private clouds, there is a minimum cost that is required to setup an environment that approaches the level of reliability of a public cloud. Often times this upfront cost is much more expensive than what would be required to launch the application in a public cloud. The avoidance of this upfront cost is the main reason and advantage that so many startups utilize when they begin life in the public cloud. However, as the application grows overtime, it will reach a tipping point where the cost to operate in the public cloud exceeds the cost to operate in a private cloud; but this delay of upfront costs can be very critical to emerging businesses with finite capital. The other pricing advantage that the public cloud provides is to easily scalable applications with wildly varying traffic levels. Such applications can benefit financially from a public cloud since they don't have to commit to resources that they aren't currently using and can potentially reduce their costs in proportion to the variability of their traffic levels.
Ultimately, there is no innate superiority in the public or private cloud. They serve different purposes and have different strengths and weaknesses. This cloudiness tends to result in a lot of hype, misinformation, and confusion. The only real difference between a public and private cloud is inherent to their names. The needs of the business and the application should dictate the choice of technologies, including what type of cloud to use.