Course-এর সূচি

11.4

Global Accelerator আর Anycast

unicast বনাম anycast, edge-এ দুটো static IP, health দেখে failover, আর Global Accelerator বনাম CloudFront।

20 মিনিট পড়া + Animation

টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।

এই লেসন শেষে তুমি পারবে

  • Region থেকে দূরের user-রা public internet-এ কেন ভোগে (hop, ভিড়, jitter, packet হারানো), আর Global Accelerator কীভাবে তাদের traffic সবচেয়ে কাছের edge location-এ AWS-এর global network-এ তুলে নেয়, সেটা বোঝাতে।
  • Unicast আর anycast-এর তফাত বলতে, আর একটা accelerator-এর দুটো static anycast IP address কী দেয় তা বোঝাতে: একটাই স্থায়ী প্রবেশপথ, সবচেয়ে কাছের edge, আর DNS caching-এর ঝামেলা নেই।
  • একটা accelerator তার অংশগুলো দিয়ে সাজাতে: listener (TCP, UDP, port), endpoint group (প্রতি Region-এ একটা) আর endpoint (ALB, NLB, EC2 instance, Elastic IP), public বা private।
  • Health check, failover, traffic dial আর endpoint weight traffic-কে কোথায় সরায়, আগেই বলে দিতে: খোলা connection-এর কী হয়, আর কিছুই সুস্থ না থাকলে কী হয়, সেটা সহ।
  • Endpoint কখন আসল client IP address দেখে তা ঠিক করতে, আর Shield, security group ও firewall-এর allow list-এর সাথে Global Accelerator কীভাবে মেলে, সেটা বোঝাতে।
  • কোনো scenario-তে Global Accelerator, CloudFront আর Route 53 latency routing-এর মধ্যে বেছে নিতে, আর কেন বেছেছ তা যুক্তি দিয়ে বলতে।

#সারা বিশ্বের user, একটা Region

#Public internet কেন ধীর আর অস্থির

তোমার application চলে একটা Region-এ, কিন্তু user ছড়িয়ে আছে সব জায়গায়। ঢাকার একজন player যখন us-east-1-এর (Virginia) একটা game API-তে connect করে, তখন packet-গুলো এমন একসারি network পেরোয়, যেগুলো অন্য কোম্পানির: বাসার ISP, এক বা একাধিক transit provider, সমুদ্রের নিচের cable, আবার transit, তারপর অবশেষে AWS। এদের প্রত্যেকে নিজেই ঠিক করে packet-টা এরপর কোথায় যাবে, সাধারণত ব্যবসায়িক চুক্তি দেখে (BGP policy), তোমার জন্য কোনটা সবচেয়ে দ্রুত সেটা দেখে না।

এতে তিনটা সমস্যা হয়:

  • Latency। প্রতিটা hop-এ একটু করে দেরি জমে, আর পথটা প্রায়ই map-এ যত লম্বা দেখায় তার চেয়েও লম্বা। ঢাকা থেকে Virginia-র round trip ২৫০ ms বা তার বেশি হওয়া খুবই স্বাভাবিক।
  • Jitter। ব্যস্ত link-এ packet-কে লাইনে দাঁড়াতে হয়, আর লাইনের দৈর্ঘ্য বদলাতে থাকে, তাই দেরিটা এক packet থেকে আরেক packet-এ ওঠানামা করে। Game বা voice call-এর জন্য অস্থির দেরি বেশি দেরির মতোই ক্ষতিকর।
  • Packet হারানো। ভিড়ের link packet ফেলে দেয়। TCP টের পায় আর আবার পাঠায়, কিন্তু timeout-এর পরে, আর আবার পাঠানো packet-কে আবারও পুরো পথ পেরোতে হয়। UDP তো আবার পাঠায়ই না: একটা game update হারালে সেটা হারিয়েই গেল।

Slide-এ ছবিটা এরকম: আমেরিকা, ইউরোপ, ভারত আর অস্ট্রেলিয়ার user-রা সবাই অনেক internet hop পেরিয়ে একটা public ALB-এ পৌঁছাচ্ছে। চাওয়াটা সোজা: যত আগে সম্ভব AWS-এর network-এ ঢুকে পড়ো, তারপর সেখানেই থাকো।

#Global Accelerator কী করে

AWS Global Accelerator হলো একটা global networking service, যেটা তোমার user-দের traffic-কে তাদের সবচেয়ে কাছের AWS edge location-এ ভিড়ে ঠাসা public internet থেকে বের করে আনে, আর AWS-এর global network (AWS backbone) দিয়ে এক বা একাধিক Region-এ তোমার application পর্যন্ত বয়ে নিয়ে যায়। Note-এর ভাষায় ফলটা: গতি বাড়ে, latency আর jitter কমে।

  • এটা কাজ করে layer 4-এ: যেকোনো port-এ TCP আর UDP বয়। HTTP সে বোঝেও না, বদলায়ও না।
  • তোমার application-এর স্থায়ী প্রবেশপথ হিসেবে সে দেয় দুটো static anycast IP address (পরের অংশে বিস্তারিত)।
  • সে কিছুই cache করে না। প্রতিটা packet তোমার endpoint-এ যায়; Global Accelerator শুধু রাস্তাটা ভালো করে, আর সবচেয়ে সুস্থ ও কাছের গন্তব্যটা বেছে দেয়।
  • Edge-এ সে TCP connection শেষ করে দেয় (terminate), আর প্রায় সাথে সাথে তোমার endpoint-এর দিকে নতুন একটা connection খোলে। ফলে client-এর handshake আর আবার পাঠানো packet শুধু edge পর্যন্ত ছোট দূরত্বটুকুই পেরোয়।

ঢাকা থেকে Virginia: public internet নাকি AWS backbone

ঢাকার একজন player us-east-1-এর একটা ALB-এর পেছনের game API-তে connect করছে। অনেক network পেরিয়ে লম্বা যাত্রা, আর কাছের edge location পর্যন্ত ছোট্ট লাফ দিয়ে তারপর AWS-এর নিজের network ধরে যাওয়া, দুটো পাশাপাশি দেখো।

