Before we start, let’s limit scope of the article. We are going to talk only about Infrastructure as a Service providers (IaaS) and we will discuss only to the server part, and not go much into additional storage, load balancing, etc. Platform and Software as a Service (PaaS and SaaS) is completely out of the scope here.
Cloud server – the basic entity you pay for
Usually higher instances have all resources proportionally increased together with price. So for instance if an instance with 1GB RAM costs $10 then an instance with 4GB will cost $40. Very often the resource that specifies the type of server is RAM, while storage in small print and CPU often not even mentioned.
On the other side for server resources, there are providers that allow custom values for RAM, CPU, and storage. Each component is then charged separately, usually per unit-hour (for example, 4 GB-hours for 2 GB RAM used for 2 hours). This approach lets you adjust to your specific needs. Providers of this type are BitRefinery, CloudSigma, ElasticHosts and OpSource.
An option somewhere in the middle is when you have some fixed resources and others that you can choose freely. In such cases RAM and CPU are almost always bundled, while you can choose storage size. Here Terremark is a provider that has exactly such model. Amazon becomes such option if you decide to use EBS (network block storage) instead of instance storage.
In most cases providers with fixed server types are cheaper and are a good choice if you can fit the resources provided by that server. But the more your needs diverge from the predefined servers, the cheaper it is to use a provider with custom resource allocation. For instance, if you need a lot of RAM but minimal storage and CPU, a provider with custom servers would be the right choice.
Some additional note needs to be said about CPU. Unlike RAM and storage CPU is much less emphasized in cloud offers. There is often no obligation at all about CPU allocation and the most of providers allows CPU bursting, which means your server can take as much CPU as possible as long as it is not used by others. It is also very difficult to benchmark then, because your CPU allocation will strongly depend on the neighbors your cloud server will share a physical machine. Some providers have fixed CPU allocation, like Amazon EC2 or Storm on Demand. Others either allow selection of number of virtual CPUs (Terremark, OpSource, BitRefinery) and/or even minimal allocation in CPU (CloudSigma, ElasticHosts).
OK, so how they are charged now? Servers or are equally often billed per hour or month, but in the case of CloudSigma, per 5 minutes. Hourly and shorter billing periods are what I would call real cloud offer, since in such case you stop paying as soon as you stop using server. With monthly payments, it gets much closer to VPS (Virtual Private Server).
A typical misunderstanding of cloud offers is about the time server is not used. It is not that you don’t pay if your server stays idle (there are no requests). You are charged whenever a server is running. But you may incur some charges even when the server is turned off. For example, providers that charge separately per resource (those with custom RAM, storage, and CPU values) will charge you for occupied storage during the period when a server is turned off but not charge you for RAM and CPU. For those charging per server rather than resource (fixed set of server configurations), you will usually pay regardless of whether the server is turned on or off. There are exceptions. ReliaCloud will charge you half of the server price if it is turned off. Amazon EC2 will not charge you for a server that is turned off, but you will lose everything stored in instance storage and it will be reverted back to the base image when you restart the server unless you pay additional for EBS or S3 services. You must be aware of such conditions if you are going to have a server that is not always running (for example, you run an application only during your company work day or you scale your application for peak hours).
Getting complicated – subscriptions, reservations, packages, discounts, …
That is only the basics when you are on a fully on-demand model. But on-demand is bad for providers, since they cannot plan capacity, so they are very happy to give you a discount if you can make some commitments. And this is the place where most of the differences come in.
For example, Amazon provides reserved instances where you pay up front for a reservation and have a discount price when you use this instance, but if you don’t use it you don't have any additional costs. You can have a 1-year reservation that pays back after 6 months or a 3-year reservation that pays back after 1 year and 3 months for an instantly on server.
A similar approach is when you buy resources up front for a month or longer period, where you buy it at a significant discount compared to on-demand service (even 50% for ElasticHosts), but you are not compensated in anyway if you don’t use them fully. For CloudSigma, on-demand prices are a way of adding more power to subscribed servers when there is additional load. Their “burst prices” are dependent on the current CloudSigma load, with a maximum of twice the monthly subscription price.
Some providers offer prepaid packages of resource-hours to use, usually for a period of a month. These can offer you great savings if you match their plan, and often an overage is cheaper than normal on-demand prices. This is also where you can see cloud size affecting pricing. GoGrid for instance is often quite expensive for a single server, but with packages it starts to become much more attractive if you need a larger cloud. Another interesting case is OpSource, which provides packages with a predefined amount of RAM, CPU, and storage hours. This defines its ratio, but otherwise you can select custom values for each resource.
What else will I pay for?
Another factor to consider is data transfer, which is almost always charged per GB transferred. Sometimes there are discounts if you transfer more (Amazon, OpSource), and there are predefined transfer packages available with discount transfer price (GoGrid, Storm on Demand) or just buy any transfer size upfront (CloudSigma, ElasticHosts, Linode) . But it is important to note that many providers charge only for the outgoing traffic, which is perfect if your application will mostly consume data (eg. crawler or back up) – Amazon, CloudSigma, GoGrid, OpSource. BitRefinery is the only provider that charges for bandwidth, not transfer size, and includes 3Mbps for free – a good choice if you are going to have a constant flow of data since the price per GB is then lower. Some providers will give you a transfer limit included in the server price. VirtaCore, for example, has a 3 TB limit.
And a final consideration: software licenses, which usually are limited to a Windows and SQL Server license. An important thing to note is that some providers (Amazon, Atlantic, Rackspace, Terremark) charge per hour while others (CloudSigma, ElasticHosts) charge per per month, even if they charge servers per hour and you need a server per hour. You should check this carefully if you plan to run Windows machines for very short periods. Note also that some providers have the same price regardless of whether a server runs Windows or a free OS (e.g., Linux) – GoGrid, OpSource.
As you can see, there are a lot of things to consider, pricing models of various cloud hosting providers are not compatible, and there are a lot of combinations to check to find best price. With Cloudorado you can compare prices of cloud hosting providers with ease – just provide resources you need and it will help you handle the rest.
Appendix: Pricing models used by selected cloud hosting providers
|Server Types||Billing period||Windows billing period||Turned off payment||Server discounts|
|Amazon||Fixed / semi-flex||hourly||hourly||no / EBS storage||Upfront reservation entitling to usage discount|
|CloudSigma||Flexible||5 min.||monthly||storage||prepaid subscription|
|Free transfer in||Transfer discounts||Transfer included|
|Linode||-||prepaid||yes; depends on server size|
|OpSource||yes||thresholds / with server package||-|