I have been working in several platforms to build Cloud Native Apps in past years and with the wide variety of options that we have it becomes really confusing which option to adopt. I will talk about my experience of working in different platforms to build CNAs.
Cloud Native Apps:
Most of us have used cloud services in one way or the other, whether its about deploying your monolith in the AWS or Azure, be it a web application, backend services, APIs etc. Sure, we get a lot of benefits of cloud by doing so, but are we getting the full benefits of cloud capabilities?
Cloud Native Apps are the apps that are specifically designed for the cloud to get complete benefits of the cloud echo system, such as.
- Fully auto-scalable apps
- Fully resilient and fault-tolerant apps
- Apps with maximum potential of CI/CD and DevOps
- Auto-provisioning of resources and containeraization
- Effective ecosystem for true Microservices
Of course the above list is just a few of the capabilities that we desire.
How that happens:
The answer to that definitely is not simple and you can see several opinions on these, but the basics remain the same.
- Building CNAs mean we need to commit ourself to build the apps that are best suited for the cloud, one major guideline for that is the 12 Factor Apps rules. You can read about what these principles are but effectively its about ensuring that we don’t implement the anti-patterns of cloud usage which can decrease the potential benefits of the cloud and can limit our ability to utilize the cloud infrastructure.
- Second step towards this is choosing a suitable PaaS platform that leverages the power of the cloud and the cloud oriented design of your applications and help you build truly resilient, fault-tolerant and auto-scalable applications.
What are our options:
There are a plenty of options available in the market as this is the future of software development and everyone is approaching this direction but I will only talk about the platforms that I have worked in and give you a brief understanding of these.
- Cloud Foundry: is an open source PaaS ecosystem built to enable the development of CNAs. It can run on any underlying infrastructure e.g, AWS, Azure etc. It provides a lot of powerful features and takes on the full work on itself allowing you to deploy and configure the application and leave everything on the platform to take care of Auto-scaling, Fault-tolerance, redundancy and CI/CD. There are many vendors providing CF services including Pivotal, IBM, Huwei, Fujitsu and many more. Key benefits of using CF are as below.
- Application portability.
- Application auto-scaling.
- Centralized platform administration.
- Centralized logging.
- Dynamic routing.
- Application health management.
- Integration with external logging components like Elasticsearch and Logstash.
- Role based access for deployed applications.
- Provision for vertical and horizontal scaling.
- Infrastructure security.
- Support for various IaaS providers
Get some free courses on Cloud Foundry here.
- Google App Engine: provides the similar features as Cloud Foundry. The underlying infrastructure is powered by google. Although out of the box on-premise infrastructure is not supported, but there are ways to deploy on on-premise servers using AppScale. GAE has their complete Development SDK, which you can host on local machine as a simulator and then push the changes to GAE servers. In terms of implementation it has a lot of differences, e.g, CF uses the concept of Orgs to support multitanents but GAE uses namespaces which are handled differently, CF has a concept of buildpack while GAE has different SDKs for different languages in platform.
To understand more about GAE, pick a language and get started here.
- Azure Service Fabric: in my opinion is the most robust platform, although it offers on-premise infrastructure support and support all the languages that other providers support, but its still couple with Microsoft ecosystem. For example to utilize full potential of development you use Visual Studio. Service Fabric has a number of features that are better than other providers. For example Service Fabric supports state-full services and manages the state itself.
This blog is a good starting point for Azure Service Fabric.
I’m not shy of tasty food and valuable comments. Feel free to bring any of these, anytime!