পরিস্থিতি

কোনো accelerator নেই: packet এমন অনেক network পেরোয়, যেগুলোর ওপর AWS-এর কোনো হাত নেই।

us-east-1
Playerঢাকা
Local ISP
Transit
Transit
Edge locationকাছেই
ALBgame API
SYN
ধাপ 1 / 5
1

DNS player-কে ALB-এর public IP দিয়েছে। প্রথম packet যায় local ISP-তে, আর ISP সেটা তুলে দেয় সেই transit network-এ, যার সাথে তার ব্যবসায়িক চুক্তি সুবিধার, সবচেয়ে দ্রুতটায় না।

#Unicast আর anycast

#Unicast: একটা address, একটা জায়গা

সাধারণ internet-এ প্রতিটা IP address ঠিক একটা machine-এর, সম্পর্কটা ১:১। একেই বলে unicast। তোমার server 198.51.100.10 যদি New York-এ থাকে, Tokyo-র user সেখানে পৌঁছায় Pacific আর পুরো উত্তর আমেরিকা পেরিয়ে; London-এর user পেরোয় Atlantic। User যেখানেই থাকুক, address তাকে নিয়ে যায় তার একমাত্র ঠিকানায়, আর দূরের user দাম দেয় latency দিয়ে।

#Anycast: একটা address, অনেক জায়গা

Anycast-এ একই IP address একসাথে অনেক জায়গা থেকে ঘোষণা করা হয়, সম্পর্কটা ১:অনেক। প্রতিটা জায়গা BGP দিয়ে internet-কে বলে “192.0.2.10-এ আমি পৌঁছাতে পারি”। সব জায়গার router ওই address-এর দিকে কয়েকটা পথ শেখে আর সবচেয়ে ছোটটা রাখে, তাই প্রত্যেক user পৌঁছে যায় ঘোষণা করা জায়গাগুলোর মধ্যে সবচেয়ে কাছেরটায়। কোনো জায়গা ঘোষণা থামিয়ে দিলে (বিকল হলে, বা maintenance-এর জন্য সরিয়ে নিলে), router কয়েক সেকেন্ডের মধ্যে সেই পথ ভুলে যায়, আর user-কে নিয়ে যাওয়া হয় পরের সবচেয়ে কাছেরটায়, user-এর দিকে কিছু না বদলেই।

Slide দুটো ছবি দিয়ে তফাতটা দেখায়: unicast-এ প্রত্যেক server-এর নিজের address, anycast-এ সব server-এর একই address, আর client-কে পাঠানো হয় সবচেয়ে কাছেরটায়। Anycast নতুন কিছু না, AWS-এর নিজস্বও না: DNS root server, Route 53-এর নিজের name server (লেসন ৮.৫) আর অনেক CDN এটা ব্যবহার করে।

Unicast বনাম anycast: একটা address, কয়টা জায়গায়?

Tokyo, London আর New York-এ player। Unicast-এ একটা address থাকে এক জায়গাতেই, সবাইকে সেখানে যেতে হয়। Anycast-এ একই address অনেক edge location থেকে ঘোষণা করা হয়, আর প্রত্যেক player পৌঁছে যায় সবচেয়ে কাছেরটায়।

পরিস্থিতি

একটা IP, একটা server (১:১)। Server-টা New York-এ।

Tokyo site
London site
New York site
Player, Tokyo
Player, London
Player, New York

Address

Tokyo

198.51.100.30

London

198.51.100.20

New York

198.51.100.10

ধাপ 1 / 4
1

Unicast হলো সাধারণ internet: প্রতিটা address ঠিক একটা machine-এর। Game server 198.51.100.10 বসে আছে New York-এ; বাকি দুটো site-এর নিজের নিজের আলাদা address।

#দুটো static IP address

একটা accelerator বানালে Global Accelerator তাকে দেয়:

  • দুটো static IPv4 address, দুটোই AWS-এর edge network থেকে anycast করা। প্রতিটা আসে আলাদা একটা network zone থেকে (edge network-এর জন্য Availability Zone-এর মতো বিচ্ছিন্ন একটা একক) আর আলাদা IP subnet থেকে, তাই কোনো client network থেকে একটায় পৌঁছানো না গেলে client অন্যটায় আবার চেষ্টা করতে পারে।
  • Dual-stack accelerator হলে সাথে দুটো static IPv6 address-ও: মোট চারটা। (পাশের কথা: IPv6 এসেছে ২০২২-এ ALB endpoint-এর জন্য, ২০২৩-এ EC2 আর NLB endpoint পর্যন্ত বেড়েছে; এর জন্য বাড়তি খরচ নেই।)
  • a1234567890abcdef.awsglobalaccelerator.com-এর মতো একটা DNS নাম, যেটা static IP-গুলোতে resolve হয় (dual-stack-এর জন্য একটা dualstack নামও)। সাধারণত নিজের domain-কে Route 53-এর Alias record দিয়ে এর দিকে দেখাও (লেসন ৮.২)।
  • Amazon-এর address-এর বদলে তুমি নিজের IPv4 range নিয়ে আসতে পারো (BYOIP), আর সেখান থেকে address বসাতে পারো।

Address-গুলো বাঁধা থাকে accelerator যতদিন আছে ততদিন, সে disabled থাকলেও, কোনো traffic না নিলেও। Accelerator delete করলে address-গুলো চিরতরে চলে যায়। তাই production accelerator-কে delete হওয়া থেকে IAM দিয়ে (যেমন tag-ভিত্তিক permission) রক্ষা করো।

Address কখনো বদলায় না বলে দুটো সমস্যা উধাও হয়ে যায়:

  • Client cache-এর ঝামেলা নেই। Slide কথাটা এভাবে বলে: IP বদলায় না, তাই client, resolver বা app কী cache করে রেখেছে তাতে কিছু যায় আসে না। নতুন Region যোগ করো, load balancer বদলাও বা failover হোক, সামনের address একই থাকে।
  • Allow list সহজ। একজন গ্রাহকের firewall-এ তোমার পুরো multi-Region application-এ পৌঁছাতে লাগে ঠিক দুটো address (IPv6 সহ চারটা)।

