While there’s no longer a major debate around whether or not you should move to the cloud, there’s still not a consensus around whether or not you should go with a cloud-native or cloud-agnostic approach when building your application. 

We’re going to look at the difference between the two approaches so that you can make an informed decision when it’s time to choose which one works best for your development team and organization.

What is Cloud-Native?

Cloud-native refers to a modern way of creating and running software applications designed to work specifically with cloud computing technology. In other words, instead of building software applications that work on a traditional server or computer, cloud-native applications are built to run on the cloud.

Here are some examples of what makes a cloud-native application:

    • It is designed to be broken down into smaller, independent pieces of code (called microsserviços) that can work together to provide the application’s functionality. This design makes it easier to develop and update the application.
    • It is deployed using containerization technology like Docker, which allows the application to be packaged with all its dependencies and run consistently across different environments. This deployment makes moving the application from one cloud platform to another easier.
    • It is managed using an orchestration tool like Kubernetes, which automates the deployment, scaling, and management of the application. Using a tool like Kubernetes makes it easier to manage the application as it grows and changes over time.

Cloud-native technologies are designed to support the development and deployment of applications in cloud environments, enabling companies to build highly scalable, flexible, and resilient applications that can be updated quickly to meet customer demands.

Here are the pillars of a cloud-native application with examples:

Pillars of cloud native architecture

Containerization: Applications are packaged and deployed in contêineres, which provide a lightweight and portable way of running software in different environments. Examples include Docker, Kubernetes, and Red Hat OpenShift.

Microsserviços: Applications are designed as collections of small, independent services, each running in its own container and communicating with other services through APIs. Examples include Netflix, Amazon, and Uber.

DevOps: Developers and operations teams work together to automate and streamline the application development and deployment process. Examples include GitLab, Jenkins, and CircleCI.

Continuous Delivery: Code changes are tested and deployed automatically, reducing the time and effort required to release new features and updates. Examples include Travis CI, AWS CodePipeline, and GitHub Actions.

Backing Services: Applications rely on external services, such as bancos de dados or message queues, which are managed independently and can be easily replaced or scaled up/down as needed. Examples include Amazon RDS and RabbitMQ.

In modern cloud-native designs, observabilidade is one of the pillars to be considered when designing applications. So when applications are designed to provide detailed metrics, logs, and tracing information, it makes it easier to monitor and debug issues across different environments. Observability also helps identify unknown patterns, so you can be proactive and ready with solutions before a problem occurs. 

For more context about Google and Microsoft cloud-native pillars, you can check out the resources below:

What is Cloud-Agnostic?

Cloud-agnostic refers to an approach to software development designed to work on any cloud platform. This means that the software application can be deployed on different cloud providers without any modification to the code.

For example, think of an application that you use on your phone. You can download the same application from the App Store if you have an iPhone or from the Google Play Store if you have an Android phone. The application is designed to work on both platforms without modifying the code. This cloud-agnostic example is similar to how the application works.

According to Statista, the most popular cloud providers from a market share perspective are AWS, Azuree GCP. Other cloud providers include Alibaba, IBM, and Oracle.

Cloud-agnostic applications are built using standard technologies not specific to any cloud provider. For instance, an application may be built using programming languages like Java or Python or web technologies like HTML and CSS. These technologies are widely used and can run on any cloud platform.

Examples of cloud-agnostic applications:

    1. Kubernetes: An open-source container orchestration system that can run on any cloud platform. It enables developers to deploy and manage containerized applications across multiple clouds.
    2. Docker: An open-source platform for building, shipping, and running applications in containers. It can run on any cloud platform and provides a consistent environment for running applications, regardless of the underlying infrastructure.
    3. NGINX: An open-source web server that can run on various cloud platforms, including AWS, GCP, and Azure.
    4. Elasticsearch: A distributed search engine that can run as a service on multiple cloud platforms, including AWS, GCP, and Azure.

This approach to software development is useful because it allows organizations to choose the best cloud platform for them based on cost, performance, and reliability. It also provides flexibility to switch cloud providers if needed without requiring any changes to the application.

Cloud-Native vs Cloud-Agnostic: Architecture, Benefits and Drawbacks

Now that we’ve reviewed the basics of how cloud-native and cloud-agnostic approaches differ, it’s important to go over the benefits and drawbacks of each approach to designing and deploying applications in the cloud. Choosing between cloud-native and cloud-agnostic will have significant implications for your application’s architecture, performance, scalability, security, and cost.

For example, if an application requires high levels of performance, scalability, and resilience, a cloud-native approach may be more suitable, as it takes advantage of the specific features and capabilities of the underlying cloud platform to achieve these goals. However, if an application needs to be more flexible and portable across different cloud providers or infrastructures, then a cloud-agnostic approach may be more appropriate, as it is designed to run on any cloud platform without being tied to a specific provider.

