Cloud Storage and IO Requests / Transactions
July 13, 2010
posted by Brad Kingsley
By definition a public cloud solution is going to have some component of multi-tenant storage. It's that storage, which is accessible by multiple devices at the same time, that allows for node fault-tolerance, resource balancing, resource bursting, affordable scaling, and other cloud features.
Storage devices though have two major resource limits - the amount of storage available (total space) and the amount of sustainable IOPs (total performance).
Everyone is familiar with the concept of charging for space - that makes a lot of sense to the common hosting client. Fewer people though are familiar with the concept of charging for IO transactions, but this is becoming more prevalent with the continued growth of Cloud Hosting solutions.
The challenge a hoster has related to IOPs is that an application could potentially use a very small amount of actual storage space, but a tremendous amount of storage transactions. Imagine a solution that is a 50 terabyte storage device with 50,000 IOPs potential (just throwing out random numbers for the example). What if a client used just 500MB of space but ran a super-busy highly transactional database on that storage that consumed at 50k IOPs? Well, anyone sharing that storage solution would "feel" the impact of that one exceedingly active client. Also, the solution would have 49TB+ of "wasted" space because even though the space is there, it can't reasonably be used with a decent level of performance - due to the one heavy-use client.
How do cloud hosts avoid this situation? More and more of them are now tracking IO requests and charging for them. So, now both storage and performance-use-metrics come into play when pricing a solution.
If you don't already have some sort of cloud hosting solution you probably didn't know this. Here are some examples as of June 2010:
Amazon S3: Amazon S3 charges for the amount of space used and also for the IO transactions. Right now their rates are $.01 per 1,000 "put, copy, post, or list" requests and $.01 per 10,000 "get" requests. They charge more per write operation, and that actually makes good sense because write operations have a large resource overhead on the storage device than read operations do.
Windows Azure: Microsoft's Azure charges for compute hours, storage space, and IO transactions. This makes sense for their model since they follow a utility pricing model where resources can be spun up and used for short bursts as needed. They charge $.01 per 10,000 IO requests.
Amazon EC2: Amazon EC2 is a product closer in line with Azure so charges for the three main factors but their pricing model is also quite a bit more complex and confusing. As I read it, it seems that the "temporary" space transactions are billed very aggressively - $.10 per 1,000,000 IO requests but if you want persistent storage you need to leverage S3 and pay the rates noted above.
OrcsWeb Cloud Server: Our Cloud Server product is a persistent model - not intended for short bursts but for continuous operation and support of live applications. So, the base prices are monthly and with each base Cloud Server we include 25,000,000 IO requests free*; then we sell additional blocks of 25 million for $20 each, which works out to $.01 per 12,500 IO requests.
*Through a lot of testing and analysis we've determined that 90%+ of servers fall just under this 25 million IO range. Between 80%-90% use 20-25 million monthly IO requests, which adds $20-$25/month on Azure or EC3 but is an included base at OrcsWeb.
The products target different types of clients, applications, and use-cases, so this isn't meant as a direct comparison - merely an attempt to further educate people on storage, IO requests, and how they are being handled by a few current cloud providers.