#Accelerator কীভাবে গড়া

#Listener, endpoint group আর endpoint

অংশএটা কীউদাহরণ
Acceleratorযে resource-এর কাছে static IP আর DNS নাম থাকে। Standard বা custom routinggame-prod
Listenerএকটা protocol (TCP, UDP, বা দুটোই) আর port বা port range-এ (সর্বোচ্চ ১০টা range) client-এর connection নেয়। একটা accelerator-এ সর্বোচ্চ ১০টা listenerUDP 7777, TCP 443
Endpoint groupএকটা listener-এর একটা Region-এর endpoint-গুলো; একটা listener-এর প্রতি Region-এ সর্বোচ্চ একটা group। Traffic dial আর health check setting এখানেই থাকেap-south-1, eu-west-1
Endpointযে resource traffic পায়, সাথে একটা weightএকটা ALB, একটা NLB, একটা EC2 instance, একটা Elastic IP

একটা standard accelerator-এর endpoint ঠিক চার রকম:

  • Application Load Balancer: internet-facing বা internal।
  • Network Load Balancer: internet-facing বা internal।
  • EC2 instance: public বা private subnet-এ।
  • Elastic IP address।

তাই slide-এর “public বা private” কথাটা আক্ষরিক অর্থেই সত্যি: একটা internal ALB, বা public IP ছাড়া private subnet-এর একটা instance-ও accelerator-এর পেছনে বসতে পারে। তখন accelerator-ই একমাত্র public প্রবেশপথ, internet থেকে কেউ সরাসরি endpoint-এ পৌঁছাতে পারে না। তবে VPC-তে একটা internet gateway attach করা থাকতেই হবে (এটা বোঝায় যে VPC internet-এর traffic নেয়), যদিও subnet-এ তার দিকে কোনো route লাগে না, আর endpoint-এর public address-ও লাগে না।

যেগুলো endpoint হতে পারে না: S3 bucket, CloudFront distribution, API Gateway API আর Lambda function। (Static IP দিয়ে API Gateway-তে পৌঁছাতে AWS একটা নকশা দেখায়, যেখানে একটা VPC endpoint-এর সামনে NLB বা ALB বসে।)

Listener চাইলে port বদলে দিতে পারে (যেমন 443-এ নিয়ে endpoint-এর 8443-এ পাঠানো), আর client affinity ঠিক করতে পারে: None (default, প্রতিটা connection পুরো 5-tuple ধরে hash হয়, তাই একজন client-এর আলাদা connection আলাদা endpoint-এ যেতে পারে) বা Source IP (source আর destination IP ধরে hash হয়, তাই একজন client বারবার একই endpoint-এ পৌঁছায়, stateful app-এর জন্য কাজের)।

#Standard আর custom routing accelerator

  • Standard accelerator তোমার হয়ে endpoint বেছে দেয়: সবচেয়ে কাছের সুস্থ endpoint group, তারপর weight অনুযায়ী একটা endpoint। লেসনের বাকি অংশ এটা নিয়েই, আর পরীক্ষায় “Global Accelerator” বললে এটাই বোঝায়।
  • Custom routing accelerator-এ সিদ্ধান্ত নেয় তোমার application-এর logic: accelerator-এর প্রতিটা static IP আর port একটা VPC subnet-এর নির্দিষ্ট একটা EC2 instance আর port-এর সাথে বাঁধা। একটা matchmaking service চারজন player-কে একটা game server-এর একই session-এ বসায়, বা একটা VoIP service caller-দের একটা media server-এ পাঠায়। এখানে health check নেই, failover নেই (গন্তব্য তো তুমিই বেছেছ), client IP সবসময় অটুট থাকে, আর শুধু IPv4 চলে।

নিজেকে যাচাই করোপ্রশ্ন

একটা multiplayer game-এর matchmaking service-কে একটা match-এর সব player-কে একই EC2 game server আর port-এ পাঠাতে হবে, আবার কম latency-র জন্য AWS-এর global network-ও ব্যবহার করতে হবে। Team কী ব্যবহার করবে?

#Connection আর timeout

Global Accelerator একটা চালু connection-কে তার বেছে নেওয়া endpoint-এই পাঠাতে থাকে, যতক্ষণ না connection শেষ হয় বা অলস হয়ে পড়ে। Idle timeout বাঁধা: TCP-তে ৩৪০ সেকেন্ড আর UDP-তে ৩০ সেকেন্ড, আর TCP keep-alive packet-কে কাজ হিসেবে ধরা হয় না (অন্তত এক byte data পাঠাতে হয়)। নতুন করে endpoint বাছা হয় শুধু নতুন connection-এ, বা idle timeout-এর পরে। Failover-এর সময় কথাটা মনে রাখো, নিচে আবার আসবে।

পরীক্ষায় দুটো ছোট তথ্য মানুষকে বিভ্রান্ত করে: edge নিজেই ICMP ping-এর উত্তর দেয়, তাই static IP-তে ping শুধু edge পর্যন্ত দূরত্ব মাপে, তোমার application কখনো না; আর Global Accelerator-এর সব API call যায় us-west-2-এ (Oregon), তোমার endpoint যে Region-এই থাকুক।

#Health check আর দ্রুত failover

#Endpoint সুস্থ কি না, Global Accelerator কীভাবে ঠিক করে

