Are Developers Ready for Cloud Platforms?
Are Developers Ready for Cloud Platforms?
Are developers truly prepared to make the jump to cloud? Find out some of the considerations you need to have before deciding.
Join the DZone community and get the full member experience.Join For Free
Container Monitoring and Management eBook: Read about the new realities of containerization.
IT infrastructures are aggressively moving to cloud environments. Most of the organizations have set up a new vision for moving to cloud platforms. These aggressive changes are pushed from top-level executives (CTO, CEO, and CDO), while bottom level architects talking about SaaS, PaaS, and microservices for cloud-native applications. Either side will make developers' hands dirty and struggle to visualize the cloud magic box to find out what will and will not work.
Cloud applications have unique functionalities such as support for distributed architecture with high scalability and flexibility to move across multiple cloud environments (vendor-agnostic approach). From a cloud perspective application development to production support, entirely different tools and techniques need to be followed for utilizing the complete advantage of a cloud platform. Giving training for the developers in the right tools to develop, debug, and test cloud-based is a key challenge. This article talks about new approaches and tools for cloud environments.
Suppose a customer wants to develop new services with a highly scalable infrastructure to support IoT and ybig data platforms. Functional programming is one of the best options that needs to be considered. Top cloud provider support function programmings (AWS Lambda, Azure functions, Google Cloud functions, IBM whisk). Openfaas is another interesting open source project for experimenting with functional programming.
Choosing a Programming Language
Startup time, memory efficiency, binary size, and concurrency are key factors while developing a microservice architecture on a cloud platform.
Golang - A cloud startup trying to decide what language they want to use to explore cloud architecture shoudl consider Go. Go is a good choice which includes features such as concurrency, lightweight, statically typed and compiled language. One of the UK banks (Monzo) has completely build full banking architecture using microservices with Go language.
Java - Most products are developed in Java and have large developer communities available. Spring Boot and Java modules (from JDK-9.0) are good options for cloud-native architecture. This is a good start for migrating legacy systems to cloud platform.
.NET core - As we know, Microsoft was not supporting for open source community a long time. This was one of the main reasons .NET was not adopted by many companies, but Microsoft always gives bug-free development tools, easy syntax, and good tutorials. Microsoft lately recognized that open source options provide more innovation and more business for Azure cloud. As a result, .NET core is attracted by open source community. One of the best option for the Azure cloud platform.
R Math - As many of you noticed, data science fever hits across computer world irrespective of industries but if you look closely, there is no new language invented for solving data science puzzles (statistical and mathematics). Since cloud provides massive computer processing power with low cost, the industry trying to solve AI puzzles using old techniques and tools. R is an implementation of S programming language. S was created in 1976, and R library implements statistical and mathematical functions.
Python - Python supports multiple programming paradigms and strongly types checked. It is easy to learn and has powerful analytics library. It was strongly supported by open source community. These are the reasons for data scientist attracted by Python
Massively scaling up the frontend service and trying to communicate with RDBMS database using a connection pooling will not fulfill the actual use case. Cloud-centric database needs to be selected for building a strong storage platform.
Amazon DynamoDB - It provides single-digit-millisecond latency at any scale. Data stored on NoSQL format and supports documents, key-value store models and also building graph database.
Azure Cosmos DB - It supports global distributed database with horizontal scaling. Data stored on NoSQL format and assured single-digit-millisecond latency at the 99 percent. It not only supports document, graph, key-value, table, and column-family data models, API support extended for multiple languages for more details please refer to the documentation.
MongoDB - MongoDB is one of the early provides of NoSQL DB. It is a very good open source and cost-effective model for customers.
IBM Cloudera DB - Cassandra is an underlying database for Cloudera. It supports Java-based APIs for communicating to NoSQL database.
Oracle NoSQL DB - Finally, Ooracle also joined with NoSQL DB and supports for load balancing and scaling nodes horizontally.
Microservices architecture has brought new challenges for handling failure, routing, and service discovery. ServiceMesh needs to be considered while building cloud-centric services on a large scale.
What is Service Mesh?
Service Mesh was described by buoyant.io as: “...a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud-native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware.” In a simple term, it acts as a proxy layer for communicating with microservices.
Linkerd - It communicates between services and provides an abstract layer for accessing microservices. The key features are service discovery, load balancing, circuit breaking, dynamic request routing and distributed tracing.
Envoy - Originally built at lift for internal use, it has been open sourced as a service mesh platform. This is not designed for the Kubernetes platform. Istio is trying to address these problems.
Istio - It creates the network of deployed services with load balancing service to service authentication. Service monitoring is one of key feature it supports. In the future, we may get professional service support from big vendors such as Redhat.
IoT is another growth area across all the industries. I'm sure many of you heard the phrase “data is a new oil.” Autonomous vehicles, mobile devices, and many more devices pump massive data to cloud platform going forward. Event sourcing is another area which captures complete online user activity. For example, if you log in and browse some mobile and added to cart, remove cart and added another brand, this data is captured as an event source and stored for future usage.Data streaming tools trying to address these problems.
Kafka - As many of you knew about topics (refer message broker concepts), Kafka topic is a stream of records. Kafka producer API and Kafka consumer API supports for interacting with Kafka topic. Kafka cluster has inbuilt feature for creating many broker and servers.
Kinesis - Amazon Kinesis stream has one or more shards. A shard is a uniquely identified group of records in the stream. Amazon claims terabytes per hour can be captured from IoT devices. Kinesis can be integrated via kinesis consumer with other Amazon products such as S3, Redshift, etc.
Containers and Infrastructure as Code
Containerization is a bundle of everything for running software on a cloud environment. Every bundle has a code, environment variable, library and more. These bundles just swim in any cloud environment and give flexibility for moving to a different cloud environment on large scale. I just want to talk about two products, Docker and Kubernetes.
Docker - It provides an open standard for packaging and distributing containerized applications. Docker engine allows to build and run containers. Docker images stored into Docker hub like Maven jars.
Kubernetes - It provides an underlying platform for running multiple containers seamlessly. It supports the orchestrating, distributing, and scaling of containers, and Docker images run in a Kubernetes environment.
These tools and technologies have been discovered through my experience. This is just the beginning for cloud platform and may change based on specific contexts and use cases. Large enterprise companies need to give more importance for developer tools and technologies while building cloud platform. Separate roadmaps needs to be created for application development, storage, security, logging and debugging, monitoring and testing during cloud migration depending on company landscape not just plain roadmap for a cloud. This will give clear idea for developers to increase productivity and achieve the goals.
Opinions expressed by DZone contributors are their own.