CLOUD-NATIVE APPLICATIONS DEVELOPMENT

article

TABLE OF CONTENTS

reading time: 10 min

Navigate through the article!

Find the topic you are interested in and proceed to it directly from the table of contents!

Time of hardware and accustomed servers has gone, a new era of cloud computing came and brought new standards to application development and its running.

About 6-7 years ago people realized they needed sufficient changes in the approach to development of the app infrastructure if they want to go to cloud smoothly and not to stumble over each hindrance during migration. Thus, development of cloud native applications became the most spoken about topic in the IT industry.

people chatting on work

Cloud-native applications help companies succeed in fast-developing software-driven markets, respond to customer needs faster, and, hence, stay far ahead of the competitors.

Find out our introduction article about cloud native app development where we uncover all main points of cloudware, tools, use cases and best practices of application refactoring.

What is cloud-native application?

Cloud native is a method of application development, running, and optimization, based on the best practices of cloud computing. This method enables developers to utilize the cloud computing resources at full capacity and integrate new technologies like serverless, Kubernetes or microservices faster.

Ashesh Badani, VP and GM of Cloud Solutions at Red Hat, explained in short in this video how he understands the application built in a cloud fashion.

What is the difference between an application just hosted in cloud and cloud native one?

Yes. Applications hosted in cloud are not always cloud-native. The most distinguishing signs of such stowaways are:

  • Application was migrated to the cloud with "lift'n'shift" strategy.
  • There was no refactoring before migration.
  • VMs instead of containerized environments.
  • Absence of cloud tools and automation.

Essentially, cloud-native means that absolutely every operation is made within the cloud environment - from coding, testing, deploying, up to further running and optimization.

What are the characteristics of cloud native application distinguishing it from simple monolith hosted in the cloud?

  1. Lightweight containers managed with Kubernetes: the application is composed of independent services which are packaged in containers.
  2. A diversity of modern programming languages: each service is developed using the most trending languages like Go, Ruby, NodeJS. Thus, apps are developed in a multilingual environment, where developers may choose the programming language best suited for their specific requirements and this piece of the system is 100% compatible with other pieces.
  3. Microservices-based architecture: all services around the application are independent (and sometimes are even written in different programming languages). So the architecture is modular and easily scalable.
  4. CI/CD pipelines: continuous integration and deployment is an integral part of cloud native application development, becoming one of the DevOps enablers.
  5. Infrastructure automation: cloud-native applications have infrastructure described with a code, also well known as infrastructure as code or IaC.

What are the benefits of cloud native applications for modern organizations?

Okay, we figured out what is cloud-native app and it's time now to understand how your company will benefit from it.
There are key advantages of cloud application development:

  1. Resilience and greater fault tolerance
  2. Security
  3. No vendor lock-in
  4. Integration with modern technologies
  5. Reduced cost of infrastructure maintenance
  6. Faster time-to-market delivery

Resilience and greater fault tolerance
Cloud native development a priori deals with contemporary approaches like, e.g. microservices, kubernetes in cloud etc. It means that the application itself owns such properties like self-healing in case of downtime: if a container stops operating, another container will be up immediately. Or another example: if there is a sudden failure of a service within so-called "microservices net", it will not impact the operation of the full infrastructure, as it could happen to monoliths. In this case, you just isolate the issue and fix it, without need to stop the entire system. Thus, uptime of almost 99% is achieved!

Security
Security is an integral part of any application, even if it is marginally native to cloud. Cloud providers like Amazon Web Services, Google Cloud or Microsoft Azure take over the responsibility for secure data storage and its utilization.
Beyond this, it becomes possible to set up automated quality checks to enable strict code supervision. So, each time when developers commit any changes to the code, all main vulnerabilities are defined before deployment to production.

No-vendor lock-in
Hype around cloud native development results in growth of open-source tools which liberated companies from N-years-long licenses and enterprise-level fees. It means you can switch the tools even more easily if you are not satisfied with services provided or prices and so forth.

As for hosting, there is no need to choose only one public cloud provider for this. As the recent statistics have shown, multi- and hybrid cloud solutions are gaining more and more popularity among companies:

Cloud comparison

Multi-cloud and hybrid solutions allow squeezing all benefits out of each provider and make the infrastructure yet more tailor-made. So, even enterprises with their heavy applications and on-premise data centers use at least one private cloud. The evidence of this is the Flexera 2020 State of the Cloud Report:

enterprise cloud strategy

Integration with modern technologies
Cloud-native encompasses contemporary methods of architecture design like serverless, containerization, microservices, etc. Consequently, companies get extremely responsive infrastructure, which is always ready for scaling up and down!