Standard accelerator traffic পাঠায় শুধু সুস্থ endpoint-এ, আর নতুন endpoint কোনো traffic পাওয়ার আগে health check পাস করতে হয়।

  • ALB আর NLB endpoint ব্যবহার করে load balancer-এর নিজের target health check (ELB-তে সাজানো, লেসন ৬.২)। প্রতিটা target group-এ অন্তত একটা সুস্থ target থাকলে ALB সুস্থ; আর অন্তত একটা Availability Zone-এর সব target group-এ সুস্থ target থাকলে NLB সুস্থ।
  • EC2 instance আর Elastic IP endpoint ব্যবহার করে endpoint group-এর health check setting: protocol TCP (default), HTTP বা HTTPS, একটা port (default: listener-এর port), HTTP(S)-এর জন্য একটা path (default /), interval ১০ বা ৩০ সেকেন্ড (default ৩০), আর পরপর ১ থেকে ১০টা ফলের threshold (default ৩)।
  • EC2 বা Elastic IP endpoint সহ UDP listener-এ health check চলে listener-এর port-এ TCP দিয়ে, তাই endpoint-এ ওই port-এ একটা TCP server-ও চালাতে হয়, নইলে game যতই সুস্থ থাকুক, endpoint অসুস্থ বলে গণ্য হয়।
  • Check-গুলো আসে Route 53 health checker-এর IP range থেকে, তাই EC2 endpoint-এর security group আর firewall-এ ওই range-গুলোকে ঢুকতে দিতে হবে।

#এক Region থেকে আরেক Region-এ failover

নিয়মগুলো, ক্রম অনুযায়ী:

  1. Traffic যায় client-এর সবচেয়ে কাছের endpoint group-এ (traffic dial হিসাবে ধরার পর), আর তার ভেতরে সুস্থ endpoint-গুলোতে, তাদের weight-এর অনুপাতে।
  2. কোনো endpoint অসুস্থ হলে নতুন connection সাথে সাথে group-এর বাকি সুস্থ endpoint-এ যায়।
  3. কোনো group-এ যদি ০-এর বেশি weight-ওয়ালা একটাও সুস্থ endpoint না থাকে, Global Accelerator failover করে পরের সবচেয়ে কাছের এমন group-এ, যেখানে আছে, আর তখন traffic dial মানে না (dial ০ করা group-ও failover traffic পেতে পারে)।
  4. সবচেয়ে কাছের তিনটা group-এ কোনো সুস্থ endpoint না পেলে সে fail open করে: সবচেয়ে কাছের group-এর যেকোনো একটা endpoint-এ traffic পাঠায়। যুক্তিটা হলো, সারা দুনিয়ার server একসাথে ভেঙে পড়ার চেয়ে health check নিজে ভাঙা থাকার সম্ভাবনাই বেশি।
  5. Region সেরে উঠলে মোটামুটি ৩০ সেকেন্ডের মধ্যে স্বাভাবিক routing ফেরে। চালু connection কোনো দিকেই সরানো হয় না; client বা server reset না করা পর্যন্ত, বা idle timeout না হওয়া পর্যন্ত সেগুলো চলতে থাকে, তাই client-এর retry করার ব্যবস্থা থাকা চাই।

Slide এটা এক কথায় বলে: “অসুস্থ endpoint-এর জন্য ১ মিনিটেরও কম সময়ে failover”। ১০ সেকেন্ড interval আর ৩-এর threshold দিলে একটা EC2 endpoint মোটামুটি ৩০ সেকেন্ডে অসুস্থ ঘোষিত হয়, আর বদলটা তখনই হয়ে যায়। এজন্যই disaster recovery-র জন্য Global Accelerator ভালো: standby Region আগে থেকেই একই IP-র পেছনে দাঁড়িয়ে আছে।

#DNS failover-এর চেয়ে এটা কেন ভালো

Route 53-ও failover করতে পারে (failover routing, লেসন ৮.৩, health check সহ, লেসন ৮.৪), কিন্তু DNS-এর একটা দুর্বলতা আছে, যেটা Global Accelerator-এর নেই: caching। Route 53 উত্তর বদলানোর পরেও প্রতিটা resolver, operating system আর app, যারা পুরোনো উত্তর cache করে রেখেছে, তাদের copy-র মেয়াদ না ফুরানো পর্যন্ত user-দের মরা Region-এই পাঠাতে থাকে, আর কেউ কেউ TTL-এর চেয়েও বেশি সময় ধরে রাখে। এই cache-গুলো তোমার নিয়ন্ত্রণে নেই। Global Accelerator-এ উত্তরটা কখনো বদলায়ই না: বদলটা হয় static IP-র পেছনে, AWS-এর ভেতরে, তাই বাসি হওয়ার মতো কিছুই থাকে না।

একটা Region বিকল: Global Accelerator বনাম Route 53 failover

ঢাকার একটা bank-এর login API চলে Mumbai (প্রধান, সবচেয়ে কাছে) আর Ireland-এর ALB-এর পেছনে। সামনে Global Accelerator থাকলে Mumbai বিকল হলে কী হয়, আর তার বদলে Route 53 failover record থাকলে কী হয়, দেখো।

পরিস্থিতি

প্রতি Region-এ একটা endpoint group। Traffic যায় সবচেয়ে কাছের সুস্থ group-এ।

ap-south-1
eu-west-1
গ্রাহকঢাকা
Global Accelerator192.0.2.10
ALB Mumbai
ALB Ireland
TCP 443
ধাপ 1 / 3
1

App accelerator-এর static IP-তে connect করে। ঢাকার কাছের edge গ্রাহকের সবচেয়ে কাছের সুস্থ endpoint group বেছে নেয়: Mumbai।

#Traffic dial আর endpoint weight

Standard accelerator কোথায় traffic পাঠাবে, সেটা বদলানোর দুটো উপায় আছে, দুটো আলাদা স্তরে:

Traffic dialEndpoint weight
কোথায় বসেএকটা endpoint group-এ (একটা Region)Group-এর ভেতরের একটা endpoint-এ
সীমা০–১০০ %, default ১০০০–২৫৫, default ১২৮
মানেএই Region-এর দিকে আগে থেকেই আসা traffic-এর কতটা সে নেবে; বাকিটা যায় পরের কাছের group-এGroup-এর traffic-এ এই endpoint-এর ভাগ: weight ÷ মোট weight
০ মানেRegion নতুন traffic নেয় না (তবে failover traffic পায়)Endpoint নতুন traffic নেয় না
সাধারণ ব্যবহারRegion-এর maintenance, আরেকটা Region পরীক্ষা, Region পেরিয়ে blue/greenএকটা Region-এর ভেতরে canary বা blue/green, নতুন load balancer-এ সরে যাওয়া

