6.3
ALB, NLB, GWLB আর Target Group
layer 7-এর routing rule, layer 4-এ static IP, GENEVE দিয়ে মাঝপথে বসানো appliance, আর target type।
30 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি যা পারবে
- Elastic Load Balancing-এর চার ধরনের load balancer network-এর কোন layer-এ কাজ করে, আর প্রত্যেকে একটা packet-এর কতটুকু দেখতে পায়, তা বলতে পারবে।
- path, host, header, method, query string আর source IP দেখে ALB-এর listener rule বানাতে পারবে, priority দিয়ে সেগুলো সাজাতে পারবে, আর ঠিক action বেছে নিতে পারবে: forward (weighted canary আর blue/green-সহ), redirect, fixed response বা authenticate।
- ALB-এর পেছনের application কেন client-এর বদলে ALB-এর address দেখে, তা বোঝাতে পারবে, আর X-Forwarded-For, X-Forwarded-Proto আর X-Forwarded-Port কাজে লাগাতে পারবে।
- TCP, UDP আর TLS-এর জন্য NLB ব্যবহার করতে পারবে: প্রতি AZ-এ static IP, Elastic IP, client IP preservation, security group, target হিসেবে ALB, আর PrivateLink।
- GENEVE, GWLB endpoint আর route table দিয়ে GWLB কীভাবে third-party appliance-এর একটা fleet-কে traffic-এর পথে বসিয়ে দেয়, আর একটা appliance নষ্ট হলে কী হয়, তা বোঝাতে পারবে।
- target group সাজাতে পারবে: protocol, port, target type (instance, on-premises-সহ IP, Lambda, ALB), health check আর attribute।
- ঘণ্টার ভাড়া আর capacity unit থেকে load balancer-এর বিল আন্দাজ করতে পারবে, আর পরীক্ষার যেকোনো scenario পড়ে ঠিক load balancer বেছে নিতে পারবে।
#তিনটা load balancer, তিনটা layer
লেসন ৬.২-এ দেখেছ প্রতিটা Elastic Load Balancer কী করে: একটা স্থির প্রবেশপথ, health check, আর কয়েকটা Availability Zone-এর healthy target-দের মধ্যে traffic ভাগ করে দেওয়া। AWS চার ধরনের load balancer দেয়, আর এদের আসল পার্থক্য হলো প্রতিটা packet-এর কত গভীরে এরা তাকায়।
| Layer | কী পড়ে | Protocol | এক লাইনে ব্যবহার | |
|---|---|---|---|---|
| Application Load Balancer (ALB) | 7, application | পুরো HTTP request: path, host, header, method, query string | HTTP, HTTPS, HTTP/2, gRPC, WebSockets | web app, API, microservice, container |
| Network Load Balancer (NLB) | 4, transport | শুধু IP address আর port | TCP, UDP, TLS (আর ২০২৫ থেকে QUIC) | চরম performance, static IP, HTTP ছাড়া অন্য protocol |
| Gateway Load Balancer (GWLB) | 3, network | পুরো IP packet, যেটা সে একটুও বদলায় না | যেকোনো IP traffic, appliance-এর কাছে যায় GENEVE-এ মুড়ে | third-party firewall, IDS/IPS, deep packet inspection |
| Classic Load Balancer (CLB) | 4 আর 7 | সাধারণ TCP বা HTTP | TCP, SSL, HTTP, HTTPS | শুধু পুরনো জিনিসের জন্য (লেসন ৬.২); নতুন কিছুতে ব্যবহার কোরো না |
ALB, NLB আর GWLB হলো এখনকার প্রজন্ম, তিনটাই একই elbv2 API দিয়ে চালানো হয়, আর তিনটাই traffic পাঠায় target group-এ। CLB আগের প্রজন্মের: প্রতি application-এ একটা করে load balancer, target group নেই, content দেখে routing নেই। এই লেসনে সে আসবে শুধু তুলনার টেবিলে।
#Application Load Balancer (layer 7)
#সে কী বোঝে
ALB একটা পুরোদস্তুর HTTP proxy। সে client-এর connection নেয়, listener HTTPS হলে HTTPS খুলে নেয় (certificate আর SNI লেসন ৬.৪-এ), request পড়ে, কোথায় যাবে ঠিক করে, তারপর বেছে নেওয়া target-এর সাথে নিজের একটা connection খোলে।
- client-এর দিক থেকে HTTP/1.1 আর HTTP/2; target-এর সাথে default-এ HTTP/1.1, আর target group-এর protocol version বললে HTTP/2 বা gRPC (gRPC-র জন্য HTTPS listener লাগে)।
- WebSockets নিজে থেকেই চলে: ALB connection upgrade করে খোলা রাখে।
- ALB-এর নিজের একটা security group থাকতেই হয়, আর target-গুলো শুধু ওই group থেকে traffic নেবে, এটাই নিয়ম (লেসন ৬.২)।
- এর একটা স্থির DNS name আছে, যেমন
web-alb-1234567890.us-east-1.elb.amazonaws.com, কিন্তু কোনো স্থির IP নেই। এ নিয়ে নিচে বিস্তারিত। - এতে AWS WAF লাগানো যায়, অন্য কোনো ধরনের ELB-তে যায় না।
#Listener আর rule
listener মানে ALB কোন protocol আর port-এ traffic নেবে, যেমন HTTPS 443। প্রতিটা listener-এর একটা rule-এর তালিকা থাকে। প্রতিটা rule-এর থাকে একটা priority, এক বা একাধিক condition, আর এক বা একাধিক action।
| Condition type | কী মেলায় | উদাহরণ | খেয়াল রাখো |
|---|---|---|---|
path-pattern | URL-এর path (query string না) | /users*, /img/*/pics | case-sensitive; wildcard * আর ?; regex-ও চলে |
host-header | Host header | api.example.com, *.example.com | case-sensitive না; *.example.com খোদ example.com-কে মেলায় না |
http-header | নাম ধরে যেকোনো header | User-Agent-এ *Mobile* আছে, X-Beta: on | header-এর নাম আর মান case-sensitive না |
http-request-method | GET, POST, DELETE… | DELETE | case-sensitive, হুবহু মিলতে হবে |
query-string | ?-এর পরের key/value | platform=mobile, version=2 | case-sensitive না |
source-ip | client-এর address, CIDR আকারে | 203.0.113.0/24 | connection-এর address, X-Forwarded-For header না |
rule কীভাবে মেলানো হয়:
ছোট priority নম্বর আগে
rule দেখা হয় priority অনুযায়ী, 1 সবার আগে, 50,000 পর্যন্ত। যে rule প্রথম মিলে যায়, সে-ই জেতে, পরের কোনো rule আর দেখাই হয় না। ছোট নম্বরে বসানো একটা ঢালাও rule তার পরের সব নির্দিষ্ট rule-কে আড়াল করে দেয়।
একটা rule-এর সব condition মিলতে হবে
host-header api.example.comআরpath-pattern /users*দুটো নিয়ে একটা rule মিলবে শুধু তখনই, যখন দুটোই সত্যি। আবার একটা condition-এর ভেতরে তিনটা পর্যন্ত মান রাখা যায়, তার যেকোনো একটা মিললেই চলে (/users*অথবা/accounts*)। পুরো rule-এ সব মিলিয়ে পাঁচটা পর্যন্ত মান রাখা যায়।বাকি সব ধরে default rule
প্রতিটা listener-এ ঠিক একটা default rule থাকে। এর কোনো condition নেই, সবসময় সবার শেষে দেখা হয়, আর মুছে ফেলা যায় না। কিছুই না মেলা traffic-এর কী হবে, সেটা ঠিক করে এর action: সাধারণত মূল একটা target group-এ forward, কখনো একটা fixed 404।
default-এ একটা ALB-এ ১০০টা rule রাখা যায় (default rule বাদে); দরকার হলে quota বাড়ানো যায়।
একটা ALB, অনেকগুলো routing rule
ALB প্রতিটা HTTP request পড়ে, তারপর listener rule-গুলো priority অনুযায়ী মিলিয়ে দেখে, সবচেয়ে ছোট সংখ্যা আগে। যে rule-এর সব condition প্রথম মিলে যায়, request কোথায় যাবে সেটা সে-ই ঠিক করে। কোনোটা না মিললে ঠিক করে default rule।
পরিস্থিতি
Listener rule (HTTPS :443)
| Priority | Condition | Action |
|---|---|---|
| 10 | path /users* | forward tg-users |
| 20 | path /search* | forward tg-search |
| default | (nothing matched) | forward tg-web |
port 443-এ একটা HTTPS listener, তাতে দুটো rule আর একটা default। প্রতিটা target group আলাদা একটা microservice, যার নিজের instance আর নিজের health check আছে।
#Action
প্রতিটা rule শেষ হয় ঠিক একটা routing action দিয়ে, আর HTTPS rule-এ তার আগে একটা authentication action বসানো যায়।
| Action | কী করে | সাধারণ ব্যবহার |
|---|---|---|
forward | request পাঠায় একটা target group-এ, অথবা weight দিয়ে পাঁচটা পর্যন্ত target group-এ (প্রতিটার weight 0–999) | সাধারণ routing; canary (90/10) আর blue/green (0/100 → 100/0) release |
redirect | নতুন URL দিয়ে 301 (স্থায়ী) বা 302 (অস্থায়ী) ফেরত দেয়; #{host}, #{path}, #{query} আবার ব্যবহার করা যায় | HTTP → HTTPS, পুরনো domain → নতুন domain |
fixed-response | ALB নিজেই একটা status code (2xx, 4xx, 5xx) আর চাইলে একটা body দিয়ে উত্তর দেয় | maintenance page, অচেনা path-এ 404, আটকানো range-এ 403 |
authenticate-cognito / authenticate-oidc | forward করার আগে ইউজারকে Amazon Cognito বা যেকোনো OIDC identity provider দিয়ে login করায় (শুধু HTTPS listener-এ) | ভেতরের tool, admin page, app-এ login-এর code না লিখেই |
jwt-validation (২০২৫) | forward করার আগে request-এর JWT access token যাচাই করে | মেশিন থেকে মেশিনের API; নতুন একটা পার্শ্ব feature, এখনো পরীক্ষার বিষয় না |
কয়েকটা খুঁটিনাটি যেগুলো কাজে লাগে:
- weight দিয়ে ভাগ হয় ALB-এর ভেতরেই, তাই traffic সরাতে কয়েক সেকেন্ড লাগে, DNS cache শেষ হওয়ার অপেক্ষা নেই, weighted DNS record-এ যেটা থাকে।
- weight দেওয়া কোনো target group যদি খালি বা পুরোপুরি unhealthy হয়, ALB অন্যগুলোতে সরিয়ে নেয় না: ওই ভাগের request-গুলো ব্যর্থ হয়। তাই canary-র metric-এ নজর রাখো।
- canary চলার সময় একজন ইউজারকে একই version-এ রাখতে চাইলে forward action-এ target group stickiness চালু করো (cookie-র খুঁটিনাটি লেসন ৬.৪-এ)।
- ২০২৫ থেকে rule-এ transform-ও রাখা যায়, যেটা forward করার আগে host header বা URL বদলে লেখে। জেনে রাখা ভালো; পরীক্ষা এখনো ওপরের পুরনো action-গুলোই আশা করে।
#Application কী দেখে: X-Forwarded header
ALB client-এর connection নিজের কাছে শেষ করে নতুন একটা খোলে, তাই target-এর socket-এ দেখা যায় ALB-এর private IP, client-এরটা না। আসল তথ্যগুলো ALB পাঠায় তিনটা request header-এ:
| Header | কী থাকে | উদাহরণ |
|---|---|---|
X-Forwarded-For | client-এর IP address (client বা আগের কোনো proxy আগে থেকে কোনো তালিকা পাঠালে তার শেষে জোড়া) | X-Forwarded-For: 198.51.100.7 |
X-Forwarded-Proto | client কোন protocol দিয়ে ALB-তে এসেছিল | X-Forwarded-Proto: https |
X-Forwarded-Port | client কোন port-এ যুক্ত হয়েছিল | X-Forwarded-Port: 443 |
log, কোন দেশ থেকে এল আর rate limit-এর জন্য X-Forwarded-For ব্যবহার করো, আর ঠিকঠাক link বানাতে বা HTTPS-এ redirect লাগবে কি না বুঝতে X-Forwarded-Proto। client নিজেও একটা বানানো X-Forwarded-For পাঠাতে পারে; ALB যে address আসলে দেখেছে সেটা জোড়ে একদম শেষে, তাই ডানদিকের শেষ entry-টাই বিশ্বাস করো।
#Microservice আর container
ALB আসার আগে প্রতিটা application-এর জন্য আলাদা একটা Classic Load Balancer লাগত। path আর host rule-সহ একটা ALB কয়েক ডজন service-এর সামনে বসতে পারে, প্রত্যেকে নিজের target group-এ, নিজের health check নিয়ে। এজন্যই পরীক্ষায় ALB-এর সাথে microservice আর container শব্দ দুটো জোড়া থাকে।
Amazon ECS-এ (EC2-এর ওপর container) bridge network mode-এ host port 0 দিলে Docker প্রতিটা task-কে একটা random উঁচু port দেয়, তাই একই container-এর কয়েকটা কপি একটা instance-এই চলতে পারে। ECS প্রতিটা task-কে target group-এ register করে instance আর ওই port মিলিয়ে, আর ALB নিজে থেকেই ঠিক port-এ traffic পাঠায়। এর নাম dynamic port mapping। একটা নিয়ম মনে রাখো: instance-এর security group-এ ALB-এর security group থেকে পুরো ephemeral port range খুলতে হবে, শুধু port 80 না, নইলে task-গুলো health check-এ fail করবে। আর awsvpc network mode-এ (Fargate-এ সবসময়) প্রতিটা task নিজের একটা network interface পায়, তখন register হয় IP address দিয়ে।
#স্থির DNS name, স্থির IP না
অনেক practice test-এ একটা প্রশ্ন আসে: “Application Load Balancer আর Classic Load Balancer-এর একটা static ____ থাকে: IPv4 address, IPv6 address, DNS name, নাকি Elastic IP?” উত্তর হলো DNS name।
ALB একটা মেশিন না। AWS প্রতিটা চালু AZ-এ load balancer node চালায়, আর traffic বাড়লে-কমলে সেগুলো যোগ করে, সরায় বা বদলে দেয়। প্রতিবার বদলের সাথে নতুন IP address আসতে পারে, তাই ALB বা CLB-এর IP স্থির থাকবে, এমন কথা AWS কখনো দেয় না। load balancer যতদিন আছে, ততদিন যেটা একই থাকে সেটা তার DNS name, যেটা সবসময় তখনকার node-গুলোর IP-তে resolve হয়।
- নিজের domain ব্যবহার করতে চাইলে load balancer-এর DNS name-এর দিকে একটা Route 53 Alias record বানাও। Alias zone apex-এ (
example.com) কাজ করে, যেখানে CNAME দেওয়া যায় না, আর AWS resource-এর দিকে Alias query-র জন্য Route 53 টাকা নেয় না।www.example.com-এর মতো subdomain-এ CNAME-ও চলে, তবু Alias-ই ভালো। - ALB-এর এখনকার IP কখনো A record-এ, client-এর configuration-এ বা partner-এর firewall-এ লিখে রেখো না। একদিন সেটা বদলাবেই।
- কোনো partner-এর যদি সত্যিই একটা HTTP application-এর জন্য স্থির IP লাগে, তাহলে ALB-এর সামনে একটা NLB বসাও, অথবা তার সামনে AWS Global Accelerator (দুটো static anycast IP)।
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানি www.example.com আর api.example.com চালায়। /v1/*-এ আসা API request যাবে একটা fleet-এ, /v2/* যাবে দ্বিতীয় একটায়, আর www-এর সবকিছু তৃতীয়টায়। কোন design-এ সবচেয়ে কম load balancer লাগবে?
#Network Load Balancer (layer 4)
#সে কী করে
NLB এগিয়ে দেয় TCP, UDP আর TLS (সাথে একই port-এ TCP_UDP, আর ২০২৫-এর শেষ থেকে passthrough mode-এ QUIC)। সে কখনো HTTP পড়ে না, শুধু address আর port দেখে, flow-এর hash দিয়ে একটা target বেছে নিয়ে packet এগিয়ে দেয়। এজন্য সে:
- খুব দ্রুত: প্রতি সেকেন্ডে লাখ লাখ request, খুব কম latency, আর হঠাৎ চাপ এলেও আগে থেকে warm-up করাতে হয় না।
- যেকোনো protocol-এ চলে: database, IoT device-এর protocol, game server, VoIP, নিজেদের বানানো binary protocol।
- লম্বা connection-এ সমস্যা নেই: একটা TCP connection বা UDP flow পুরো সময় একটা target-এই থাকে।
নোটে চিরচেনা ভাগটা দেওয়া আছে। TCP সেই traffic-এর জন্য, যেটা পুরোপুরি আর ঠিক ক্রমে পৌঁছাতেই হবে: database, login, বেশিরভাগ web traffic। UDP সেই traffic-এর জন্য, যেখানে প্রতিটা packet-এর চেয়ে গতি বেশি জরুরি: live voice (VoIP), real-time video, আর multiplayer game-এর দ্রুত বদলাতে থাকা অবস্থা। অনেক game দুটোই ব্যবহার করে: চলাফেরার জন্য UDP, login, chat আর কেনাকাটার জন্য TCP।
#Static IP আর Elastic IP
NLB-এর প্রতিটা চালু AZ-এ একটা node থাকে, আর load balancer যতদিন আছে, প্রতিটা node ততদিন একটা IP address পায় যেটা বদলায় না।
- internet-facing NLB প্রতিটা subnet-এ তোমার নিজের Elastic IP নিতে পারে (বানানোর সময় ঠিক করতে হয়), তাই address-গুলো তোমার মালিকানায় থাকে, কাগজে লিখে রাখা যায়।
- internal NLB প্রতিটা subnet থেকে তোমার পছন্দের একটা private IP নিতে পারে।
- DNS name তখনও থাকে, আর সেটা এই স্থির IP-গুলোতেই resolve হয়।
প্রশ্নে যখনই “static IP”, “Elastic IP” বা “client তার firewall-এ load balancer-এর IP allowlist করবে” দেখবে, উত্তর এটাই।
#Client IP preservation
TCP বা UDP listener-এ NLB দ্বিতীয় কোনো connection খোলে না, তাই target client-এর আসল address দেখতে পায়। তবে default-টা নির্ভর করে target type আর protocol-এর ওপর:
| Target group | target কোন IP দেখে (default) | বদলানো যায়? |
|---|---|---|
| Instance target, যেকোনো protocol | client-এর IP | TCP/TLS-এ হ্যাঁ, preserve_client_ip দিয়ে |
| IP target, UDP বা TCP_UDP (আর QUIC) | client-এর IP | না, সবসময় চালু |
| IP target, TCP বা TLS | NLB-এর private IP | হ্যাঁ: preserve_client_ip চালু করো (target একই বা peered VPC-তে থাকলে), অথবা Proxy Protocol v2 ব্যবহার করো |
| target হিসেবে ALB | client-এর IP ALB পর্যন্ত যায়, ALB সেটা X-Forwarded-For-এ বসায় | — |
| PrivateLink দিয়ে আসা traffic | সবসময় NLB-এর private IP | Proxy Protocol v2 ব্যবহার করো |
উল্টো দিকটা হলো: client-এর IP থেকে গেলে target-এর security group-কে client-দের address allow করতে হবে (অথবা নিচে বলা NLB-এর security group-কে), শুধু VPC-র range না।
Application কোন IP দেখে?
NLB সাধারণত client-এর packet source IP না বদলেই পার করে দেয়। ALB client-এর connection নিজের কাছে শেষ করে, তারপর নতুন একটা connection খোলে, তাই target দেখে ALB-কে, আর আসল IP জানতে তাকে X-Forwarded-For header পড়তে হয়।
পরিস্থিতি
client NLB-এর static IP-তে একটা TCP connection খুলল।
#Target আর health check
একটা NLB target group-এ থাকতে পারে:
- Instance (instance ID দিয়ে),
- IP address (private range, VPN বা Direct Connect দিয়ে on-premises, আর peered VPC-সহ),
- একটা Application Load Balancer (target type
alb), যেটা ALB-কে static IP দেয় আর PrivateLink-এর পেছনে বসায়। ALB-কে একই VPC-তে থাকতে হবে, target group-এর protocol TCP, আর তার port ALB-এর কোনো listener-এর port-এর সাথে মিলতে হবে।
health check হয় TCP, HTTP বা HTTPS দিয়ে, কখনো UDP দিয়ে না। UDP service হলে instance-এ ছোট একটা TCP বা HTTP health endpoint চালাও। পারলে HTTP check-ই দাও: TCP check শুধু প্রমাণ করে port খোলা আছে, application ঠিকমতো কাজ করছে কি না তা না। ২০২৫-এর নভেম্বর থেকে NLB-এর forward action-ও ALB-এর মতো weighted target group নিতে পারে।
#Security group: ঐচ্ছিক, তবে বানানোর সময়েই ঠিক করতে হয়
২০২৩-এর আগস্ট থেকে NLB-এও ALB-এর মতো security group লাগানো যায়। এগুলো ঐচ্ছিক, তবে একটা ফাঁদ আছে: এগুলো যোগ করা যায় শুধু NLB বানানোর সময়। security group ছাড়া বানানো NLB-এ পরে আর কখনো দেওয়া যায় না; নতুন একটা NLB বানাতে হয়। আর অন্তত একটা দিয়ে বানালে পরে ইচ্ছামতো বদলানো যায়। NLB-এ security group থাকলে target-গুলো সেটাকেই source হিসেবে দিতে পারে, ঠিক লেসন ৬.২-এর ALB-এর কায়দায়। health check outbound rule মেনে চলে।
#PrivateLink endpoint service
কোনো service অন্য VPC বা অন্য AWS account-কে private-ভাবে দিতে চাইলে, peering ছাড়া আর internet ছাড়া, সেটাকে VPC endpoint service (AWS PrivateLink) হিসেবে প্রকাশ করতে হয়। service-এর দিকে সামনে একটা Network Load Balancer থাকতেই হয় (appliance-এর বেলায় Gateway Load Balancer)। ব্যবহারকারীরা নিজেদের VPC-তে একটা interface endpoint বানায়, আর সেটা দিয়ে তোমার NLB-এ পৌঁছায়। path rule-সহ HTTP application হলে NLB → ALB ব্যবহার করো।
NLB: প্রতিটা AZ-এ একটা স্থির IP
NLB-এর প্রতিটা চালু AZ-এ একটা করে node থাকে, আর load balancer যতদিন আছে প্রতিটা node ততদিন একটাই IP address ধরে রাখে। শুধু address আর port দেখে এটা TCP, UDP আর TLS এগিয়ে দেয়।
পরিস্থিতি
NLB তৈরি করা হয়েছে দুটো AZ-এ, আমাদের নিজেদের দুটো Elastic IP দিয়ে: AZ a-তে 203.0.113.10, AZ b-তে 203.0.113.20। এর DNS name resolve হলে ঠিক এই দুটো address-ই আসে।
নিজেকে যাচাই করোপ্রশ্ন
একটা trading platform-কে ৪০টা partner ব্যাংকের connection নিতে হবে। প্রতিটা ব্যাংক বাইরে traffic পাঠাতে দেয় শুধু তাদের firewall-এ লেখা IP address-এ, আর platform-টা TCP-র ওপর নিজস্ব একটা binary protocol চালায়। solutions architect কী ব্যবহার করবে?
#Gateway Load Balancer (layer 3)
#কেন এটা লাগে
অনেক কোম্পানির নিয়ম হলো প্রতিটা packet একটা firewall বা intrusion prevention product-এর ভেতর দিয়ে যেতেই হবে, যেটা তারা আগে থেকেই বিশ্বাস করে (Palo Alto Networks, Cisco, Fortinet, Check Point আরও অনেকে), AWS-এ virtual machine হিসেবে। হাতে হাতে এটা করা কঠিন: appliance-গুলোকে বড়-ছোট হতে হবে, নষ্ট একটাকে পাশ কাটাতে হবে, আর একটা কথোপকথনের দুই দিকের traffic-কেই একই appliance-এর ভেতর দিয়ে যেতে হবে।
Gateway Load Balancer দুটো কাজ একসাথে করে:
- একটা transparent network gateway: ঢোকা আর বের হওয়ার একটাই পথ, যেটার ভেতর দিয়ে traffic route করা হয়। সে source বা destination address বদলায় না; application টেরই পায় না যে সে আছে।
- appliance fleet-এর জন্য একটা load balancer: healthy appliance-দের মধ্যে flow ভাগ করে দেয়, আর প্রতিটা flow-কে একটা appliance-এ বেঁধে রাখে।
#Traffic কীভাবে চলে
route table traffic পাঠায় GWLB endpoint-এ
GWLB appliance-গুলোর সাথে থাকে একটা security (provider) VPC-তে। প্রতিটা application VPC-তে তুমি একটা GWLB endpoint বানাও, মানে Gateway Load Balancer type-এর একটা PrivateLink endpoint, তার নিজের subnet-এ। route table একে next hop বানায়: internet gateway-এর edge route table app subnet-এর traffic পাঠায় endpoint-এ, আর app subnet-এর route table
0.0.0.0/0পাঠায় endpoint-এ।GENEVE দিয়ে একটা appliance-এ
GWLB সব port-এর সব IP packet শোনে; বেছে নেওয়ার মতো কোনো listener protocol বা port নেই। flow-এর hash দিয়ে (default-এ 5-tuple, নয়তো 3-tuple বা 2-tuple) সে একটা appliance বেছে নেয়, আর আসল packet-টা না বদলে UDP port 6081-এ GENEVE-এর ভেতরে মুড়ে দেয়। appliance-এর security group-এ GWLB থেকে UDP 6081 খোলা থাকতে হবে, আর appliance-কে GENEVE বুঝতে হবে।
পরীক্ষা, তারপর একই পথে ফেরত
appliance ভেতরের packet পরীক্ষা করে, তারপর হয় ফেলে দেয়, নয়তো GENEVE-এ মুড়ে GWLB-কে ফেরত দেয়। GWLB সেটা endpoint-এ ফেরত দেয়, আর routing সেটাকে আসল গন্তব্যে পৌঁছে দেয়। উত্তরও endpoint হয়ে আবার আসে, আর hash সেটাকে একই appliance-এ পাঠায়, তাই stateful inspection দুই দিকই দেখতে পায়।
আরও কিছু জানা দরকারি তথ্য:
- Target type: instance আর IP। Health check: TCP, HTTP বা HTTPS।
- GWLB-এর নিজের কোনো security group নেই, AWS WAF-ও নেই।
- cross-zone load balancing default-এ বন্ধ।
- GWLB 8,500 byte পর্যন্ত packet নেয়; GENEVE ৬৮ byte যোগ করে, তাই appliance-এর MTU অন্তত 8,568 হতে হবে। সে packet ভাঙে না (fragment করে না), Path MTU Discovery-ও সমর্থন করে না।
- অলস flow বন্ধ হয় TCP-তে ৩৫০ সেকেন্ড পরে (৬০ থেকে ৬,০০০-এর মধ্যে বদলানো যায়), অন্য protocol-এ ১২০ সেকেন্ড পরে।
- একটা appliance নষ্ট হলে নতুন flow যায় শুধু healthy appliance-এ। চলতে থাকা flow default-এ (
no_rebalance) নষ্টটাতেই যেতে থাকে, আর timeout না হওয়া পর্যন্ত হারায়; target failoverrebalanceকরলে সেগুলোও নতুন করে hash হয়, অথবাno_rebalanceরেখে TCP reset চালু করো, যাতে client তাড়াতাড়ি নতুন করে যুক্ত হয়। - Transit Gateway-র সাথে (appliance mode) একটা কেন্দ্রীয় inspection VPC-র একটা GWLB অনেকগুলো VPC-র traffic পরীক্ষা করতে পারে; সেই design আসবে networking chapter-এ।
- AWS Network Firewall হলো AWS-এর নিজের managed firewall। প্রশ্নে যদি third-party appliance-এর কথা না থাকে, শুধু inspection চায়, তাহলে Network Firewall সহজ উত্তর হতে পারে।
GWLB: প্রতিটা packet firewall হয়ে
route table traffic পাঠায় একটা GWLB endpoint-এ। GWLB প্রতিটা packet GENEVE-এ (UDP 6081) মুড়ে fleet-এর একটা appliance-কে দেয়, ফেরত নেয়, আর packet অপরিবর্তিত অবস্থায় application-এর দিকে এগিয়ে যায়।
পরিস্থিতি
app চলছে একটা VPC-তে। third-party firewall-এর একটা fleet আলাদা একটা security VPC-তে GWLB-এর পেছনে বসানো। app VPC-তে একটা GWLB endpoint PrivateLink দিয়ে দুটোকে জুড়ে দেয়।
#Classic Load Balancer, এক লাইনে
CLB (লেসন ৬.২) সাধারণ TCP, SSL, HTTP আর HTTPS সামলায়, এর DNS name স্থির, target group নেই। AWS বলে ALB বা NLB-তে চলে যেতে; পরীক্ষায় এটা প্রায় সবসময় ভুল উত্তর, নয়তো “পুরনো পদ্ধতি”।
#Target group
target group হলো listener rule যে গন্তব্যগুলোতে traffic পাঠায় তাদের তালিকা, সাথে তাদের পরীক্ষা করার নিয়ম। load balancer traffic নেয় আর পথ ঠিক করে; target group বলে দেয় কে সেটা পাবে আর তারা healthy কি না। (নোটে বলা আছে load balancer “নিজে কোনো traffic প্রসেস করে না”; আরও ঠিক করে বললে, ALB প্রতিটা request ঠিকই প্রসেস করে route করে, কিন্তু আসল কাজটা করে group-এর target-গুলো।)
#Target group-এ কী কী ঠিক করো
| Setting | মানে |
|---|---|
| Target type | instance, ip, lambda (ALB) বা alb (NLB)। বানানোর সময় ঠিক হয়ে যায় |
| Protocol আর port | load balancer target-এর সাথে কীভাবে কথা বলবে: ALB-এ HTTP/HTTPS; NLB-এ TCP, UDP, TCP_UDP, TLS (QUIC); GWLB-এ GENEVE 6081। প্রতিটা target-এর জন্য আলাদা port দেওয়া যায় |
| Protocol version (ALB) | HTTP/1.1, HTTP/2 বা gRPC |
| Health check | protocol, port, path, interval, timeout, healthy আর unhealthy threshold, success code। ঠিক করা হয় প্রতিটা target group-এ আলাদা (বিস্তারিত লেসন ৬.২-এ) |
| Attribute | deregistration delay, stickiness, slow start, load balancing algorithm, cross-zone override, client IP preservation, Proxy Protocol v2, target failover… (stickiness, cross-zone আর deregistration delay লেসন ৬.৪-এ) |
যে নিয়মগুলো প্রশ্নে আসে:
- একটা target অনেকগুলো target group-এ থাকতে পারে, একই বা আলাদা port-এ। একটা instance
tg-web-এ port 80-এ website চালাতে পারে, আবারtg-admin-এ 8080-এ একটা admin app। - একটা target group একটাই load balancer-এর।
- Auto Scaling group তার সাথে জোড়া target group-এ নিজের instance-গুলো নিজেই register আর deregister করে (লেসন ৬.৫)।
- প্রতিটা target healthy না unhealthy, সেটা দেখা যায় EC2 console-এর Target groups পাতায়, instance-এর পাতায় না। একটা instance EC2-তে “running” আর target group-এ “unhealthy”, দুটোই একসাথে হতে পারে।
#কোন load balancer কোন target type নেয়
| Target type | ALB | NLB | GWLB | খেয়াল রাখো |
|---|---|---|---|---|
instance | হ্যাঁ | হ্যাঁ | হ্যাঁ | traffic যায় instance-এর primary private IP-তে |
ip | হ্যাঁ | হ্যাঁ | হ্যাঁ | শুধু private IP: VPC-র subnet, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 100.64.0.0/10। এর মধ্যে পড়ে VPN বা Direct Connect দিয়ে on-premises server, peered VPC-র instance, container, database। public IP বাতিল |
lambda | হ্যাঁ | না | না | প্রতি target group-এ একটা function; HTTP request হয়ে যায় একটা JSON event; request আর response-এ 1 MB সীমা |
alb | না | হ্যাঁ | না | প্রতি target group-এ একটা ALB, একই VPC, TCP, port ALB-এর কোনো listener-এর সাথে মিলতে হবে |
ECS task আলাদা কোনো type না: সেগুলো register হয় instance হিসেবে (bridge mode, dynamic port) বা ip হিসেবে (awsvpc mode, Fargate)।
ALB-এর তিন রকম target
একটা target group-এর target type একটাই, বানানোর সময় ঠিক হয়ে যায়: instance (instance ID দিয়ে), ip (VPC যেকোনো private IP-তে route করতে পারলেই হলো, এমনকি তোমার নিজের data centre-এও) অথবা lambda (একটা function)।
পরিস্থিতি
tg-web-এর target type instance। instance-গুলো ID দিয়ে register হয়, সাধারণত Auto Scaling group নিজেই করে দেয়, আর ALB প্রতিটা instance-এর primary private IP-তে traffic পাঠায়।
#খরচ কত
এখনকার প্রজন্মের প্রতিটা load balancer-এর খরচ ঘণ্টার ভাড়া আর capacity unit। প্রতি ঘণ্টায় AWS কয়েকটা মাপ নেয়, আর বিল করে শুধু যেটা সবচেয়ে বেশি সেটার। লেখার সময়ের us-east-1-এর দাম:
| ALB | NLB | GWLB | |
|---|---|---|---|
| ঘণ্টার ভাড়া | $0.0225 | $0.0225 | $0.0125 |
| একক | LCU, প্রতি LCU-ঘণ্টা $0.008 | NLCU, প্রতি NLCU-ঘণ্টা $0.006 | GLCU, প্রতি GLCU-ঘণ্টা $0.004 |
| প্রতি এককে নতুন connection | সেকেন্ডে 25টা | সেকেন্ডে TCP 800, UDP 400, TLS 50টা | সেকেন্ডে 600টা |
| প্রতি এককে চালু connection | মিনিটে 3,000টা | মিনিটে TCP 100,000, UDP 50,000, TLS 3,000টা | মিনিটে 60,000টা |
| প্রতি এককে প্রসেস করা byte | ঘণ্টায় 1 GB (Lambda target-এ 0.4 GB) | ঘণ্টায় 1 GB | ঘণ্টায় 1 GB |
| প্রতি এককে rule evaluation | সেকেন্ডে 1,000টা (প্রথম 10টা rule ফ্রি) | — | — |
প্রতিটা GWLB endpoint-এর বিল আলাদা, PrivateLink-এর হিসাবে: প্রতি AZ-এ ঘণ্টায় $0.01, সাথে প্রতি GB $0.0035।
হিসাব করে দেখি (ALB)। ব্যস্ত একটা ঘণ্টায় একটা ALB পেল সেকেন্ডে ৫০টা নতুন connection, ৯,০০০টা চালু connection, ২.৫ GB data প্রসেস, আর সেকেন্ডে ২০০টা request, যার প্রতিটা ১৫টা rule পার হয়।
- নতুন connection: 50 ÷ 25 = 2 LCU
- চালু connection: 9,000 ÷ 3,000 = 3 LCU
- প্রসেস করা byte: 2.5 ÷ 1 = 2.5 LCU
- rule evaluation: 200 × (15 − 10 ফ্রি) = সেকেন্ডে 1,000 ÷ 1,000 = 1 LCU
সবচেয়ে বেশি হলো 3 LCU। ওই ঘণ্টার খরচ $0.0225 + 3 × $0.008 = $0.0465। পুরো মাস (৭৩০ ঘণ্টা) এই হারে চললে: প্রায় $33.95।
#তুলনা আর বেছে নেওয়া
| ALB | NLB | GWLB | CLB (পুরনো) | |
|---|---|---|---|---|
| Layer | 7 | 4 | 3 | 4 আর 7 |
| Listener protocol | HTTP, HTTPS (HTTP/2, gRPC, WebSockets) | TCP, UDP, TCP_UDP, TLS, QUIC | সব IP packet (appliance-এ GENEVE 6081) | TCP, SSL, HTTP, HTTPS |
| content দেখে routing | path, host, header, method, query, source IP | না | না | না |
| Static IP | না: শুধু স্থির DNS name | হ্যাঁ: প্রতি AZ-এ একটা, Elastic IP দেওয়া যায় | প্রযোজ্য না (endpoint দিয়ে পৌঁছায়) | না: শুধু স্থির DNS name |
| target-এ client-এর IP | না: ALB-এর IP, client থাকে X-Forwarded-For-এ | হ্যাঁ (instance target আর UDP; IP target-এ TCP/TLS চালু করলে) | হ্যাঁ: packet বদলায় না | না: X-Forwarded-For (HTTP) বা Proxy Protocol v1 (TCP) |
| Security group | লাগবেই | ঐচ্ছিক, শুধু বানানোর সময় | নেই | লাগবে (VPC-তে) |
| AWS WAF | হ্যাঁ | না | না | না |
| Target type | instance, ip, lambda | instance, ip, alb | instance, ip | শুধু instance, target group নেই |
| Health check | HTTP, HTTPS (gRPC) | TCP, HTTP, HTTPS | TCP, HTTP, HTTPS | TCP, SSL, HTTP, HTTPS |
| Cross-zone default | চালু | বন্ধ | বন্ধ | console-এ চালু, API-তে বন্ধ |
| PrivateLink endpoint service | না (সামনে NLB বসাও) | হ্যাঁ | হ্যাঁ (GWLB endpoint) | না |
| বিলের একক | LCU | NLCU | GLCU | ঘণ্টা + প্রসেস করা GB |
| পরীক্ষার শব্দ | path/host routing, microservices, container, WAF, Lambda, HTTP/2, gRPC, X-Forwarded-For | UDP, TCP, static IP, Elastic IP, প্রতি সেকেন্ডে লাখ লাখ request, ultra-low latency, PrivateLink | third-party appliance, firewall, IDS/IPS, DPI, GENEVE 6081 | “legacy”, “পুরনো প্রজন্ম” |
কোন load balancer?
traffic নিয়ে চারটা প্রশ্নের উত্তর দাও। ক্লিক করার সাথে সাথে উত্তর বদলাবে, সাথে কারণ, আর পরীক্ষার প্রশ্নে কোন শব্দগুলো দেখে এটা চিনবে।
১. কী ধরনের traffic?
২. client-দের কি স্থির IP address লাগবে (allowlist)?
৩. path বা host দেখে routing, AWS WAF, login বা redirect কি লাগবে?
৪. অন্য VPC বা account-কে কি private-ভাবে (PrivateLink) পৌঁছাতে হবে?
Application Load Balancer (ALB)
layer 7: এটা প্রতিটা request পড়ে, আর path, host, header, method, query string বা source IP দেখে routing করে; canary আর blue/green-এর জন্য weighted target group, redirect, fixed response, Cognito বা OIDC login আর AWS WAF সবই আছে। target হতে পারে instance, private IP (এমনকি on-premises) বা Lambda। এর DNS name স্থির, IP না: Route 53 Alias record দিয়ে এর দিকে দেখাও।
পরীক্ষায় চেনার শব্দ: path-based routing, host-based routing, microservice, container, ECS dynamic port, HTTP/2, gRPC, WebSockets, WAF, Lambda target, X-Forwarded-For
#কোথায় কী ভুল হয়
| লক্ষণ | সম্ভাব্য কারণ | সমাধান |
|---|---|---|
| application-এর log আর rate limit শুধু 10.x address দেখছে | ALB-এর পেছনে socket-এ ALB-এর IP দেখা যায় | X-Forwarded-For পড়ো (ডানদিকের শেষ entry), নয়তো AWS WAF-এ rate limit করো |
/users চলছে, কিন্তু /Users-এ 404 | path pattern case-sensitive; request গিয়ে পড়েছে default rule-এ | condition-এ ওই রূপটাও যোগ করো, নয়তো app-এ URL একরকম করে নাও |
| নতুন rule কখনো কাজই করছে না | ছোট priority নম্বরের একটা ঢালাও rule আগেই মিলে যাচ্ছে | নির্দিষ্ট rule-গুলোকে সবচেয়ে ছোট নম্বর দাও; বাকিটা default rule-কে ধরতে দাও |
| canary-র ইউজাররা 503 পাচ্ছে | weighted target group খালি বা unhealthy; ALB weighted group-এর মধ্যে failover করে না | group ঠিক করো, নয়তো তার weight 0 করো |
| কয়েক মাস পরে হঠাৎ partner-এর connection ব্যর্থ | partner ALB-এর IP allowlist করেছিল, সেগুলো বদলে গেছে | তাদের NLB-এর Elastic IP দাও, নয়তো Global Accelerator-এর static IP |
| NLB-এর target healthy, অথচ client timeout পাচ্ছে | client-এর IP অক্ষত থাকছে; target-এর security group শুধু VPC-র range খুলে রেখেছে | client-দের range allow করো, নয়তো NLB-এর security group-কে source দাও |
| security team NLB-এ security group যোগ করতে পারছে না | NLB-টা security group ছাড়াই বানানো | security group দিয়ে নতুন NLB বানাও, traffic সেখানে সরাও |
| NLB-এ AWS WAF লাগানো যাচ্ছে না | WAF ALB সমর্থন করে, NLB না | NLB-এর পেছনে একটা ALB বসাও (target type alb), নয়তো WAF-সহ CloudFront |
| ALB-এর পেছনের সব ECS task unhealthy | host port dynamic, অথচ instance-এর security group ALB থেকে শুধু port 80 খুলেছে | ALB-এর security group থেকে ephemeral port range খুলে দাও |
| Lambda target 502 দিচ্ছে | response 1 MB-এর বেশি, function-এ error, বা response ALB-এর format-এ না | response ছোট রাখো (বড় ফাইল S3-এ রাখো), response-এর JSON ঠিক করো |
| on-premises IP target unhealthy | VPN দিয়ে route নেই, বা data centre-এর firewall ALB-এর subnet আটকাচ্ছে | routing ঠিক করো, আর on-premises-এ ALB-এর subnet-এর range allow করো |
| GWLB: শুধু ঢোকার traffic পরীক্ষা হচ্ছে | app subnet-এর route table 0.0.0.0/0 সোজা internet gateway-তে পাঠাচ্ছে | 0.0.0.0/0 পাঠাও GWLB endpoint-এ (আর gateway-এর edge route table-ও endpoint-এ) |
| GWLB-এর appliance healthy, তবু traffic হারাচ্ছে | appliance-এর security group UDP 6081 আটকাচ্ছে, বা GENEVE-এর জন্য appliance-এর MTU ছোট | GWLB থেকে UDP 6081 খুলে দাও; MTU অন্তত 8,568 করো |
#System design-এ এগুলো কীভাবে আসে
- সাধারণ public web application: Route 53 Alias → ALB (AWS WAF, HTTPS, HTTP → HTTPS redirect-সহ) → প্রতি service-এ একটা Auto Scaling group। HTTP-র যেকোনো কিছুর জন্য এটাই আদর্শ design।
- container-এ microservice: একটা ALB, প্রতি service-এ একটা target group, path আর host rule, আর ECS task-গুলোকে dynamic port-এ বা IP দিয়ে register করে।
- gaming, IoT আর real-time media: UDP বা TCP listener আর Elastic IP-সহ NLB, সারা দুনিয়ার খেলোয়াড়দের জন্য অনেক সময় সাথে Global Accelerator।
- allowlist-ওয়ালা business-to-business API: Elastic IP-সহ NLB → routing আর WAF-এর জন্য ALB।
- অন্য AWS account-এর কাছে বিক্রি করা SaaS: PrivateLink endpoint service হিসেবে NLB; customer-রা নিজেদের VPC থেকে যুক্ত হয়, কিছুই public-এ খোলা থাকে না।
- hybrid migration: একটা ALB, যার কিছু target group AWS-এ আর একটা
iptarget group এখনো on-premises-এ থাকা server-এর দিকে; service সরার সাথে সাথে weight সরাও। - নিয়মে বাঁধা traffic-এর inspection: কেন্দ্রীয় একটা security VPC-তে third-party firewall-এর fleet-সহ GWLB, আর প্রতিটা application VPC-তে GWLB endpoint আর route table।
#নিজে করে দেখো
# 1. ALB with path-based routing (two services and a default)
for TG in tg-users tg-search tg-web; do
aws elbv2 create-target-group --name $TG --protocol HTTP --port 80 --vpc-id $VPC \
--target-type instance --health-check-path /health
done
aws elbv2 register-targets --target-group-arn $TG_USERS --targets Id=i-0abc1234 Id=i-0def5678
ALB=$(aws elbv2 create-load-balancer --name web-alb --type application \
--scheme internet-facing --subnets $SUBNET_A $SUBNET_B --security-groups $SG_ALB \
--query "LoadBalancers[0].LoadBalancerArn" --output text)
LISTENER=$(aws elbv2 create-listener --load-balancer-arn $ALB --protocol HTTP --port 80 \
--default-actions Type=forward,TargetGroupArn=$TG_WEB \
--query "Listeners[0].ListenerArn" --output text)
aws elbv2 create-rule --listener-arn $LISTENER --priority 10 \
--conditions Field=path-pattern,Values='/users*' \
--actions Type=forward,TargetGroupArn=$TG_USERS
aws elbv2 create-rule --listener-arn $LISTENER --priority 20 \
--conditions Field=host-header,Values=search.example.com \
--actions Type=forward,TargetGroupArn=$TG_SEARCH
aws elbv2 describe-rules --listener-arn $LISTENER \
--query "Rules[].[Priority,Conditions[0].Field,Actions[0].Type]" --output table
# 2. Canary: 90% to v1, 10% to v2 on the /users rule
aws elbv2 modify-rule --rule-arn $RULE_USERS --actions '[{"Type":"forward","ForwardConfig":{
"TargetGroups":[{"TargetGroupArn":"'$TG_USERS'","Weight":90},
{"TargetGroupArn":"'$TG_BETA'","Weight":10}]}}]'
# 3. Fixed response for a blocked range
aws elbv2 create-rule --listener-arn $LISTENER --priority 5 \
--conditions Field=source-ip,SourceIpConfig='{Values=["203.0.113.0/24"]}' \
--actions Type=fixed-response,FixedResponseConfig='{StatusCode=403,ContentType=text/plain,MessageBody=blocked}'
# 4. On-premises server as an IP target (outside the VPC → AvailabilityZone=all)
aws elbv2 create-target-group --name tg-legacy --protocol HTTPS --port 443 \
--target-type ip --vpc-id $VPC
aws elbv2 register-targets --target-group-arn $TG_LEGACY \
--targets Id=10.20.0.15,AvailabilityZone=all
# 5. Internet-facing NLB with your own Elastic IPs and a security group (only possible now!)
NLB=$(aws elbv2 create-load-balancer --name game-nlb --type network \
--subnet-mappings SubnetId=$SUBNET_A,AllocationId=$EIP_A SubnetId=$SUBNET_B,AllocationId=$EIP_B \
--security-groups $SG_NLB --query "LoadBalancers[0].LoadBalancerArn" --output text)
aws elbv2 create-target-group --name tg-game --protocol UDP --port 7777 --vpc-id $VPC \
--health-check-protocol HTTP --health-check-port 8080 --health-check-path /health
dig +short game-nlb-0123456789.elb.us-east-1.amazonaws.com # always the same two IPs
# 6. NLB in front of the ALB (static IPs + path rules)
aws elbv2 create-target-group --name tg-alb --target-type alb --protocol TCP --port 80 --vpc-id $VPC
aws elbv2 register-targets --target-group-arn $TG_ALB --targets Id=$ALB
# 7. GWLB with an appliance fleet and an endpoint in the app VPC
GWLB=$(aws elbv2 create-load-balancer --name fw-gwlb --type gateway \
--subnets $SEC_SUBNET_A $SEC_SUBNET_B --query "LoadBalancers[0].LoadBalancerArn" --output text)
aws elbv2 create-target-group --name tg-fw --protocol GENEVE --port 6081 --vpc-id $SEC_VPC \
--health-check-protocol TCP --health-check-port 80
aws elbv2 create-listener --load-balancer-arn $GWLB --default-actions Type=forward,TargetGroupArn=$TG_FW
aws ec2 create-vpc-endpoint-service-configuration --gateway-load-balancer-arns $GWLB \
--no-acceptance-required
aws ec2 create-vpc-endpoint --vpc-endpoint-type GatewayLoadBalancer --service-name $SVC_NAME \
--vpc-id $APP_VPC --subnet-ids $ENDPOINT_SUBNET
aws ec2 create-route --route-table-id $APP_SUBNET_RT --destination-cidr-block 0.0.0.0/0 \
--vpc-endpoint-id $GWLBE
# 8. Who is healthy, and why not?
aws elbv2 describe-target-health --target-group-arn $TG_USERS \
--query "TargetHealthDescriptions[].[Target.Id,Target.Port,TargetHealth.State,TargetHealth.Reason]"
#সারসংক্ষেপ
মূল কথাগুলো
- ALB = layer 7 (HTTP, HTTPS, HTTP/2, gRPC, WebSockets)। NLB = layer 4 (TCP, UDP, TLS)। GWLB = layer 3 (সব IP packet, appliance-এ GENEVE)। CLB = পুরনো।
- ALB-এর listener rule: path (case-sensitive), host, header, method, query string, source IP দেখে condition; ছোট priority নম্বর জেতে; একটা rule-এর সব condition মিলতে হয়; বাকি সব ধরে default rule।
- ALB-এর action: forward (canary আর blue/green-এর জন্য পাঁচটা পর্যন্ত weighted target group), redirect (HTTP → HTTPS), fixed-response, Cognito বা OIDC দিয়ে authenticate।
- ALB-এর পেছনে app দেখে ALB-এর IP; client থাকে X-Forwarded-For-এ (সাথে X-Forwarded-Proto আর X-Forwarded-Port)।
- ALB আর CLB-এর DNS name স্থির, IP না: Route 53 Alias record দাও, IP কখনো না।
- microservice আর container-এ ALB মানায়: একটা ALB, অনেক target group, ECS dynamic port mapping (ALB-এর security group থেকে ephemeral range খোলো)।
- NLB: প্রতি সেকেন্ডে লাখ লাখ request, প্রতি AZ-এ একটা static IP (Elastic IP দেওয়া যায়), client-এর IP অক্ষত, target instance / IP / ALB, health check TCP/HTTP/HTTPS, security group শুধু বানানোর সময়, PrivateLink endpoint service-এর সামনে।
- GWLB: third-party firewall, IDS/IPS, DPI-র জন্য transparent gateway আর load balancer একসাথে; UDP 6081-এ GENEVE; GWLB endpoint আর দুই দিকের route table; নতুন flow-এর বেলায় নষ্ট appliance বাদ পড়ে।
- Target group: target type বানানোর সময়ই ঠিক; health check প্রতি group-এ; একটা target অনেক group-এ; IP target হতে হবে private (VPN/Direct Connect দিয়ে on-premises); Lambda শুধু ALB-এ।
- দাম = ঘণ্টার ভাড়া + capacity unit-এর সবচেয়ে বড় মাপ (LCU, NLCU, GLCU)।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
এখনকার প্রজন্মের প্রতিটা load balancer কোন layer-এ কাজ করে?
নিজেকে যাচাই করোপ্রশ্ন
Gateway Load Balancer তার target group-এর virtual appliance-গুলোর সাথে কীভাবে traffic আদান-প্রদান করে?
নিজেকে যাচাই করোপ্রশ্ন
ALB listener rule-এর বৈধ condition type কোন দুটো?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা ALB listener-এ priority 30-এর একটা rule (path /api/*) আর priority 10-এর একটা rule (host api.example.com) আছে। api.example.com/api/orders-এর একটা request দুটোতেই মেলে। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
কোন target type Network Load Balancer সমর্থন করে না?
নিজেকে যাচাই করোপ্রশ্ন
ALB-এর পেছনের একটা application-এর প্রতিটা visitor-এর IP address জানা দরকার। সে এটা কোথায় পাবে?
নিজেকে যাচাই করোপ্রশ্ন
Application Load Balancer আর Classic Load Balancer-এর একটা static ____ থাকে।
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানি চায় তার zone apex example.com তার ALB-এর দিকে দেখাক। zone-টা Route 53-এ। কী বানাতে হবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানি ধাপে ধাপে AWS-এ আসছে। একটা ALB-কে /billing/*-এর request পাঠাতে হবে একটা billing server-এ, যেটা এখনো তাদের data centre-এ 10.20.0.15-এ চলছে, Site-to-Site VPN দিয়ে VPC-র সাথে যুক্ত। solutions architect কী করবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা multiplayer game খেলোয়াড়দের চলাফেরা পাঠায় UDP port 7777-এ। অঞ্চলের কিছু internet service provider খেলোয়াড়দের শুধু নির্দিষ্ট একটা IP address-এর তালিকায় যেতে দেয়। কোন load balancer মানাবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা HTTPS API call করতে একজন partner-কে স্থির IP address allowlist করতে হবে। API-তে কয়েকটা microservice-এ path-based routing আর AWS WAF দিয়ে সুরক্ষা লাগবে। কোন দুটো design সব চাহিদা মেটায়?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা security team চায় কয়েকটা VPC-তে ঢোকা সব traffic সেই একই third-party intrusion prevention appliance দিয়ে পরীক্ষা হোক, যেগুলো তারা on-premises-এ ব্যবহার করে; appliance-গুলো বাড়াতে হবে, আর unhealthy হলে পাশ কাটাতে হবে। কী ব্যবহার করা উচিত?
নিজেকে যাচাই করোপ্রশ্ন
EC2-এর ওপর একটা ECS cluster প্রতি instance-এ একটা container-এর অনেক কপি চালায়, dynamic host port দিয়ে, একটা ALB-এর পেছনে। সব task unhealthy দেখাচ্ছে। instance-এর security group ALB-এর security group থেকে TCP 80 খুলে রেখেছে। সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা টিম /checkout-এর ১০% request এক ঘণ্টার জন্য নতুন একটা version-এ পাঠাতে চায়, error বাড়লে কয়েক সেকেন্ডে rollback করতে চায়, আর DNS একদম বদলাতে চায় না। কী সাজাতে হবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা API ALB-এর পেছনে সরানোর পর হঠাৎ সব ইউজার 429 Too Many Requests পাচ্ছে। application প্রতি source IP-কে মিনিটে ১০০টা request দেয়। কারণ কী, আর সবচেয়ে ভালো সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
security group ছাড়া বানানো একটা নতুন NLB instance target-এ TCP 443 পাঠায়। health check pass করছে, কিন্তু internet-এর client-রা timeout পাচ্ছে। target-এর security group শুধু 10.0.0.0/16, মানে VPC-র range থেকে TCP 443 খুলেছে। সমস্যা কোথায়?
নিজেকে যাচাই করোপ্রশ্ন
চালু হওয়ার কয়েক মাস পরে security team একটা security group লাগিয়ে ঠিক করতে চায় কোন source NLB-তে পৌঁছাতে পারবে। NLB-টা security group ছাড়াই বানানো। তারা কী করতে পারে?
নিজেকে যাচাই করোপ্রশ্ন
একটা NLB একই VPC-তে IP target হিসেবে register করা container-এ TCP পাঠায়। application-কে আসল client-এর IP log করতে হবে, কিন্তু সে দেখছে NLB-এর private address। কোন দুটো বদল application-কে client-এর IP দেবে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা SaaS কোম্পানি চায় অন্য AWS account-এর customer-রা নিজেদের VPC থেকে private-ভাবে তার HTTP API-তে পৌঁছাক, peering বা internet ছাড়া। API-তে ALB-এর path rule আছে। কী বানাতে হবে?
নিজেকে যাচাই করোপ্রশ্ন
কোন load balancer-এ AWS WAF সরাসরি লাগানো যায়?
নিজেকে যাচাই করোপ্রশ্ন
ভেতরে আসা traffic পরীক্ষার একটা GWLB design-এ কোন route application-এর উত্তরগুলোকে firewall-এর ভেতর দিয়ে ফেরত পাঠায়?
নিজেকে যাচাই করোপ্রশ্ন
একটা GWLB-এর পেছনের তিনটা firewall appliance-এর একটা health check-এ fail করল। target failover default-এ আছে। traffic-এর কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা ALB rule /report পাঠায় একটা Lambda function-এ। ছোট report ঠিকমতো আসে, কিন্তু বড়গুলোতে 502 Bad Gateway, অথচ function-এ কোনো error নেই। সম্ভাব্য কারণ আর সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
এক ঘণ্টায় একটা ALB সামলাল সেকেন্ডে ৫০টা নতুন connection, ৯,০০০টা চালু connection, ২.৫ GB প্রসেস করা data, আর সেকেন্ডে ২০০টা request, যার প্রতিটা ১৫টা rule পার হয়। ঘণ্টায় $0.0225 আর প্রতি LCU-ঘণ্টা $0.008 ধরলে ওই ঘণ্টার খরচ কত?
নিজেকে যাচাই করোপ্রশ্ন
TCP listener-সহ একটা NLB এক ঘণ্টায় সামলাল সেকেন্ডে ১,৬০০টা নতুন connection, মিনিটে ১,৫০,০০০টা চালু connection আর ৫ GB traffic। ঘণ্টায় $0.0225 আর প্রতি NLCU-ঘণ্টা $0.006 ধরলে ওই ঘণ্টার খরচ কত?
নিজেকে যাচাই করোপ্রশ্ন
একটা ALB-এ rule আছে path /users* → tg-users, আর default rule পাঠায় tg-web-এ। একটা mobile app /Users/42 চাইল আর website থেকে একটা 404 পাতা পেল। কেন?
নিজেকে যাচাই করোপ্রশ্ন
Network Load Balancer নিয়ে কোন দুটো কথা সত্যি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
পড়ার নোটে লেখা: NLB নেটওয়ার্ক লেয়ারে কাজ করে আর শুধু IP আর port দেখে। সঠিক কথা কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
পরীক্ষার কোন দুটো কথা Application Load Balancer-এর দিকে ইঙ্গিত করে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা কোম্পানি ছাত্রছাত্রীদের on demand রেকর্ড করা lecture দেখায়। একটা practice test-এর উত্তরে লেখা: video streaming, তাই UDP-সহ NLB। সবচেয়ে ভালো যুক্তি কোনটা?