Migrating to the Cloud
In recent years, cloud service providers have been extremely aggressive in promoting the cloud as an easy and cheap alternative to hosting your own data center. But is this true? Or is this another attempt at increasing their market presence, and getting your stuck on their platform till the end of times...
I wanted to present my experience and thoughts since the company I am currently working for is going through such an effort. Since I am the Lead Architect I have been asked to study different cloud services and their migration impact.
After some research, I actually chose to limit myself to AWS (Amazon Web Service) and Azure Cloud Services by Microsoft.
This choice was easy: There are the two predominant leaders in the market according to the magic Gartner’s Quadrant for Cloud Infrastructure As a Service (IaaS) and they are the most mature platform for both Paas (Platform as a service) and IaaS in today's market.
As a note, I wanted to mention that Google Cloud Platform is likely to become a player in the future but currently, they are still playing catch up.
My approach was simple: Build a small application that would use as much of the most common services to help me understand concretely how this migration would work.
As a software developer, it was easy to develop a small application: I built a simple store front end, a database, an API backend and a simple storage account to get started. Then, I started comparing the different services on the different platform, the easiness of integration into those services and their various options and security options.
Then, I asked myself the following questions: Do I need to modify my current applications to better integrate into the Cloud?
Do I need to learn new technologies? New design patterns?
Was the portal intuitive and was it going to be a long learning curve to start using the portals?
Which of the two cloud provider was easier to work with? Which offered me a better experience?
Here are my thoughts to the above questions:
First off, YES, Migrating to the cloud will require to some extent to make your code more portable, more flexible as it may be valuable to design your application into smaller concise services. That is of course in order to take full advantage of the platforms and of the various services. You may need to re-architect your application to decentralize projects into smaller more independent sub projects (or Modules) to take advantage of API services or Logic Services (Also called Lambda Functions in AWS). This would ensure scalability offering and would ensure that your cost of scaling your application would be proportioned to the services that used them. So, architecture and development was one place where you needed to modify your application.
Second, not only, you will need to review your architecture, but you also will need to learn about the various services offered. Personally, I found that the list of services was overwhelming at first.
Let's put it this way, cloud providers have developed their services around very intensive software development projects, sometimes very complex application or application with very large datasets that required special computing powers, tools or mechanism to access the data in real time.
So, when your professional background has been to develop internal web applications for portals or small subset applications for businesses, it may be seen as difficult to absorb all of the new choices and services offered. But, with some determination and a few hours of videos or online chats with Cloud representatives, it all starts to make sense. Most services are great, easy to integrate and offers functionalities you never knew existed.
Third, I found it very interesting that Microsoft and Amazon built their portals very differently from one another. At first, both portals seemed pretty unintuitive, large and complicated. AWS tried to list all their services into one page making it very hard to read.
Microsoft understood that their portal was extremely “user Not friendly” and they have actually reworked a new version of their portal. The new look feels more modern, the functionality is more flexible and they added combined resources that are more intuitive, like the Web + Mobile Resources, ' or Data + Storage...
Which of the two made it easier to learn?
AWS offers a 12 months free cloud services with some limitations. The limitations are not always clear and it is easy to be charged for services you didn't know where not included.
Microsoft is much more transparent, they give you up to $150 credit with a valid MSDN subscription and let you use any of their services.
Personally, I preferred the Microsoft approach, one reason is because I got charged $400 by Amazon after realizing that I could only create one EC2 instance (Elastic Compute). The other is that I have more freedom with Microsoft to create as many instances or use as many services as I need and Microsoft is very clear about what is the remaining balance since they conveniently display it on the top center of the portal.
Amazon Web Services, Microsoft Azure or even Google Cloud Platform, all have been promising that the cloud will bring you unmatched performances, scalability for rapid growth and a set of services that will simplify and secure your application dramatically.
They have been very aggressive to get new developers on board and even offer Free tours, webinars and free hands on demos in all major cities across the United States. At the end, though, I have to say that despite the learning curve, the re-design, the re-architect, it is WELL WORTH IT.
Redesigning your application to migrate to the cloud, may allow to redesign your application in a more lean approach, it will force you to keep good architecture practice.
Also, it may educate you about new design pattern, new security paradigms and/or new architecture or tools you were not even aware did exist.
The Cloud is huge, it is complex, but it will be certainly an asset in your career. I strongly recommend small, medium and large businesses to consider moving their data centers to major cloud providers like Microsoft and Amazon.
It will require some homework, and some heartache at first, but in the long run, you will be in good hands...