কয়েকটা খুঁটিনাটি মনে রাখার মতো:

  • Dial সব traffic-এর ভাগ না। Mumbai ৩০ % হলে Mumbai নেয় সেই connection-গুলোর ৩০ %, যেগুলো Mumbai-তে যেত; যে user-রা Singapore-এর বেশি কাছে, তাদের ওপর কোনো প্রভাব পড়ে না।
  • বদল খাটে শুধু নতুন connection-এ। আগের connection নিজে থেকেই ফুরিয়ে যায়।
  • Dial যা-ই বলুক, health check চলতেই থাকে।
  • Weight ১ আর ২৫৫ দিলে প্রথম endpoint পায় ১/২৫৬ (প্রায় ০.৪ %)। কিছু বিরল ক্ষেত্রে (যেমন client IP অটুট রাখার সময় connection collision এড়াতে) traffic চালু রাখতে Global Accelerator weight উপেক্ষা করে।

Traffic dial আর endpoint weight

ঢাকার একটা e-commerce API-র Mumbai-তে একটা endpoint group, তাতে দুটো ALB (blue: এখনকার version, green: নতুনটা), আর Singapore-এ আরেকটা group। Weight একটা group-এর ভেতরে traffic ভাগ করে; dial ঠিক করে একটা Region কতটা নেবে।

পরিস্থিতি

একটা endpoint group-এর ভেতরে ০ থেকে ২৫৫-এর weight traffic ভাগ করে।

ap-south-1
ap-southeast-1
ক্রেতারাবাংলাদেশ
Global Accelerator
ALB bluev1
ALB greenv2
ALB Singapore
order50%50%

Setting

Dial MumbaiWeight blueWeight greenDial Singaporeফল
100128128100অর্ধেক অর্ধেক
ধাপ 1 / 3
1

দুটো ALB-ই শুরু করে default weight ১২৮ দিয়ে, তাই প্রত্যেকে অর্ধেক পায়। Global Accelerator প্রতিটা endpoint-এর weight-কে group-এর মোট weight দিয়ে ভাগ করে।

#Client IP address অটুট রাখা

Edge যেহেতু TCP শেষ করে নতুন connection খোলে, তোমার endpoint-এ যে packet পৌঁছায় তার source-এ client-এর বদলে Global Accelerator-এর একটা address থাকতে পারে। Client IP address preservation থাকলে endpoint client-এর আসল address-টাই দেখে।

EndpointClient IP preservation
Internet-facing ALBচলে, নতুন accelerator-এ default চালু (বন্ধ করা যায়)
Internal ALBসবসময় চালু
EC2 instanceসবসময় চালু
Security group সহ NLBচলে, default বন্ধ
Security group ছাড়া NLBচলে না
Elastic IP addressচলে না
Custom routing endpointসবসময় চালু

কেন এটা জরুরি, আর এতে কী বদলায়:

  • Application, তার log আর ALB-এর AWS WAF আসল client-কে দেখে, তাই IP ধরে rate limit, অবস্থান-ভিত্তিক সিদ্ধান্ত আর জালিয়াতি ধরার check কাজ করে। (ALB এটা X-Forwarded-For-এও পাঠিয়ে দেয়।)
  • Endpoint-এর security group-কে এখন allow করতে হবে client-দের address (public service হলে পুরো internet), Global Accelerator-এর না।
  • অটুট রাখা traffic তোমার subnet-এ ঢোকে Global Accelerator-এর network interface দিয়ে, তাই এটা network ACL এড়িয়ে যায়, Gateway Load Balancer-এর inspection আর AWS Network Firewall-ও এড়িয়ে যায়। Security group অবশ্য খাটে।
  • Dual-stack accelerator শুধু সেই endpoint নেয়, যেগুলোতে client IP preservation চালু।
  • একটা Elastic IP endpoint থেকে preservation-এ যেতে EC2 instance-টাকে endpoint হিসেবে যোগ করো, তারপর weight সরাও।

#নিরাপত্তা: Shield, আর allow করার মতো মাত্র দুটো address

  • DDoS সুরক্ষা। Global Accelerator-কে AWS Shield Standard নিজে থেকেই, বিনা খরচে রক্ষা করে, edge-এ, যেখানে আক্রমণ তোমার Region-এ পৌঁছানোর আগেই শুষে নেওয়া হয়। বড় লক্ষ্যবস্তুর জন্য Shield Advanced-ও accelerator রক্ষা করতে পারে (খরচের সুরক্ষা আর Shield Response Team)। বিস্তারিত chapter ২১-এ (WAF, Shield, Firewall Manager)।
  • আক্রমণের জায়গা ছোট। Endpoint হিসেবে internal ALB বা private instance থাকলে accelerator-ই ঢোকার একমাত্র পথ; endpoint-এর এমন কোনো public address নেই, যেটায় আক্রমণ করা যায়।
  • Allow list। Slide বলে: শুধু দুটো বাইরের IP whitelist করতে হয়। একটা bank, সরকারি অফিস বা কারখানার network, যেটা শুধু তালিকায় থাকা address-এ বাইরের connection যেতে দেয়, তোমার পুরো global application-এর জন্য দুটো entry যোগ করে, আর কখনো বদলাতে হয় না।
  • যা সে করে না। Global Accelerator-এর নিজের কোনো WAF নেই, আর সে HTTP পরীক্ষা করে না। তোমার security group আর ALB-এর AWS WAF rule আগের মতোই কাজ করে।

#Global Accelerator বনাম CloudFront

দুটোই AWS-এর global network আর তার edge location ব্যবহার করে, দুটোকেই Shield রক্ষা করে। কিন্তু সমস্যা মেটায় আলাদা আলাদা।