Reduced cost of infrastructure maintenance
You probably have already seen thousands of articles uncovering the question of cost reduction by using modern IT solutions. Anyway, let's consider main reasons why cloud-native apps entail reduced cost of infrastructure maintenance:

  • Serverless requires less effort to maintain the infrastructure in the cloud. FaaS providers take over the responsibility for it, allowing Ops teams focus on more important tasks.
  • Serverless allows running applications with dynamic workload and pay post factum only for the utilized resources. Such approach prevents the over-provisioning of the resources as it may happen with traditional servers.
  • Cloud-native tools are open-source projects that means both free plans and continuous support of the tool
  • Monitoring tools allow discovering of vulnerabilities and weaknesses causing losses and making companies go into technical debt.
  • Robustness and resilience of cloud native apps delivers 99% uptime rate, that means your business works online and brings fruits.

Faster time-to-market delivery
As it has been already mentioned above, cloud-native applications are built in such a manner, that reduces the efforts to maintain and provision the infrastructure. Consequently, the IT team focuses more on features release rather than on infrastructure maintenance.
Beyond this, strict and standardized business processes inside each company enable code, build, deploy continuously, without compromising product quality.

Devops image

What tools are used to build cloud native applications?

Cloud architecture design involves tens tools helping to run them and provision. You can schematically divide these tools into 6 logical groups:

Application development:

  • Programming languages & frameworks: JavaScript, React, Python, spring, GoLang, NodeJS.
  • Databases: MySQL, Cassandra, Redis, PostgreSQL, Cockroach labs.
  • Streaming: Kafka, NATS, Confluent, HERON.
  • Source code management: GitHub, GitLab, Bitbucket.
  • App definition: Habitat, Docker Compose, Bitnami.
  • Registry: Docker registry, QUAY, JFrog.
  • CI/CD: Jenkins, Travis CI, Circle CI, GitLab CI, Spinnaker, Argo.
  • APIs: Stripe, Auth0, Segment, Twilio.

Orchestration and management:

  • Orchestration: Kubernetes, Docker Swarm, AWS ECS.
  • Service discovery: ETCD, DNS, Consul, Apache ZooKeeper.
  • Provisioning: Nginx, GRPC, Vamp, Weave Flux, Traefik, Envoy.

Running:

  • Storage: AWS S3, Hadoop HDFS, Datera, GlusterFS, Minio, EMC {code}, REX-ray, Portworx, solidfire.
  • Containerization: Docker.
  • Networking: VPC, Docker, Flannel, Romana, CNI, Weave Net.

Provisioning:

  • Infrastructure as Code: Ansible, Terraform, Pulumi, CloudFormation, Puppet, Saltstack, CHEF.
  • Image security: Aqua, Anchore, Docker security, Twistlock, Clair.

Infrastructure: AWS (Amazon Web Services), GCP (Google Cloud Platform), Microsoft Azure, DigitalOcean
Log management, monitoring, tracing: NewRelic, Datadog, Sysdig, Weave, Signal FX, Prometheus, Splunk >, ELK stack, Opentrace, Zipkin.

How should I start refactoring my current application into a modern cloud native one?

It's impossible to give a decent piece of advice because proper refactoring depends on what state your infrastructure has and what you are ready to implement now. Indeed not everyone is ready to turn everything upside and start from the beginning. Anyway, we can provide some multi-use recommendations (they are not step-by-step refactoring plans(!)).

  1. Learn DevOps methodology and revamp the business processes and workflow. It's necessary to vanish the silos between all teams and make them cooperate together. That's the first step towards building a cloud-native architecture and treating it in a proper way.
  2. Start small and make tweaking in your code, databases, and tech stack. On average, a substantial piece of code is changed during refactoring and "cloud" tools are selected. Surely, such changes entail some drawbacks like relatively high cost, popping up bugs, resistance from the side of IT staff etc.
  3. If you are ready to refactor completely, be ready to spend plenty of time for coding and making applications fit to cloud native standards. It may occur costly but don't forget about TCO and ROI - your efforts will pay off.
  4. Containerize your environments and applications (only slight modifications are required!). It will allow you to make the apps more portable and integrate cloud-native practices.
  5. If vendor lock-in restriction doesn't bother you, try out serverless app refactoring. It will bring you closer to cloud-native exemplary architecture. Nevertheless, it also requires changes in code and business processes.

Final thoughts

Cloud-native development brings organizations to the next level, allowing them to deliver more quality products and services faster. Besides this evident feature, cloud native architecture obtains superior performance and flexibility - add new tools or services, more resources or functionality and scale down them easily when the need fades away.

Indeed, as stated in Flexera 2020 State of the Cloud Report, even enterprises with their huge legacy applications consider hybrid solutions to be the most winning and not rocky way to modernization. Preference of hybrid cloud solution demonstrates the fact that enterprises have refactored only a part of the application and migrated it to the cloud.

The most challenging parts of refactoring process of a legacy workload into modern cloud indigenous system are

  • relatively high cost of revamping;
  • time needed for renovation;
  • possible bugs and inconsistencies on the early stages;
  • need for changes on the organizational level.

If you are a startup or a mid-sized company, revamping (full or partly) or cloud native development from scratch will not be so thorny and painful for you. It will still require time, budget and changes but not so global. So advantages obviously prevail over disadvantages and refactoring will bring its fruits.

Let's arrange a free consultation

Just fill the form below and we will contaсt you via email to arrange a free call to discuss your project and estimates.