High Availability Architecture Design and Its Key ComponentsSystem architecture is a generic discipline to handle systems in a way that support reasoning about ...
System architecture is a generic discipline to handle systems in a way that support reasoning about the structural properties of these objects. It’s a response to the conceptual and practical difficulties of the description and the design of complex systems.
The complexity of a system depends on:
Integration of components
There could be multiple interrelations between the components of a system with recursive levels of integration.
Heterogeneity of components
As designing a complex system involves several specialized fields; it becomes difficult to keep a unified vision of a system.
Depending on the context, system architecture can refer to:
- A model to describe and analyze a system
- A method to build the architecture of a system
- A discipline to master system design
High Availability Architecture
At times, you can experience dip in the performance of your servers due to events like sudden spike in traffic that can even cripple them. Instead of hoping that such things don’t happen to your system architecture, you need to gear up for it.
The solution lies in High Availability (HA) architecture. The approach defines the modules, components and implementation of services of a system for optimal operational performance, even at the time of high loads. It simply refers to a component or system that is continuously operational for a desirably long period of time. High availability architecture ensures that your system or application is configured to handle different loads and different failures with minimal or no downtime.
Achieving High Availability
Modern designs allow for the distribution of workloads across multiple instances which help in optimizing resource use and preventing overburden of any system in the process, which is known as Load Balancing.
Do the following to achieve High Availability for your system architecture:
Multiple application servers
Deploy your applications over multiple servers to equally distribute the load so that none of them is overburdened and you get the optimized output.
Do the redundancy check to achieve failure detectability and preventing common cause failures. Maintain Slaves who could step-in in case the main server crashes. Do a horizontal partition in database (sharding) where rows of the same table are run on separate servers.
Diversified geographical location
Keep your servers in different locations to save yourself from the consequences if something terrible like natural disaster happens to a location. Ensure that your servers are distributed all over the world and not localized in an area.
We will elaborate five key components:
- AWS EC2
- Application Load Balancer
- Auto Scaling
- RDS, and
- CloudFront of a scalable and highly available system architecture design in a little detail here.
1. AWS EC2
Amazon EC2 (Elastic Compute Cloud) is a web-based service that allows businesses to run application programs in the Amazon Web Services (AWS) public cloud. It provides resizable compute capacity in the cloud. The cloud computing service is designed to make web-scale computing easier for the developers. This web service interface allows the developers to obtain and configure capacity with minimal friction.
Virtual Machines on AWS EC2, also known as Instances, offer many advantages like being highly scalable (one can choose instances with more CPU, RAM etc.), they are easy to start and stop and allow for the selection of various platforms. Different virtual machines are available for different purposes. EC2 reduces the time required to obtain and boot new server instances within minutes, allowing you to quickly scale the capacity as needed.
Here are the key benefits of EC2 architecture
Elastic web scale computing
It allows you to commission thousands of server instances simultaneously and your application can automatically scale up and down as per need.
Flexible cloud hosting
Amazon EC2 allows you to select instance storage and boot partition size that is optimal for your choice of application and operating system.
Complete control of instances
You can root access to your instances, stop your instances while retaining the data on your boot partition and restart the same instance using web service API.
All your compute instances are located on a Virtual Private Cloud (VPC) with an IP range that you specify. You decide which instances to expose to the internet and which one to keep private.
Ease of use
It can be used in conjunction with Amazon Sample Storage Service (Amazon S3), Amazon Sample Query Service (Amazon SQS), and Amazon Relational Database Service (Amazon RDS) to provide complete solution for computing query.
With on-demand instances, reserved instances, spot instances and dedicated hosts, Amazon EC2 passes on to you the financial benefits of Amazon’s scalability.
Other features of Amazon EC2 include:
- Preconfigured templates for instances
- Secure login information for instances
- Storage volumes for temporarily deleted data
- Multiple physical locations for resources
- Static iPv4 addresses for dynamic cloud computing, and
- Virtual networks that are logically isolated from the rest of the AWS cloud.
Getting started with Amazon EC2
If you’re signed up for an AWS account, you can access Amazon EC2 console by signing into the AWS Management Console and selecting EC2 from the home page of console.
2. Application Load Balancer
Application load balancer allows a developer to configure and route the incoming end-user traffic to the applications based in AWS. It pushes traffic across multiple targets in multiple AWS availability zones. It inspects packets and creates access points to HTTP and HTTPS headers. Based on load type, the Application Load Balancer spreads out the target with higher efficiency based on application traffic flowing in HTTP messages. It has support for WebSocket and also conducts health checks on connected services on per-port basis. These health checks specify a range of acceptable HTTP responses, and are accompanied by detailed error codes.
Adding listeners for rules configuration
A developer can add Listeners to load balancers and configure rules that include conditions and corresponding actions. Listeners are procedures that wait for specific events to occur. Application load balancer supports content-based routing and applications that run in Containers. It has access to HTTPS headers and allows you to route requests to different backend services. One can define up to 10 URL-based rules to route requests to the target groups.
Application load balancer multiplies new CloudWatch metrics including the number of active connections, overall traffic in GB and the connection rate per hour. It is designed to handle streaming in real-time and WebSocket workloads in an optimized manner. In connection with Auto Scaling, elastic load balancing significantly simplifies the task of building applications that scale up and down while keeping the high availability.
3. Auto Scaling
AWS Auto Scaling monitors your applications to maintain steady performance at low cost. The service provides the developers powerful user interface to build scaling plans for the resource including EC2 instances, Amazon Aurora Replicas and Amazon DynamoDB tables and indexes. It makes scaling simple with recommendations to balance performance costs.
Here are the key benefits of auto scaling
Smart scaling decisions
It automatically creates all of the scaling policies and sets targets for you based on your preferences. You can optimize costs and availability, and balance both.
Automatically maintain performance
It allows you to maintain optimal application performance and availability even when the workloads are unpredictable.
Quick scaling setup
Auto scaling allows you to quickly see the average utilization of all of your scalable resources without having to navigate to other consoles. One can set target utilization levels for multiple resources in a single, intuitive interface.
Pay only for the resources you need
You pay only for the resources you need as auto scaling will automatically remove any excess resource capacity when the demand drops.
4. Amazon Relational Database Service (RDS)
The service makes it easy for you to setup, operate and scale a relational database in the cloud. It allows you to provide fast performance, security, high availability and compatibility to your applications.
Here are some of the tedious management tasks performed by RDS:
- You can easily scale CPU, storage, memory and IOPS as per your need.
- It delivers a managed service experience by restricting access to certain system procedures that require advanced privileges.
- Manages software patching, automatic failure detection, backup and recovery.
- Provides high availability with primary instance and a synchronous secondary instance.
- Allows you to have automated backups performed when you need them, or manually create your own backup snapshot.
- You can define users and permissions to access the RDS using AWS Identity and Access Management (IAM).
5. Amazon CloudFront
It’s a global content delivery network (CDN) service that securely delivers data, applications, videos and APIs to the viewers with low latency and high performance speeds. It speeds up the distribution of static and dynamic web content such as .html and .css to the end users. It works in conjunction with other Amazon Web Services for content distribution to the end users. Once content is put in an origin server, such as Amazon Simple Storage Service bucket, it is pushed out to multiple CloudFront servers as per the requested content.
CloudFront accelerates the delivery of dynamic content by moving it closer to the user by minimizing the internet hops. The service is highly useful for the organizations in need of higher response times and large file content that they want to distribute to a sizeable number of users. It’s the CloudFront edge server that provides fastest delivery to the viewer which improves performance. Users experience lower latency and higher data transfer rates.
Flexsin has extensive expertise in designing salable, High Availability system architecture for businesses large and small. Contact Flexsin to discuss your system architecture needs and we will work to design the best architecture for you for highly optimized performance.