CloudFrontGlobal Accelerator
এটা কীএকটা content delivery network: HTTP cache আর reverse proxyএকটা layer 4 network accelerator আর proxy
Cachingহ্যাঁ: content edge থেকেই দেওয়া হয়না: প্রতিটা packet endpoint-এ যায়
ProtocolLayer 7: HTTP, HTTPS, WebSocket, gRPCLayer 4: যেকোনো port-এ TCP আর UDP
TLSEdge-এ শেষ হয় (ACM certificate us-east-1-এ)শেষ পর্যন্ত চলে যায়; endpoint নিজে শেষ করে
IP addressঅনেক, বদলাতে থাকে; DNS নাম ব্যবহার করো (Anycast Static IP list একটা বাড়তি দামের সুবিধা, নিচে দেখো)দুটো static anycast IP (dual-stack-এ চারটা), accelerator-এর পুরো জীবন জুড়ে স্থির
Origin / endpointS3, ALB, EC2, যেকোনো HTTP server, VPC originALB, NLB, EC2, Elastic IP
FailoverOrigin group, request ধরে, GET, HEAD আর OPTIONS-এর জন্যHealth দেখে, Region থেকে Region-এ, একই IP-র পেছনে
সবচেয়ে মানায়Static আর cache-যোগ্য content (ছবি, video, website, download), সাথে dynamic HTTP site আর API-কে দ্রুত করাGaming (UDP), IoT (MQTT), VoIP, HTTP ছাড়া যেকোনো protocol; যেসব HTTP app-এর static IP বা নিশ্চিত, দ্রুত Region-বদল লাগে
দামপ্রতি request আর প্রতি GB বাইরে যাওয়ার জন্যপ্রতি accelerator ঘণ্টায় $0.025 (মাসে প্রায় $18), সাথে প্রতি GB-র Data Transfer-Premium fee, শুধু যেদিকে traffic বেশি সেদিকে

Note-এর এই table-এর সরল রূপে দুটো সংশোধন দরকার:

  • CloudFront শুধু static content-এর জন্য না। Dynamic content আর API-ও সে দ্রুত করে (origin-এর সাথে চালু connection, edge-এ TLS, WebSocket, ২০২৪ থেকে gRPC)। আর Global Accelerator-ও শুধু HTTP-ছাড়া traffic-এর জন্য না: যেসব HTTP app-এর static IP বা দ্রুত Region-বদল লাগে, slide তাদেরও এর জন্য মানানসই বলে।
  • “CloudFront-এর IP dynamic” এখনও পরীক্ষার উত্তর, কিন্তু নভেম্বর ২০২৪ থেকে CloudFront দেয় Anycast Static IP: প্রতি account-এর জন্য ২১টা static anycast address-এর একটা নিজস্ব list, allowlist করা আর mobile operator-দের সাথে zero-rating-এর জন্য, অথবা A record দিয়ে apex domain দেখানোর জন্য ৩টা address। এর জন্য AWS-এর অনুমোদন আর “all edge locations” price class লাগে, দামও বাড়তি। “গ্রাহকের fixed IP address দরকার” প্রশ্নে পরীক্ষা এখনও Global Accelerator-ই আশা করে।

Global Accelerator বনাম CloudFront

দুটোই edge-এ AWS-এর network-এ ঢোকে। CloudFront হলো HTTP cache, edge থেকেই উত্তর দেয়; Global Accelerator হলো layer 4 proxy, সবসময় তোমার endpoint-এ পাঠিয়ে দেয়।

পরিস্থিতি

Cache করার মতো content: দ্বিতীয় request CloudFront edge থেকেই দেয়।

us-east-1
Viewerঢাকা
CloudFrontedge cache
Origin / endpoint
GET /trailer.mp4miss
ধাপ 1 / 3
1

প্রথম viewer CloudFront-এর কাছে trailer.mp4 চায়। Edge-এ এখনও নেই (miss), তাই সে origin থেকে আনে।

#আর Route 53 latency routing?

Route 53-এর latency-based routing-ও (লেসন ৮.৩) user-কে সবচেয়ে কাছের Region-এ পাঠায়, তাই অনেক প্রশ্নে এটা তৃতীয় বিকল্প হয়ে আসে।

Route 53 latency routingGlobal Accelerator
কীভাবেDNS উত্তর দেয় সবচেয়ে কম latency-র Region-এর record দিয়েAnycast IP; edge সবচেয়ে কাছের সুস্থ endpoint group বেছে নেয়
উত্তরের পরের পথRegion পর্যন্ত পুরোটাই public internetসবচেয়ে কাছের edge থেকে AWS-এর network
Failover-এর গতিHealth check-এর সময় সাথে DNS caching, যেটা তোমার নিয়ন্ত্রণে নেইশুধু health check-এর সময়; IP কখনো বদলায় না
Fixed IPনা (record ALB-এর বদলাতে থাকা address দেয়)হ্যাঁ, দুটো
Protocolযেকোনো কিছু (এটা তো শুধু DNS)TCP আর UDP
খরচপ্রতি দশ লাখ query-তে কয়েক cent, সাথে health checkঘণ্টাপ্রতি fee, সাথে প্রতি GB-র premium
কখন বাছবেDNS caching মেনে নেওয়া যায় আর খরচটাই বড় কথাPerformance, fixed IP বা দ্রুত failover জরুরি

কারণ পড়ার আগে প্রতিটা scenario নিজে চেষ্টা করে দেখো:

কোন service মানায়?

একটা scenario বেছে নাও, আন্দাজ করো, তারপর কারণটা পড়ো। পরীক্ষা ঠিক এই শব্দগুলোই যাচাই করে: UDP, fixed IP, IoT, DNS ছাড়া failover, cache, static content।

১. একটা scenario বেছে নাও(প্রথমবারেই ঠিক: 0/8)

ঢাকার একটা game studio Mumbai আর Frankfurt-এ NLB-এর পেছনে EC2-তে match server চালায়। Player-দের অবস্থান সেকেন্ডে ৩০ বার UDP datagram হয়ে যায়, আর player-রা lag আর পিছলে যাওয়া নিয়ে অভিযোগ করছে।

২. তোমার উত্তর

#কোথায় গোলমাল হয়

