Table of Contents
Nowadays, cloud computing is everywhere. In the simplest terms, cloud computing is storing and accessing different data and programs over the internet and the fundamental building block for that is Infrastructure as a Service (IaaS). IaaS provides support natural development, testing, and usage of the application within the cloud environment. In this article I will give you a quick intro to IaaS and then compare five providers: Amazon EC2, Google Compute Engine, IBM’s SoftLayer, Microsoft Azure and Digital Ocean.
IaaS helps us to avoid the complexity of buying and operating our own servers. Moreover, maintenance and upgrading of softwares is not required. With these benefits, it is obvious that it has lower infrastructure costs in many scenarios, thus helping new organizations who do not have time and capital to invest in their own hardware.
Some of the other benefits of IaaS include:
- services are distributed as a vast array of resources
- being flexible, IaaS provides dynamic scaling
- cost is variable as per usage
- multiple users can use a single piece of hardware
- location independence: the service can usually be accessed from anywhere as long as there is an internet connection and the security protocol of the cloud allows it
Now that you are aware of the benefits of IaaS for building your web app, all you have to do is decide which solution to pick. The only problem is that there are so many choices today. As a Java developer, I initially struggled a bit when evaluating various IaaS providers. So in this article, I am going to describe the five best solutions for hosting Java web apps and compare them with each other.
Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides resizable compute capacity in the cloud. It helps in launching and managing server instances, thus making it suitable for developers for web-scale computing. You can use server instances for any legal purposes as per your requirement.
Instances are available in different sizes and configurations. EC2 allows AWS to provide different instance types that you can use to meet specific needs. So, you can start different VMs depending on your needs. If you are deploying a Java app, you can install your app server (Tomcat, Web Sphere, etc.) into one VM and use other services like micro-services, databases, etc. on separate VMs with appropriate configurations. More details, specifically on how AWS works with Java, can be found here.
With Amazon EC2, one has the choice of different instance types, operating systems and software packages which makes it flexible. Amazon EC2 has a memory, CPU, and instance storage configuration which helps in storage selection. Also, you can choose the boot partition size that is optimal for your choice of operating system and application.
The only demerit of using EC2 can be the expenses. As my workflows became more complicated and I used more services it was hard to project costs. However, to help estimate the costs, Amazon offers a monthly calculator.
The networking is not as flexible as compared to other service providers. Since a lot of data has to move from one end of LAN to another, the data traveling distance is much longer than it needs to be leading to congestion problems commonly seen on the internet.
Amazon EC2 is an industry standard today. Many leading websites and apps use EC2. Some of the prominent ones are Instagram, Reddit, Netflix, Adobe Systems, Smugmug, and many more. There are many articles on Amazon’s collaboration, for example why Netflix chooses Amazon.
Google Compute Engine
Google Compute Engine (GCE) is an IaaS product that helps you to run VMs on the same infrastructure Google uses for its own services. GCE gives you greater flexibility and control as well as access to computing resources at a scale that can fundamentally change the way you think about tackling a problem. GCE is much like EC2, but your VMs run on Google’s infrastructure. Deploying Java on Google Compute Platform is easy.
Networking pricing is expensive. As GCE is comparatively new, the choice of programming languages is limited, unlike AWS. Some Java APIs supported in AWS are not available in the Google Compute Engine. The transition from GCE to any other platform is not that easy. You should also note that to run any Java framework, GCE requires more effort from the user as it does not have integrated packages for them.
As they say at IBM, “Cloud without Compromise”, the technology giant provides high-capacity, scalability, and security. IBM/SoftLayer’s high-speed intranet connections could be just what your complex applications need from an IaaS solution, but you will have to pay extra to make it work.
Softlayer’s bare metal infrastructure can be combined with virtualized servers for solutions with a range of hyper-V technologies so you can optimize production workloads. It provides great high-performance bandwidth between SoftLayer’s data centers gives your cloud environment the ability to take on sudden surges of data carried from one data center to the other. Meanwhile, SoftLayer’s single tenant server model safeguards your data through comprehensive firewalls giving complete protection for sensitive information. Except for IBM/SoftLayer, no other cloud provider offers custom VM types. SoftLayer provides maven dependencies for calling its APIs.
A downside is that SoftLayer’s services are not bundled well together. IBM offers a wide range of services but they’re not just cloud services. Instead, they offer a combination of public cloud services with in-house and IBM-branded services, thus offering a “virtual IT department” i.e. contacting IBM for managed services for any updation and maintenance of the software.
A comprehensive set of services that helps you to quickly develop, deploy, and manage applications across Microsoft-managed data centers globally. It has support for Windows, Linux (yes, that’s right, Microsoft now loves Linux) and community VM images as well as a choice of cross-platform development tools and frameworks. You are going to pay what you use which means that you have significant cost savings and can achieve greater efficiencies.
Azure’s server gives you complete control in the cloud. Application Insights is a service for web developers on multiple platforms. It has a strong focus on security, following the standard security model of Detect, Assess, Diagnose, Stabilize and Close. Azure also provides simple, user-friendly services for increased protection, such as multi-factor authentication and application password requirements. If you need to use solutions of custom third-party software or numerous applications to run on a single machine, then Azure’s IaaS solution will help you. As a Java developer, you will find it easy to deploy and scale your WebApps here.
Load-balancing between instances may interrupt the state of an application; i.e., there is no guarantee two requests from the same user will go to the same instance. Azure does not provide flexibility in choosing the instance type. Moreover, it needs to be expertly managed and maintained, which includes patching and server monitoring.
Digital Ocean is aimed at Linux developers. It offers a simple, uncomplicated setup and gives the user a clean, easy-to-use interface with few features and one-click deployments. It has a control panel to manage features like two-factor authentication, a good API, auto-backups, and DNS management. It offers SSD hosting which is quite cheap compared to other services.
The services provided are essentials like VM and DNS management with no load balancing, hosted databases, analytics, Hadoop clusters, etc. If you are concerned about more than about autoscaling and high availability and invest more into managing servers, then Digital Ocean is suitable for your use. For Java developers, they have a community to provide tutorials on their official website.
Limitation of Digital Ocean is that their disks are located in the hypervisor, and they don’t use centralized storage which results in a relatively high risk of complete data loss if hosted on a failing hypervisor. However, if you can live with that risk and you have a backup, then you will get some great performing servers at an excellent price.
Let me summarize the above in a table:
|Supports both windows and linux servers. A lot of service options, APIs are available.
|Great performance. Scaling is good.
|Combination of management, software and security features are good for an enterprise cloud administrators.
|Administration tools are easy to use.
|Setup is easy. Cheaper for startups.
|User-based VPN access
|Expensive. Networking not so flexible, leading to congestion problems.
|Administration features are not that useful. Limited choice of programming language.
|Services are not bundled well together.
|Cost is high. Performance is average.
|No centralised storage.
With this knowledge, you will be able to decide which IaaS platform is the right one for your applications. We will discuss alternatives of IaaS in the next article.