What is Cloud Native software development?
Cloud Native Development is a set of software development methods that benefits from the cloud computing model to create and run applications, managing the complexity of the required architecture, and enabling faster delivery of functionality and updates.
The Cloud Native approach focuses on splitting a large problem into smaller problems and automating each process of the necessary operations. This reduces downtime and creates more productive and efficient systems, while providing more control over the implementation in the different environments of our application. It also offers tools that report on the health of our application, speeding up the debugging process if errors occur, allowing us to solve problems quickly and efficiently, as well as auditing the performance of our software with the different cloud services.
We should also keep in mind that the different cloud service providers consider the security of the application, its data and its low latency accessibility as their top priority. Thus, they provide different tools for developers to guarantee the security of their application, while also being able to deploy it in any country or region in a very simple way.
The Stack Overflow community’s annual 2022 survey on the percentage of professional developers using different cloud platform providers shows their usage trends in the following image:
Figure SEQ Ilustración \* ARABIC 1: Survey 2022 Stack Overflow – Cloud platforms
Why do we trust Python for cloud-native development?
Python is one of the most popular languages nowadays. Since its creation, it has maintained a philosophy that emphasises readable, clean and easy-to-learn syntax. Unlike other programming languages that focus more on parentheses, brackets, colons and commas, Python uses line breaks and groups one inside the other with tabs (4 spaces). Hence, developers can focus on spending more time on programming and less time on debugging syntax.
Its interactive mode helps to debug the code directly from the Shell and test each code fragment in a fast and fluid way.
It has a variety of libraries that can be easily extended based on the requirements of your application, which are supported by a large active community that collaborates every day in the creation of these libraries.
It is scalable, thus providing a better structure for maintaining large programmes in a more systematic way.
Python is a very versatile language as it can be used in different fields such as web development, Big Data, Machine Learning, scripting, desktop application development or video games, among others. It should also be noted that it is an open source and multiplatform language (Linux, Windows and Mac).
The TIOBE programming community’s indicator of the popularity of programming languages places Python in first place in July 2022. This index is updated on a monthly basis and shows the number of available courses, suppliers and software engineers trained to carry out developments globally.
Figure 3 TIOBE Index for July 2022
If we compare the Spanish search trends using Google’s search engine for the programming languages Python, Java and .Net, we can see in the following chart:
Figure 4 4 Google trends – Python, Java, .Net
All this makes it possible to establish that both the language and the community of professionals behind it support the decision to use it for Cloud Native development.
Back to Cloud Native: example of services and architecture
A guide for tuning our cloud-native applications with Python would be “The twelve-factor App” or 12-factor methodology ((https://12factor.net/es/), which is a manifesto for developers to follow when creating modern web applications or service-based applications (SaaS).
It focuses on the development, deployment, speed, cost, security, and scalability involved in the creation of a new application, highlighting the declarative configuration therein.
An easy way to explain “12-factor” without having to address each of its points, is to imagine a puzzle that is divided into different pieces (which would be each of our services) independent of each other that, when connected (in our case, it would be the communication between each service), make up our application.
Each defined environment within a project, such as development, QA, and production environments, must be identical. This ensures we get similar results in each one, allowing for continuous delivery from development to production.
This way, creating an architecture without the use of cloud services is very complicated and would increase both the error rate and the implementation time. Not to mention real-time monitoring of log records and performance, either at platform or application level, this would make our ecosystem very complex. Yet, it is very easy to implement when using Cloud Native.
Cloud Native architecture with Python can be built in different ways depending on the requirements of the project and the goal that the business wants to achieve.
One of the alternatives for architecture design is the creation of microservices where an application is divided into small independent services, communicating with each other either through REST APIs, events or gRPC (an Open-Source implementation of RPC remote procedure calls originally designed by Google). In a typical case, the Cloud tools or services that can be used in the main providers would be:
- Amazon Web Service: EC2 Container Registry (ECR), EC2 Container Service (ECS), Elastic Container Service for Kubernetes (EKS).
- Microsoft Azure: Azure Container Registry, Azure Kubernetes Service (AKS).
- Google Cloud: Container Registry, Container Registry.
However, a serverless approach could also be used for which services such as Cloud Foundry, Heroku, Amazon Beanstalk, Amazon Lambda, Azure Functions, etc. could be used.
It is worth noting that not all cloud services are required, both for a microservices-based architecture and for a serverless one. This is because an application also requires database, storage space, queue management, cache management, among many others, where each Cloud provider offers different alternatives.
To understand a bit more about Cloud Native, let’s create a small serverless microservices architecture for an online bookstore application (which is an example of an application that almost everyone is familiar with). As it is an example, the architecture will only include a shopping cart, a book catalogue, and a recommendation service, although an online shop is made up of many more services.
We will make sure our architecture is solid and simple for developers to implement.
But first let’s set up the following scenario to consider we have a team of 10 developers and each of them is adding a new functionality to the project, such as managing the shopping cart, adding new fields to the book model, adding a recommendation view.
In this scenario, we should consider the following questions in order to select the best solution:
- Do we want all that code to be in a single monolithic application?
- Will the database code and schemas be easy to maintain when trying to incorporate new functionalities?
- What would it cost to maintain a stable infrastructure to support our applications, such as servers, database, communications, storage management, upgrades, security, and monitoring for all necessary environments?
- How easy will it be to retain human talent to keep the required technology stack throughout the lifecycle of our application?
To ensure the best answer to these questions, we will present the following serverless example of a microservices-based architecture supported in the Cloud. These services could also be used if we were to use an architecture defined on top of the AWS service provider:
Figure 55 – Architecture de ejemplo sobre AWS
As we can observe, we have:
- An API Gateway that will help you create, publish, and maintain the REST API of the online shop.
- The Amazon Cognito service, which incorporates the registration, login, and access control of our application users, delegating the security of sensitive data to our Cloud service provider.
- CloudFormation creates a model describing the resources and dependencies required for each of our microservices to allow for them to be deployed in a simple, automated, and reliable way.
- AWS Lambda will execute each function of our code and apply the necessary business logic without requiring a server.
- Amazon DynamoDB is the data base we use. It is a Nosql data base without server and completely managed by the Cloud services provider, where we will store the data of each microservice.
- Amazon Neptune is a fast and reliable data base service for modelling book recommendations.
- And last but not least, we have Amazon CloudWatch as a monitoring and observability service for everything that happens with our services.
With this architecture we could have an online shop, where we would only need to worry about developing new functionalities and maintaining the quality of our software, thus minimising the costs of operating the infrastructure and all its implications.
Even though this is a simplified example of what a business application can be, we have not detailed the multiple different services of Cloud providers to natively implement in the Cloud any type of architecture that supports the various existing business needs.
SATEC has been for yeas designing, managing, migrating, and deploying complex architectures for our clients. We also contribute to their support, operation, managment and evaluation, both in Cloud and hybrid environments.
All this makes us an ideal ally for the digital transformation of all business processes of any company towards the native Cloud. We can customise an infrastructure depending on the requirement of each project and develop the different services quickly and effectively, aiming to ensure high quality, reliable and efficient applications, with continuous delivery implementing agile methodologies.
If you want more information about Satec do not hesitate to contact here 👈