DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Because the DevOps movement has redefined engineering responsibilities, SREs now have to become stewards of observability strategy.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Related

  • Best Practices for Microservices: Building Scalable and Efficient Systems
  • A Step-by-Step Guide to Write a System Design Document
  • Designing Scalable and Secure Cloud-Native Architectures: Technical Strategies and Best Practices
  • Using CNTI/CNF Test Catalog for Non-Telco Cloud-Native Microservices

Trending

  • Event Driven Architecture (EDA) - Optimizer or Complicator
  • Scaling Microservices With Docker and Kubernetes on Production
  • Rust, WASM, and Edge: Next-Level Performance
  • Enforcing Architecture With ArchUnit in Java
  1. DZone
  2. Software Design and Architecture
  3. Cloud Architecture
  4. Building Resilient, Scalable Cloud-Native Applications: How To Meet Business Needs While Providing Redundant Solutions

Building Resilient, Scalable Cloud-Native Applications: How To Meet Business Needs While Providing Redundant Solutions

Learn how cloud-native application design allows software engineers to remain focused on meeting customer needs as a solution to utilize at the use case level.

By 
John Vester user avatar
John Vester
DZone Core CORE ·
Jul. 25, 23 · Analysis
Likes (5)
Comment
Save
Tweet
Share
32.5K Views

Join the DZone community and get the full member experience.

Join For Free

This is an article from DZone's 2023 Development at Scale Trend Report.

For more:


Read the Report

Back in 1986, I relocated to Boulder, CO, to work for my uncle's start-up company. When we arrived at the office that first day, he helped me to a nearby desk supporting a Compaq Portable computer. On top of the system was a book focused on using dBase II. My job was to build an application to track orders for his company. My uncle knew I had an interest in computers, and I couldn’t wait to get started. This became my first experience in learning how applications were built in an era of microcomputers. The flow was quite simple: 

  • Document the requirements on what was needed
  • Create a design that meets the defined needs
  • Build and debug the solution
  • Validate the solution works as expected
  • Figure out how to distribute the solution
  • Ask customers to adopt and use the solution

The No-Web application development lifecycle

Figure 1: The No-Web application development lifecycle

While we are currently building applications and services in a Web2 and Web3 world, this era is what I often call the "No-Web" era of application design. 

Evolution of World Wide Web iterations

Figure 2: Evolution of World Wide Web iterations

A few years later, I remember distributing Turbo Pascal-based applications on floppy disks for use by insurance agents located around the United States. Later, applications were stored on file servers that were housed in a corporate data center. The Web1 iteration was still a few years away.

While most of the application development lifecycle steps haven’t really changed, some important factors have emerged with cloud-based service providers: 

  • Adoption of a centralized approach
  • Scalability improvements
  • Application and service resiliency

All of these aspects are benefits of cloud-native applications.

What Does Cloud Native Mean?

Wikipedia defines cloud-native computing as using cloud services "to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds." The transformation to the cloud became a high priority as corporations and startups became excited about getting out of the business of maintaining data centers.

Cloud-native applications are more than applications running in the cloud. One key differentiator is the manner in which applications are designed to run natively in the cloud. The adoption of containers, serverless, and microservices provide solutions that are easy to deploy from one environment to another — providing horizontal scalability and multi-region support at the same time. 

With the hardware layer abstracted from the codebase, cloud-native applications can scale vertically just as easily.

The Cloud-Native Approach

Adopting a cloud-native approach provides software engineers multiple greenfield opportunities as applications can be broken down into multiple aspects using common approaches:

  • Serverless – allows event-driven requests to be offloaded to a functional-based lambda
  • Microservices – breaks large applications into smaller processing units
  • Containers – allows applications to become packaged into an isolated multi-layer container for distribution

For each aspect, cloud service providers offer add-ons which can be utilized to enhance the experience. Some common examples include: 

  • API gateway – provides protection to services and handles common components (like authorization requests)
  • Auto-scaling – scales up (and down) based upon pre-configured thresholds
  • Caching – stores requested information in memory-based cache to avoid longer-running application requests
  • Failover – automatically routes traffic to secondary nodes for processing
  • File storage – object storage that is infinitely scalable and highly performant
  • Load-balancing – distributes requests to instances which can be located in different geographical locations
  • Orchestration – container solutions are automated, scaled, and managed at a grand scale 
  • Persistence – use of SQL- and NoSQL-based data storage options
  • Secrets management – avoids exposure of highly sensitive information

Since the cloud-native approach can be architected at the smallest grain, the resulting cloud-native application can yield the best solution for each aspect of the design, as illustrated in the simple example in Figure 3: 

A cloud-native application built from multiple cloud service features

Figure 3: A cloud-native application built from multiple cloud service features

Benefits of Cloud Native

Benefits of Cloud Native The cloud-native approach for building applications allows software engineers to architect solutions that employ the best technology at the use case level. This means that one use case could employ an event-driven serverless solution, while another can utilize a microservice backed by a SaaS-driven persistence layer. 

Cloud-native applications allow for a hybrid design of components that foster the best application experience.

The cloud-native approach allows components of the application to be scaled up (and down) as demand changes. This means the demand for one microservice does not require the same level of resource allocation for any other microservice. Additionally, component instances can be scaled horizontally across the same (or different) geographical regions. 

Since the hardware layer is abstracted from the application layer, those architecting cloud-native applications can remain focused on meeting business needs and corporate objectives.

These benefits provide a strong advantage when compared to applications designed to run in local data centers. The differences only widen when concepts like contingency planning or disaster recovery are considered. 

Challenges of Cloud Native

While cloud-native computing may appear to be application design nirvana, there are some challenges that should always be considered. The primary critique of cloud-native computing is the potential for costs to incur at higher levels than expected. 

Some common examples: 

  • Losing track of prototype components that were never decommissioned
  • Snapshots created automatically without an established retention schedule
  • Over-allocation of hardware resources in cases where a cheaper option exists

Most cloud service providers provide excellent tooling to project and analyze costs, but it must be a widely adopted standard to make cost control a priority. When working in multiple regions around the world, it is important to understand regulations that exist — especially with sensitive data. Failure to comply could result in penalties or fees. 

Cloud providers offer the ability to provide multi-region failure and disaster recovery protection. However, these advanced concepts can be challenging to architect and design in a manner that allows for automatic failure but also protects against unexpected data issues.

Conclusion

As software engineers, we’ve come a long way since the No-Web era of application design. However, the one aspect that hasn’t changed for me is that I still get excited when I receive an opportunity to architect and design a new application. 

I have been focused on the following mission statement, which I feel can apply to any IT professional: 

Focus your time on delivering features/functionality that extend the value of your intellectual property. Leverage frameworks, products, and services for everything else.

Cloud-native application design adheres to my personal mission statement 100% because it allows for software engineers to remain focused on meeting the business needs of the customer: allowing the best solution to be utilized at the use case level. However, like every decision we make in life, we must always be cognizant of the associated costs.

Have a really great day!

This is an article from DZone's 2023 Development at Scale Trend Report.

For more:


Read the Report

Design Disaster recovery microservice Cloud native computing Scalability

Opinions expressed by DZone contributors are their own.

Related

  • Best Practices for Microservices: Building Scalable and Efficient Systems
  • A Step-by-Step Guide to Write a System Design Document
  • Designing Scalable and Secure Cloud-Native Architectures: Technical Strategies and Best Practices
  • Using CNTI/CNF Test Catalog for Non-Telco Cloud-Native Microservices

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!