top of page

How I Improved the Reliability and Availability of a Client’s Stabilization System Using AWS

In Today’s Article:

👱(Real-life example) Client’s Key Challenges

✍️Creating User Requirements

☁️Architectural Design

📈Implementation: Overcoming Storage Failures and Improving Performance

✅Configuring a user data script to display instance details in a browser

✅Launching EC2 instances

✅Implementing high availability using Multi-AZ replication

✅Implementing a reliable and scalable block storage solution

🎯Results and Benefits



Hi friends, welcome 😃

Today, I’ll take you through the process I followed to solve storage and reliability issues my client was facing. We’ll also have an in-depth look at my implementation process and potential quantitative outcomes of my approach. 



👱(Real-life example) Client’s Key Challenges

My client possesses computational resources that host a stabilization system for an entire island. It plays a crucial part in maintaining the island’s digital and operational processes. The computational infrastructure is currently set up on an on-premises server. The system also fails with increased workload, giving it inconsistent performance. 

Here is what my client expressed:

"... the current system is failing and lacks resilience. We urgently need a reliable and scalable storage solution that can withstand failures and provide consistent performance with high availability and replication to protect our island’s delicate equilibrium.  "


✍️Creating User Requirements

As a Solutions Architect, writing user requirements provides me with clarity of challenges my client is facing and possible solutions I can come up with. 

Hence, my client needs a scalable and fault-tolerant storage solution that can:

  • Ensure high availability and replication.

  • Provide consistent performance across workloads.

  • Withstand failures without data loss.



☁️Architectural Design

To meet these requirements, I focused on these 3 key areas: high availability, scalability, and storage


Architectural design
Architectural design


As shown in the architectural design above, I migrated my client’s stabilization system to AWS to enhance performance and streamline operations.

  1. Network Load Balancer(NLB): a load balancer manages traffic by distributing traffic among servers to ensure no one server is overloaded or underloaded. I specifically used a NLB because my client’s system requires low latency and high throughput given that it ideally operates almost entirely in real time. The system also uses TCP and UDP protocols.

  2. Auto Scaling Group: to address my client’s need for resilience, I employed an Auto Scaling group to achieve horizontal scaling. It holds EC2 instances and EBS block volumes. The Auto Scaling Group will increase the number of resources it holds in or out based on the workload.

  3. Multi-AZ deployment: distributing compute and storage resources across 2 availability zones helps to achieve my client’s need for high availability. This way, if a compute or storage resource in one availability zone fails, the other availability zone’s resource can be used with little to no downtime.

  4. Compute and storage resources: in order to handle processing operations of my client’s system, I used EC2 instances. For storage, I used Amazon Elastic Block Storage(EBS). As a storage service, EBS fulfills my client’s need for a reliable and scalable block storage solution.  



📈Implementation: Overcoming Storage Failures and Improving Performance


Using the design above, I followed these steps to implement a solution.


✅Configuring a user data script to display instance details in a browser

I wrote a program (a user data script) that essentially launches a web server, using port 80, to display internal information about an instance. It captures an instance’s ID, availability zone and type. (If you’re interested in checking out the user data script, click here).


Upon copying an instance’s Public IPv4 DNS and running it in a browser, you get the output below. 


EC2 details on a browser
EC2 details on a browser


✅Launching EC2 instances

Using the AWS Management Console, I launched EC2 instances in 2 availability zones. Some of their configurations included: an Amazon Linux OS, an 8 GiB root volume, and a security group that allows inbound HTTP traffic from anywhere. 


Launched EC2 instance
Launched EC2 instance


Security group of an instance
Security group of an instance


✅Implementing high availability using Multi-AZ replication

I launched both EC2 instances in different availability zones within a shared region.


✅Implementing a reliable and scalable block storage solution

From the EC2 dashboard, I created 2 General Purpose SSD EBS volumes and attached them to the instances. 



🎯Results and Benefits

Implementing the above architectural design could potentially bear the following results: 

  • Achieving a 99.99% uptime.

  • Reducing the Recovery Time Objective(RTO) from several days to 4 hours.

  • Maintaining optimal performance under varying workload.

  • Achieving a 99.999% durability of data due to the replication of EBS volumes across availability zones. 



Ultimately, by leveraging AWS services like EC2 instances, EBS volumes, Auto Scaling Groups, and Multi-AZ deployments, I was able to create a robust architecture that can withstand failures and provide consistent performance under varying workloads. The implementation of this architecture ensures that my client’s stabilization system is now better equipped to handle its growing demands while maintaining a delicate balance of performance, availability, and resilience.


Have you faced similar challenges with scalability and reliability in your system? Let me know in the comments 


Until next time—toodooloos! 😊 


 
 
 

Comments


bottom of page