Let’s review the benefits and drawbacks of each approach:

Cloud-Native Approach

Cloud-Agnostic Approach

Benefícios Escalabilidade: Can scale horizontally and handle increased traffic and workload without disruption.

Resiliência: Can quickly recover from failures, ensuring high availability and uptime.

Agilidade: Can be easily updated and deployed, allowing organizations to quickly adapt to changing business needs.

Eficiência: Can be optimized for cloud environments, resulting in lower infrastructure costs and higher performance.

Flexibilidade: Can run on any cloud platform, giving organizations the freedom to choose the best cloud provider based on their needs.

Reduced vendor lock-in: Cloud-agnostic applications are not tied to a specific cloud platform.

Custo: Cloud-agnostic applications can be more cost-effective than cloud-native applications, as they do not rely on specialized cloud technologies and services.

Drawbacks Complexidade: Cloud-native architectures can be complex and require specialized skills to manage and maintain.

Vendor lock-in: May rely on specific cloud services and technologies, making it difficult to switch to a different cloud provider.

Custo: The cost of building a cloud-native architecture can be higher than a traditional application architecture.

Limitações: Cloud-agnostic applications may not be able to take advantage of specific cloud technologies and services.

Complexidade: Can be complex and require specialized skills to manage and maintain.

Compatibility: Can require additional work to ensure compatibility with different cloud platforms.

Overall, cloud-native offers high performance and scalability, but it may be more expensive and require specialized skills to manage. Cloud-agnostic provides better flexibility and lower costs but may be limited in terms of functionality and performance.

Which Companies Use a Cloud-Native Strategy?

Many companies use cloud-native strategies to build, deploy, and manage their applications in the cloud. Here are some examples of companies that have adopted cloud-native approaches:

    1. Netflix: Netflix was one of the early adopters of cloud-native strategies, using open-source tools like Apache Cassandra, Apache Kafka, and Netflix OSS to build and manage their applications in the cloud.
    2. Spotify: Spotify uses a cloud-native approach to manage its massive streaming platform. They use Kubernetes and other cloud-native technologies to scale their application and handle spikes in traffic.
    3. Airbnb: Airbnb has adopted a cloud-native approach to building and managing its applications in the cloud. They use technologies like AWS, Docker, and Kubernetes to improve scalability, reliability, and performance.
    4. Capital One: Capital One has embraced a cloud-native approach to improve its agility and reduce time to market for its applications. They use cloud-native tools like AWS Lambda and Kubernetes to manage their applications in the cloud.

These are just a few examples of companies that have adopted cloud-native strategies. Many other companies, from startups to large enterprises, also use cloud-native approaches to build and manage their applications in the cloud.

Which Companies Use a Cloud-Agnostic Strategy?

Many companies, especially those with complex infrastructure and mission-critical applications, have adopted a cloud-agnostic strategy to avoid vendor lock-in and maximize flexibility. Here are some examples of companies that have used a cloud-agnostic strategy:

Here are some companies that have adopted a cloud-agnostic strategy:

    1. Snowflake: A managed data warehouse solution available on all three cloud providers: AWS, Azure, and GCP, while retaining the same end-user experience.
    2. HashiCorp: A cloud infrastructure automation company that uses a cloud-agnostic strategy to support multiple cloud platforms, including AWS, GCP, and Azure.
    3. PagerDuty: A SaaS incident response platform for IT departments. Its platform integrates data from your tools to provide a holistic view of your IT infrastructure across hybrid services and environments.

Conclusão

As every business has unique requirements, it’s crucial to evaluate the trade-offs of employing a  cloud-native or cloud-agnostic approach. By exploring the key characteristics of each, keeping in mind the implications the approaches will have for the architecture, performance, scalability, security, and cost of your application, and reviewing some of the companies who’ve used each approach, you should be in a better position to make an informed decision about which strategy will better suit your organization.

Autor

A ordem da postagem em relação a outras postagens. Jeff Morris, vice-presidente de marketing de produtos

Jeff Morris é vice-presidente de marketing de produtos e soluções da Couchbase. Ele passou mais de três décadas comercializando ferramentas de desenvolvimento de software, bancos de dados, ferramentas analíticas, serviços em nuvem e outros produtos de código aberto. Ele seria o primeiro a dizer que qualquer pessoa que esteja procurando um banco de dados como serviço rápido, flexível, familiar e acessível da nuvem para a borda pode parar de procurar depois de conhecer o Couchbase.

Posição vertical a partir do topo para iniciar o corte como uma porcentagem da altura da imagem.