Global Accelerator is a fully managed network traffic manager. Global Accelerator is a network layer service in which you create accelerators to improve availability and performance for internet applications used by a global audience. This network layer service is for a global customer using the Amazon network backend. As per Amazon documentation, customers have seen 60% network improvement while using this Global accelerator.
Global Accelerator provides “anycast” public IP from Amazon pool or you can provide one. With this static entry point, you will improve the availability and reliability of your application. Global Accelerator improves performance for all applications over TCP and UDP protocols by proxying packets at the edge. Accelerator ingress traffic to AWS closest to the end-user resulting in better performance.
Global Accelerator helps to create “Robust architecture“. It will help to increase network stability by using the AWS backend network. It provides health checking-based routing.
Accelerator routes traffic to optimal AWS endpoint based on –
- Endpoint Health (For Disaster recovery solution)
- Client Location(Geo fencing)
- User-configured weights(For active/active or active/passive) applications.
The accelerator can use a TCP/UDP-based protocol. It will use the following endpoint –
- Application Load balancer
- Network Load balancer
- Elastic IP address
- Gaming Industry (Use NLB instread of ALB)
- IoT based data collection
- Disaster recovery(Fast regional failover)
- Voice over IP
Architecture for Disaster Recovery
I am using Global Accelerator for Disaster Recovery configuration. The same configuration can be used for Active/Active inter-regional application configuration.
The user will connect to Global Accelerator DNS address. Route 53 can easily be used for custom website links. Create DNS “A” record pointing to AWS Global Accelerator “Anycast” IP address. AWS global accelerator will transfer data user to appropriate Load balancer. In this blog, I am mainly focusing on the usage of AWS global accelerator, After ALB, you can create tiered software architecture. Take a look at my other Three-tier architecture blog for more details.
If you like to have source code email me at firstname.lastname@example.org
I am using terraform to deploy my infrastructure. Following are the resources that will be deployed using terraform –
- Working in two different region – “us-west-2(primary)” and “us-east-1(DR/secondary)”
- Global Acceleretor with two endpoint each targeted to ALB of that region. Traffic distributed equally.
- Application Load balancer (ALB) one at each region. Target group points to EC2.
- Two EC2 instance with Apache installed on it. They will act as web/app server for my application. In production environment, auto-scaling will be used for better Elasticity.
- one VPC per region
- Two subnet per region in different AZ
- Security group, Internet gateway, Route table, IAM role for instance profile etc.
Output from Terraform. This will create 46 resources total.
- application_dns_name : Point this address to route 53 “A” record for customer website link
- accelerator_static_ip_sets : anycast ip address
- lb_dns_name : Load balaner IP for region 1
- lb_dns_name_east : Load balaner IP for region 2
- region1 : Region 1
- region2_dr : Region 2
- vpc_cidr : VPC CIDR Region 1
- vpc_cidr_dr : VPC CIDR Region 2
I am pointing to “Application_dns_name” link that generated from terraform output. My webserver is connected to “us-west-2” region than “us-east-1” because “us-west-2” region is closed to me.
Both Availability zones are used in nearly round-robin way.
AWS global accelerator instance is created with two static anycast IP address. You can point “Rote 53” to both IP addresses for redundancy.
Configured TCP port 80 listeners. That means this accelerator will listen on port 80. You can use licentner on any port with TCP and UDP protocol.
The endpoint group is per region. I have configured two regions one for “us-east-1” and “us-west-2”. Traffic dial determines how my load is distributed across regions.
For active/active configuration : use weight at same @ 100.
For Disaster recovery or “active/passive” configuration: use the first region as 100% and DR region uses 0%. Then DR region will not accept any traffic until the primary region is down.
Each endpoint is grouped together with different endpoints. One can use NLB, ALB, or Elastic IP endpoint as different endoiint. Weight will be defined as a priority. In my case, I am pointing my request to ALB. Those ALB intern transfer request to EC2 instance for web application. Both group are pointed to its own ALB from a its region.
To simulate disaster in a region, I am deleting my ALB from “us-west-2” region(which is closest to me).
After deleting I am ALB, I am not able to access the website momentarily.
Endpoint configuration detected that “us-west-2” endpoint is unhealthy.
I have constantly, set my ping to “anycast” IP address. I am still able to get a response. Since I cant simulate region failover, I cant test anycast IP availability.
After “Ten Sec“, My website was redirected to the east region. Unfortunately, this could be better but I have not tested very well.
RPO = 10 sec
RTO will be different for different customers.
Both AZs are taking part into website service. In case of disaster recovery, you may just need one AZ.
To simulate AWS region recovery, I am running my terraform environment again. This will create ALB and request listeners.
Accelerator was able to detect that “us-west-2” region Endpoint become healthy again.
My new traffic is diverted back to “us-west-2” region
Both DR Region failover and fallback worked successfully.
I am very impressed with the way the global accelerator worked. The multi-region complication was reduced. Failover and Failback were seamless. If you have a multi-region database like “AWS Aurora” this will be a very great option to reduce “RPO” and increase redundancy. This will definitely increase the user experience.
The next Step, for me to do testing on performance and user experience features for AWS Global Accelerator.