লক্ষণসম্ভাব্য কারণসমাধান
সব EC2 endpoint অসুস্থ দেখায়, অথচ সরাসরি পরীক্ষা করলে app চলেSecurity group বা firewall Route 53 health checker-এর range আটকাচ্ছে, বা health check port-এ কেউ শুনছে নাশুধু health check port-এ ওই range allow করো; port আর path মিলিয়ে দেখো
UDP listener-এর পেছনের EC2 endpoint সবসময় অসুস্থHealth check চলে listener port-এ TCP দিয়ে, অথচ game server শুধু UDP বোঝেওই port-এ ছোট একটা TCP responder চালাও
যে endpoint-কে অসুস্থ দেখাচ্ছে, তবুও সেখানে traffic যাচ্ছেFail open: সবচেয়ে কাছের তিনটা group-এ কোনো সুস্থ endpoint নেইRouting না, health check ঠিক করো (প্রায়ই একটা আটকানো security group)
Log আর WAF-এ client-এর বদলে Global Accelerator-এর addressElastic IP endpoint বা security group ছাড়া NLB, অথবা preservation বন্ধEC2, ALB বা security group সহ NLB ব্যবহার করো, আর preservation চালু করো
Preservation চালুর পর client-দের timeout হচ্ছেEndpoint-এর security group শুধু Global Accelerator-কে allow করত, client-দের নাSecurity group-এ client-দের range allow করো
Dial বদল বা failover-এর পরও কিছু user পুরোনো Region-এ আটকেচালু connection সরানো হয় না; reset বা idle timeout পর্যন্ত চলেClient-কে আবার connect আর retry করাও; draining-এর পরিকল্পনা রাখো
Static IP-তে ping দারুণ, অথচ app তবুও ধীরEdge নিজেই ICMP-র উত্তর দেয়TCP বা application দিয়ে মাপো, বা AWS Speed Comparison Tool দিয়ে
Infrastructure নতুন করে বানানোর পর partner-এর allowlist ভেঙে গেলAccelerator delete করে আবার বানানো হয়েছে, তাই IP বদলে গেছেProduction accelerator কখনো delete কোরো না; IAM দিয়ে রক্ষা করো; বা BYOIP নাও
NLB endpoint-এ TCP connection মাঝে মাঝে খুলতে কয়েক সেকেন্ড লাগেClient-রা একই target-এ সরাসরি আর accelerator দিয়েও পৌঁছালে connection collision, বা NLB-এ cross-zone load balancing চালুসব traffic accelerator দিয়েই পাঠাও; NLB-এ cross-zone বন্ধ করো
ap-south-1-এ aws globalaccelerator command ব্যর্থAPI শুধু us-west-2-এ থাকে--region us-west-2 যোগ করো

#System design-এ Global Accelerator

  • Multi-Region active/active। একই IP-র পেছনে দুই বা ততোধিক Region-এ endpoint group; প্রত্যেক user নামে সবচেয়ে কাছের সুস্থটায়, আর weight ও dial চাপ ভাগ করে দেয়। Region-গুলোর মধ্যে data replication (DynamoDB global table, Aurora Global Database) তোমার কাজ; Global Accelerator শুধু connection সরায়।
  • Active/standby disaster recovery। Standby Region-এর group একই IP-র পেছনে কম বা শূন্য dial-এ বসে থাকে; failover dial মানে না, তাই প্রধানটা অসুস্থ হলে এটাই দায়িত্ব নেয়। Client-কে কিছুই আবার resolve করতে হয় না।
  • Real-time game, voice আর IoT। NLB বা EC2 fleet-এর সামনে UDP বা TCP listener, আর application-কে নির্দিষ্ট server বাছতে হলে custom routing।
  • Fixed IP-ওয়ালা HTTP API। ALB-এর সামনে Global Accelerator partner-কে দুটো address দেয়, ALB-এর সুবিধাগুলো (path routing, WAF, authentication) রেখে দেয়, আর দ্রুত Region-বদল যোগ করে।
  • Public দরজা দিয়ে private application। Private subnet-এ internal ALB, যেখানে শুধু accelerator দিয়েই পৌঁছানো যায়।
  • অন্য AWS service-এর ভেতরেও। S3 Multi-Region Access Point request-কে Global Accelerator দিয়ে সবচেয়ে কাছের bucket-এ পাঠায় (লেসন ১০.৯)। উল্টো দিকে S3 Transfer Acceleration ব্যবহার করে CloudFront-এর edge network (লেসন ১০.৬)।
  • CloudFront-এর সাথে মিলিয়ে। Static file আর page CloudFront দিয়ে, game, chat বা payment-এর traffic Global Accelerator দিয়ে। যে যেটায় সেরা, সে সেটাই করে।
  • খরচটা জেনে রাখো। প্রতি accelerator মাসে প্রায় $18, সাথে প্রতি GB-র premium। ছোট app-এ, যেখানে DNS caching মেনে নেওয়া যায়, Route 53 latency routing সস্তা।

#নিজে করে দেখো

Global Accelerator-এর সব API call যায় us-west-2-এ, endpoint অন্য কোথাও থাকলেও। নিচের ARN-গুলো ছোট করে লেখা উদাহরণ।

# 1. Create an accelerator: two static IPv4 addresses are allocated at once
aws globalaccelerator create-accelerator --name shop-api --ip-address-type IPV4 \
  --region us-west-2
#   "IpSets": [{ "IpAddresses": ["192.0.2.10", "198.51.100.20"], "IpAddressFamily": "IPv4" }],
#   "DnsName": "a1234567890abcdef.awsglobalaccelerator.com"

# 2. A TCP listener on 443 (client affinity None is the default)
aws globalaccelerator create-listener --region us-west-2 \
  --accelerator-arn arn:aws:globalaccelerator::111122223333:accelerator/1234abcd \
  --protocol TCP --port-ranges FromPort=443,ToPort=443 --client-affinity NONE

