When applications are designed, they’re usually created to fit in with a specific environment, such as hardware, operating systems, middleware, etc. All of these precise dependencies mean that it is extremely difficult to take one application and run it on a different computing platform. The ability to take an application code that was previously written and tweak it slightly to make it compatible with different environments is classed as ‘application portability’. In the bare metal days (a whole physical server per application), application portability was desired as a means of application interoperability across a number of platforms, instead of having to change the whole application for multiple environments.
For example, if your application worked on top of a Windows OS, you usually had to completely rewrite it to make it Mac-compatible. If your application was considered “portable”, only a slight change of components would make it compatible.
In the era of cloud computing, application portability holds added values. One of these is the ability to avoid vendor lock-in. Different cloud providers will often try to lock you into their system. They might employ proprietary software, middleware, or anything that can leave you in their cloud and hence prevent you from moving to their competitors. Application portability helps you avoid this situation.
Another advantage is being able to achieve the best cost-to-performance for your application. This is done by finding the best cloud infrastructure to support your application economically while maintaining a balance with the required performance.
The enormous amount of dependencies associated with each application and its environment created a buzz around application portability. That is, until container technology, especially Docker, came along and revolutionized the concept. Docker enables simple application portability by containing an application and its appropriate environment. These uniform containers can sit on top of any virtualized infrastructure and seamlessly execute their underlying applications.
Docker is making application portability a clear reality…a revolution long overdue. Most major cloud providers are now supporting the deployment of containers on their platforms. Among them:
- AWS EC2 Container Service – ECS
- Google Container Engine (Alpha)
- Azure Docker extension for VMs and Windows Server/Hyper-V containers
The hindrance of not having interoperability between different environments, hardware and cloud providers was also mostly solved by Docker. With that, we are left with the task of finding the best price-to-performance infrastructure for our deployment.
Choose Your Price-Performant Cloud
IaaS vendors give their instances or VMs different specs and put them under different categories, flavors or families. In order to find the best price-to-performance infrastructure, we need to compare providers, a major challenge due to their inherent differences. For example, look at this chart of Azure VMs:
Here we can see that the most basic family (A0-A4) can advance in two dimensions: more RAM for the same amount of virtual CPUs (A5-A7) (advancing from A0-A4 to A5-A7 generates the same amount of CPUs but enables four times the RAM and eight cores), or advancing to a newer generation CPU (D1-D4). Moving to D1-D4 also means that RAM is doubled and storage is shifted from magnetic to SSD. The diagram above demonstrates the advancement of generations in RAM in the Azure family.
We see that there is hardly any overlap or identity between the Azure and AWS families, meaning it’s never an apples-to-apples price comparison. Although there are no actual overlaps between instance families, the only similarity that we see is between T2 and A0-A4 (in the blue rectangle). In terms of processor generation and RAM, they are more or less equivalent (with a slight difference of around 3.5GB RAM to 3.75GB RAM).
Taking a look at the newest generation CPU families in AWS (C4, D2, I2) we can see that the amount of RAM is incomparable in relation to the same parallel family offered by Azure. G1-G5, for example, offers way more RAM for the same amount of CPUs in that same generation in AWS.
In general, most of the instance families in AWS cannot compare or scale to the amount of RAM provided by Azure from their machines with the same CPU generation. The same goes for Google Cloud Platform, had we overlaid its instance specs over AWS and Azure. Provider comparisons are tricky, as machines from different vendors all have different specs, which makes matching price-to-price for machines virtually impossible.
When we compare cloud environments for portability options, we need to optimize our search in order to make a proper comparison. By selecting criteria suitable for the needs of the app in question, we are able to find the best price-to-performance structure.
Here are some criteria:
- CPU or ECU – If CPU power plays a more significant role than memory capacity, you can choose to optimize by the number of ‘CPU cores’ or by ‘ECU’.
- RAM – If memory is a more important aspect, optimize your search for ‘RAM’. From the diagrams below we can see that the porting cost savings adds up to around 50% when the ‘Instance Type Best Match’ is RAM ($522) as opposed to when it’s CPU ($1045).
- Location – Other considerations, like choosing the region for optimal port deployment, whether by ‘proximity’ between regions or by cost, if location is less of a consideration.
Docker came along as the operating system that changed the overall outlook on application portability. The next step is to choose a provider that gives your app the best possible cost-to-performance. With an optimized search, this doesn’t need to be as complicated as it sounds. Simply know what aspects of your app are the most crucial and you won’t go wrong. Here is a helpful guide which provides a more in-depth comparison between the different cloud vendors.
Start Your Multi-Cloud Comparison Today
With your 20-day free trial you can explore Cloudyn’s tools to learn about multi-cloud comparison including AWS vs. Azure, pricing optimization, cost allocation and more. Gain full transparency, accountability, and control.