# 3. One endpoint group per Region: Mumbai with an ALB, client IP preservation on
aws globalaccelerator create-endpoint-group --region us-west-2 \
  --listener-arn arn:aws:globalaccelerator::111122223333:accelerator/1234abcd/listener/0123vxyz \
  --endpoint-group-region ap-south-1 --traffic-dial-percentage 100 \
  --endpoint-configurations EndpointId=arn:aws:elasticloadbalancing:ap-south-1:111122223333:loadbalancer/app/shop-blue/50dc6c495c0c9188,Weight=128,ClientIPPreservationEnabled=true

#    …and Singapore, with health checks every 10 s, 3 failures to switch (used by EC2/EIP endpoints)
aws globalaccelerator create-endpoint-group --region us-west-2 \
  --listener-arn arn:aws:globalaccelerator::111122223333:accelerator/1234abcd/listener/0123vxyz \
  --endpoint-group-region ap-southeast-1 --health-check-interval-seconds 10 --threshold-count 3 \
  --endpoint-configurations EndpointId=i-0abcd1234example,Weight=128

# 4. Watch health, then dial Mumbai down for maintenance and back up
aws globalaccelerator describe-endpoint-group --region us-west-2 --endpoint-group-arn <arn>
aws globalaccelerator update-endpoint-group --region us-west-2 --endpoint-group-arn <arn> \
  --traffic-dial-percentage 0
aws globalaccelerator update-endpoint-group --region us-west-2 --endpoint-group-arn <arn> \
  --traffic-dial-percentage 100

# 5. Compare the paths: time to first byte directly and through the accelerator
curl -s -o /dev/null -w 'connect %{time_connect}s  first byte %{time_starttransfer}s\n' \
  https://shop-blue-123456789.ap-south-1.elb.amazonaws.com/health
curl -s -o /dev/null -w 'connect %{time_connect}s  first byte %{time_starttransfer}s\n' \
  https://a1234567890abcdef.awsglobalaccelerator.com/health -k
traceroute -T -p 443 192.0.2.10      # far fewer hops before you are inside AWS

# 6. Clean up: disable first (the IPs are kept while disabled), then delete (the IPs are lost)
aws globalaccelerator update-accelerator --region us-west-2 --accelerator-arn <arn> --no-enabled
aws globalaccelerator delete-accelerator --region us-west-2 --accelerator-arn <arn>

ধাপ ৫-এ -k দেওয়া শুধু এজন্য যে ALB-এর certificate-এ তোমার domain-এর নাম লেখা, accelerator-এর DNS নাম না; আসল ব্যবহারে api.example.com-এর একটা Alias record accelerator-এর দিকে দেখাও। AWS একটা public Speed Comparison Tool-ও চালায়, যেটা কয়েকটা Region থেকে সরাসরি আর Global Accelerator দিয়ে একটা file download করে, ফলে নিজের connection থেকেই তফাতটা দেখতে পাও। Fixed fee-র কথা মনে রাখো: পরীক্ষা শেষে test accelerator delete করে দাও।

#সারসংক্ষেপ

মূল কথাগুলো

  • Region থেকে দূরের user-রা ভোগে internet-এর hop, ভিড়, jitter আর packet হারানো-তে। Global Accelerator তাদের traffic সবচেয়ে কাছের edge location-এ AWS-এর global network-এ তুলে নিয়ে তোমার endpoint পর্যন্ত বয়ে নেয়। এটা কাজ করে layer 4-এ (TCP আর UDP), edge-এ TCP শেষ করে, আর কিছুই cache করে না।
  • Unicast: একটা IP, একটা server (১:১)। Anycast: একটা IP অনেক জায়গা থেকে ঘোষিত (১:অনেক); প্রত্যেক user পৌঁছায় সবচেয়ে কাছেরটায়, আর বিকল জায়গাকে নিজে থেকেই পাশ কাটানো হয়। ঠিক জরুরি নম্বর ৯৯৯-এর মতো।
  • একটা accelerator-এর থাকে দুটো static anycast IPv4 address (dual-stack-এ সাথে দুটো IPv6, বা BYOIP) আর একটা DNS নাম। Accelerator যতদিন আছে, disabled থাকলেও, IP থেকে যায়; delete করলে হারায়। Client cache-এর ঝামেলা নেই; allowlist করতে হয় মাত্র দুটো IP।
  • অংশগুলো: listener (TCP/UDP, port) → endpoint group (প্রতি Region-এ একটা, traffic dial ০–১০০ %, health check setting) → endpoint (ALB, NLB, EC2, Elastic IP, public বা private, weight ০–২৫৫, default ১২৮)। Custom routing accelerator port-কে নির্দিষ্ট EC2 instance-এর সাথে বাঁধে।
  • Health check: ALB/NLB ব্যবহার করে ELB-এর target health; EC2/EIP ব্যবহার করে প্রতি ১০ বা ৩০ সেকেন্ডে TCP/HTTP/HTTPS, threshold ৩। Failover যায় পরের সবচেয়ে কাছের সুস্থ Region-এ, dial না মেনে, এক মিনিটের অনেক কম সময়ে, একই IP-র পেছনে; কিছুই সুস্থ না থাকলে → fail open। খোলা connection সরানো হয় না।
  • Client IP preservation: internal ALB আর EC2-তে সবসময় চালু, internet-facing ALB-এ default চালু, security group সহ NLB-এ ঐচ্ছিক, Elastic IP বা security group ছাড়া NLB-এ নেই।
  • Shield Standard নিজে থেকেই রক্ষা করে; Shield Advanced যোগ করা যায়।
  • বনাম CloudFront: CloudFront HTTP content edge-এ cache করে (ছবি, video, website, dynamic HTTP-ও); Global Accelerator TCP/UDP-কে Region পর্যন্ত proxy করে (gaming, IoT/MQTT, VoIP, static IP, দ্রুত Region-বদল)। বনাম Route 53 latency routing: শুধু DNS, public internet-এর পথ, cache-নির্ভর failover, কিন্তু সস্তা।
  • দাম: প্রতি accelerator-ঘণ্টায় $0.025, সাথে যেদিকে traffic বেশি সেদিকে প্রতি GB-র Data Transfer-Premium। API থাকে us-west-2-এ।