6.1
Vertical বনাম Horizontal Scaling, আর High Availability
scale up, scale out, আর কেন "highly available" বলতে অন্তত দুটো AZ বোঝায়।
16 মিনিট পড়া + Animation
টিপস: ডটেড-আন্ডারলাইন করা যেকোনো শব্দে ট্যাপ বা Hover করলে তার অর্থ দেখবে।
এই লেসন শেষে তুমি যা পারবে
- scalability, elasticity, agility, high availability আর fault tolerance, প্রতিটা এক লাইনে আলাদা করে বলতে পারবে।
- EC2-তে vertical scaling (scale up/down) বোঝাতে পারবে: resize কীভাবে হয়, কেন downtime লাগে, এর ছাদ কোথায়, আর কখন এটাই ঠিক পথ।
- horizontal scaling (scale out/in) বোঝাতে পারবে: কেন load balancer আর stateless server লাগে, আর session state নিয়ে কী করতে হয়।
- অন্তত দুটো Availability Zone জুড়ে high availability design করতে পারবে, active-active বা passive standby দিয়ে, আর লুকিয়ে থাকা single point of failure খুঁজে বের করতে পারবে।
- একটা AZ হারালেও app যেন টিকে থাকে, তার জন্য ২, ৩ বা আরও বেশি AZ-এ কতটা capacity লাগবে (AZ জুড়ে N+1) হিসাব করতে পারবে।
- পরীক্ষার keyword দেখে ঠিক উত্তর চিনতে পারবে: Auto Scaling group, Multi-AZ, load balancer, নাকি বড় instance।
#কাছাকাছি শোনায় এমন পাঁচটা শব্দ
Chapter ৬ দুটো service নিয়ে: Elastic Load Balancing (ELB) আর EC2 Auto Scaling। দুটোরই কাজ কয়েকটা নির্দিষ্ট গুণ এনে দেওয়া, আর পরীক্ষার প্রশ্ন এই গুণগুলোর নাম খুব মেপে মেপে ব্যবহার করে। তাই আগে শব্দগুলো পরিষ্কার করে নাও।
| শব্দ | মানে কী | কোন প্রশ্নের উত্তর দেয় |
|---|---|---|
| Scalability | resource যোগ করে system বেশি চাপ সামলাতে পারে, বড় resource দিয়ে হোক বা বেশি সংখ্যায়। | “এটা কি বড় হতে পারে?” |
| Elasticity | চাহিদা দেখে system নিজে থেকেই resource যোগ করে আর সরায়, ফলে capacity দুই দিকেই চাপের সাথে তাল মেলায়, আর তুমি যতটুকু ব্যবহার করো ততটুকুরই টাকা দাও। | “এটা কি নিজে নিজে বাড়ে-কমে?” |
| Agility | নতুন resource পাওয়া যায় কয়েক মিনিটে, hardware কিনে rack-এ বসাতে যে কয়েক সপ্তাহ লাগে তার বদলে। | “কত তাড়াতাড়ি capacity পাব?” |
| High availability (HA) | কোনো অংশ, এমনকি পুরো একটা data centre নষ্ট হলেও system চলতে থাকে, সাধারণত অন্তত দুটো Availability Zone-এ চালিয়ে। failover-এর সময় অল্প একটু থেমে যাওয়া মেনে নেওয়া হয়। | “ব্যর্থতার পরও কি টিকে থাকে?” |
| Fault tolerance | আরও কড়া রূপ: কিছু নষ্ট হলেও system একটুও না থেমে, capacity না হারিয়ে চলে, কারণ পুরো বাড়তি capacity আগে থেকেই চালু আছে। | “ব্যর্থতা কি কারও চোখেই পড়ে না?” |
Scalability-র বিষয় হলো চাপ। High availability-র বিষয় হলো ব্যর্থতা। দুটো জড়িয়ে আছে, কারণ দুটোই সাধারণত ছড়িয়ে রাখা কয়েকটা server দিয়ে বানানো হয়, কিন্তু একটা থাকলেই অন্যটা থাকবে এমন না: একটা AZ-এ চারটা server ভালো scale করে, কিন্তু একসাথে মরে; আবার অন্য AZ-এ standby-সহ একটা primary database highly available, কিন্তু primary যতটুকু পারে তার বেশি চাপ নিতে পারে না।
#Vertical scaling: আরও বড় instance
Vertical scaling (scale up, বা scale down) মানে একটা instance-এর মাপ বদলানো: বেশি vCPU, বেশি memory, বেশি network bandwidth। EC2-তে তুমি instance type বদলাও, যেমন t3.large (2 vCPU, 8 GiB) থেকে r7i.4xlarge (16 vCPU, 128 GiB)।
#EC2-তে resize কীভাবে হয়
instance stop করো
EBS-backed instance-এর type বদলানো যায় শুধু সেটা stopped থাকলে। এই মুহূর্ত থেকে application বন্ধ। (instance type আর family লেসন ৪.১-এ দেখেছ।)
instance type বদলাও
মানানসই একটা type বেছে নাও: একই architecture (x86 বা Arm), সমর্থিত AMI আর driver, আর যথেষ্ট EBS attachment। EBS volume থেকে যায়। stop করলে instance store-এর data মুছে যায়, আর Elastic IP না হলে public IPv4 address বদলে যায়।
আবার start করো
AWS নতুন মাপে instance-টাকে নতুন hardware-এ বসায়। boot, application চালু হওয়া, cache গরম হওয়া, সব মিলিয়ে কয়েক মিনিট। পরে scale down করতেও একই stop, বদল, start, একই outage।
#ছাদ কোথায়
Vertical scaling কোথাও না কোথাও গিয়ে থামবেই। EC2-তে পরিসর বিশাল, কিন্তু অসীম না:
| Instance | vCPU | Memory | |
|---|---|---|---|
| সবচেয়ে ছোট general purpose | t2.nano / t3.nano | 1 / 2 | 0.5 GiB |
| notes-এর উদাহরণ | t2.micro → t2.large | 1 → 2 | 1 GiB → 8 GiB |
| আজকের সবচেয়ে বড় | u7inh-32tb.480xlarge (High Memory) | 1,920 | 32 TiB |
সবচেয়ে বড় size-গুলো বানানো দানবীয় in-memory database-এর জন্য, দাম আকাশছোঁয়া, আর তবুও এটা একটা AZ-এ একটা machine। চাহিদা এর চেয়েও বাড়লে কেনার মতো আর বড় কিছু নেই।
#কখন vertical scaling-ই ঠিক পথ
| যেখানে vertical scaling মানায় | কেন |
|---|---|
| Relational database (RDS for MySQL বা PostgreSQL, EC2-তে নিজে চালানো database) | সব write সামলায় একটাই primary; তাকে সহজে দশটা কপি করা যায় না। বেশি memory মানে working set-এর বেশিটা cache-এ থাকে। |
| Cache, যেমন ElastiCache | বড় node মানে বেশি key রাখা যায় (ElastiCache shard দিয়ে scale out-ও করতে পারে)। |
| পুরনো (legacy) বা এক-instance-এর software | state রাখে local disk-এ, license বাঁধা একটা server-এ, বা কখনো কয়েক কপিতে চলার জন্য লেখাই হয়নি। |
| তাড়াতাড়ি একটা সমাধান | code বদলাতে হয় না; ভালো কিছু ভাবার ফাঁকে শুধু একটা বড় বাক্স। |
RDS-এও instance class বদলানো একরকম stop-start ধরনের কাজ। Multi-AZ চালু থাকলে RDS আগে standby-কে বদলায়, তারপর failover করে, তাতে outage ছোট হয়ে প্রায় একটা failover-এর সমান হয়। Aurora Serverless v2 আরও এক ধাপ এগিয়ে: restart ছাড়াই জায়গায় বসে capacity বাড়ায়-কমায়, মানে vertical scaling-কেই elastic বানিয়ে দেয়। এগুলো database chapter-এ আবার আসবে।
Scale up বনাম scale out
Vertical scaling মানে একটা server-কে বড় একটা server দিয়ে বদলে ফেলা। Horizontal scaling মানে load balancer-এর পেছনে একই মাপের আরও server যোগ করা।
পরিস্থিতি
একটা t3.large (2 vCPU, 8 GiB) সবাইকে সার্ভ করছে। traffic বেড়েছে, CPU পড়ে আছে 95%-এ। সহজ সমাধান মনে হয়: আরও বড় instance।
#Horizontal scaling: আরও বেশি instance
Horizontal scaling (scale out, বা scale in) মানে instance-এর সংখ্যা বদলানো। একটা বড় server-এর বদলে একই রকম অনেকগুলো চালাও, কাজটা তাদের মধ্যে ভাগ করে দাও। আজকের web application এভাবেই বড় হয়, আর cloud-এ এটা সহজ: একই launch template (লেসন ৪.৩) থেকে এক-দুই মিনিটে হুবহু একটা instance চালু হয়ে যায়।
এর জন্য তিনটা জিনিস লাগে:
- সামনে একটা load balancer। user-কে দশটা IP address দেওয়া যায় না। সে পায় একটা নাম, আর load balancer প্রতিটা request কোনো সুস্থ instance-এ পাঠায়। AWS-এ এটা ELB (লেসন ৬.২ থেকে ৬.৪)।
- instance যোগ-বিয়োগ করার কেউ। AWS-এ এটা Auto Scaling group (ASG) (লেসন ৬.৫)। নষ্ট instance-ও সে বদলে দেয়।
- Stateless server। যেকোনো instance যেন যেকোনো request-এর উত্তর দিতে পারে। কোনো server যদি user-এর session বা upload করা ফাইল নিজের কাছে রাখে, পরের request অন্য server-এ গেলে সে কিছুই পায় না, আর scale in হলে data-টাই ফেলে দেওয়া হয়।
state-এর সমাধান হলো সেটা server থেকে বের করে আনা: session যাবে ElastiCache বা DynamoDB-তে, ফাইল S3 বা EFS-এ, data database-এ। web tier একবার stateless হয়ে গেলে একশোতম server যোগ করাও দ্বিতীয়টা যোগ করার মতোই সহজ। (Sticky session একটা শর্টকাট, তবে ঝামেলা আছে, লেসন ৬.৪-এ দেখবে।)
Horizontal scaling-এরও দাম আছে: application-কে এর জন্য বানাতে হয়, আর shared অংশগুলো (database, cache) হয়ে ওঠে পরের scale করার মাথাব্যথা।
#High availability: অন্তত দুটো AZ
Availability Zone হলো এক বা একাধিক data centre, যার নিজস্ব বিদ্যুৎ, ঠান্ডা রাখার ব্যবস্থা আর network আছে, Region-এর অন্য AZ থেকে কয়েক কিলোমিটার দূরে, আর তাদের সাথে দ্রুত, কম latency-র fibre দিয়ে জোড়া (লেসন ১.২)। AZ কালেভদ্রে নষ্ট হয়, কিন্তু বিদ্যুৎ, cooling, network আর মানুষের ভুল, এসব ঘটেই। AWS-এ high availability মানে application অন্তত দুটো AZ-এ চালানো, যাতে একটা হারালে পুরোটা বন্ধ না হয়।
#Active-active আর passive standby
| Active-active | Active-passive (standby) | |
|---|---|---|
| কীভাবে চলে | প্রতিটা AZ-এর প্রতিটা কপি সারাক্ষণ traffic সার্ভ করে। | একটা কপি সার্ভ করে; অন্য AZ-এ একটা standby data-র কপি পায় আর অপেক্ষা করে। |
| একটা AZ নষ্ট হলে | কয়েক সেকেন্ডের মধ্যে load balancer মরা AZ-এ traffic পাঠানো বন্ধ করে। | standby-কে primary বানানো হয়। RDS Multi-AZ (একটা standby)-তে সাধারণত ৬০ থেকে ১২০ সেকেন্ড লাগে। |
| রোজকার কাজে বাড়তি capacity খাটে? | হ্যাঁ, সব কপিই কাজ করে | না, standby বসে থাকে (Multi-AZ standby read-ও সার্ভ করতে পারে না) |
| AWS-এ সাধারণ উদাহরণ | web আর app tier: AZ জুড়ে ASG + ELB | RDS Multi-AZ DB instance; Multi-AZ DB cluster আর Aurora আরও দ্রুত failover করে (সাধারণত ৩৫ সেকেন্ডের কম আর প্রায় ৩০ সেকেন্ড) |
দুটোই highly available। Active-active চলে horizontal scaling-এর হাত ধরে; আর যে database primary কয়েকটা writer হিসেবে চলতে পারে না, তার সাধারণ উত্তর passive standby।
#High availability আর fault tolerance এক জিনিস না
দুটো AZ-এ, প্রতিটায় দুটো করে instance নিয়ে একটা web tier highly available: একটা AZ গেলেও চলতে থাকে। কিন্তু প্রতিটা AZ যদি 60%-এ চলছিল, টিকে থাকা দুজনের এখন লাগবে 120%, আর Auto Scaling group নতুন instance না আনা পর্যন্ত user ধীর page দেখবে। Fault tolerant design ব্যর্থতার পরও পুরো capacity ধরে রাখে, মানে সারাক্ষণ যথেষ্ট বাড়তি capacity চালু রাখতে হয়। পরীক্ষা সাধারণত “fault tolerant” আর “একটা AZ নষ্ট হলেও টিকে থাকো”, দুটোকেই Multi-AZ-এর ইঙ্গিত হিসেবে ধরে, কিন্তু প্রশ্নে যদি থাকে “কোনো degradation ছাড়া” বা “performance-এ কোনো প্রভাব ছাড়া”, তখন সে চাইছে ব্যর্থতার হিসাব ধরে মাপ ঠিক করো (পরের অংশ)।
#Single point of failure
Single point of failure (SPOF) হলো এমন যেকোনো একটা অংশ, যেটা নষ্ট হলেই পুরো system বন্ধ। Multi-AZ কাজে লাগে তখনই, যখন প্রতিটা tier multi-AZ। সাধারণ লুকানো SPOF:
- সব instance একটা AZ-এ, সামনে load balancer থাকলেও।
- একদম ঠিকঠাক multi-AZ web tier-এর পেছনে single-AZ database।
- AZ a-তে একটাই NAT gateway, যেটা সব AZ-এর private subnet ব্যবহার করে (লেসন ৩.৪): AZ a গেলে AZ b-এর সুস্থ instance-ও internet হারায়। প্রতি AZ-এ একটা করে NAT gateway রাখো।
- একটাই EC2 instance proxy, bastion বা cron server হিসেবে, যার ওপর app নির্ভর করে।
- shared data রাখা একটা EBS volume (একটা AZ) বা EFS One Zone।
যখন একটা Availability Zone নষ্ট হয়
একটা AZ হলো এক বা একাধিক data centre, যার নিজস্ব বিদ্যুৎ আর network আছে। AZ কালেভদ্রে নষ্ট হয়, কিন্তু হয়, আর user টের পাবে কি না সেটা ঠিক করে design।
পরিস্থিতি
দুটো web server আর database, সবই AZ a-তে। scale করা যায়, একটা server গেলেও টিকে থাকে। দেখে redundant মনে হয়।
#একটা AZ-এর ব্যর্থতা ধরে মাপ: AZ জুড়ে N+1
ধরো application-এর peak-এ Pটা instance লাগে, আর সেটা চলে Nটা AZ-এ। একটা AZ হারালে থাকে N − 1টা। ব্যর্থতার সময় কিছু scale না করেই পুরো capacity রাখতে চাইলে (AWS একে বলে static stability), প্রতিটা AZ-এ লাগবে:
প্রতি AZ-এ instance = P ÷ (N − 1), ওপরের দিকে round করে, আর মোট = প্রতি AZ × N।
| peak-এ লাগে | AZ | প্রতি AZ | মোট চালু | peak-এর ওপরে বাড়তি | AZ গেলে capacity হারায় | স্বাভাবিক সময়ে peak-এ CPU |
|---|---|---|---|---|---|---|
| 12 | 2 | 12 | 24 | 100% | 50% | 50% |
| 12 | 3 | 6 | 18 | 50% | 33% | 67% |
| 12 | 4 | 4 | 16 | 33% | 25% | 75% |
| 12 (N+1 ছাড়া) | 3 | 4 | 12 | 0% | 33% | 100%, ব্যর্থতার পর 150% |
এই table-এ দুটো শিক্ষা লুকিয়ে আছে:
- ২টা AZ হলে একটা হারানো মানে অর্ধেক capacity হারানো, তাই কোনো degradation ছাড়া টিকতে হলে fleet দ্বিগুণ করতে হয়। ৩টা AZ-এ হারাও তিন ভাগের এক ভাগ, বাড়তি লাগে মাত্র 50%। AZ যত বেশি, এই বিমা তত সস্তা, এজন্যই production design-এ প্রায়ই তিনটা AZ থাকে।
- বাড়তি capacity না থাকলে Auto Scaling নতুন instance না আনা পর্যন্ত টিকে থাকা server-গুলো 100%-এর ওপরে চলে। এতে কয়েক মিনিট লাগে, আর নির্ভর করে বাকি AZ-গুলোতে ঠিক তখন capacity পাওয়া যায় কি না, যখন বাকি সবাইও সেখানেই instance চালু করছে।
একটা হিসাব করে দেখি। একটা দোকানের peak-এ ৯টা instance লাগে, চলে ৩টা AZ-এ। প্রতিটা AZ-এ লাগবে ৯ ÷ ২ = ৪.৫, মানে ৫টা, মোট ১৫টা। স্বাভাবিক সময়ে peak-এ প্রতিটা চলে ৯ ÷ ১৫ = 60%-এ। একটা AZ গেলে থাকে ১০টা, চলে ৯ ÷ ১০ = 90%-এ: ব্যস্ত, কিন্তু সবাইকে সার্ভ করছে। একই ৯টা যদি ৩ + ৩ + ৩ করে রাখা হতো, টিকে থাকা ৬টা চলত 150%-এ।
পুরনো N+1 নিয়মও (যা লাগে তার চেয়ে একটা বাড়তি) ঠিক এই চিন্তা, শুধু একেকটা server-এর বদলে পুরো AZ ধরে।
একটা AZ গেলে কতটা capacity থাকে
peak সময়ে app-এর নির্দিষ্ট সংখ্যক instance লাগে। কয়টা AZ-এ ছড়াবে আর কীভাবে মাপ ঠিক করবে বেছে নাও, তারপর AZ a নষ্ট করে দেখো বাকিদের কী হয়।
১. কয়টা AZ
২. peak-এ কয়টা instance লাগে
৩. মাপ ঠিক করার নিয়ম
৪. AZ a
AZ a
CPU ৫০%
AZ b
CPU ৫০%
প্রতি AZ
১২
মোট চালু
২৪
peak-এর ওপরে বাড়তি
১০০%
peak-এ CPU, সব AZ চালু
৫০%
capacity হারাল
০%
peak-এ CPU, AZ a নষ্ট
–
প্রতিটা AZ একাই peak সামলাতে পারে। দাম হলো ১২টা বাড়তি instance (peak-এর ১০০% বেশি)। AZ যত বেশি, এই বিমা তত সস্তা।
নিজেকে যাচাই করোপ্রশ্ন
একটা application-এর peak-এ ৮টা instance লাগে। একটা Availability Zone হারালেও কোনো degradation ছাড়া, আর ব্যর্থতার সময় কোনো scaling ছাড়াই চলতে হবে। তিনটা AZ ব্যবহার করলে সবচেয়ে কম কয়টা instance চালাতে হবে?
#Elasticity: দিনের বাঁকা রেখা ধরে চলা
বেশিরভাগ application-এর একটা দৈনিক ছন্দ আছে: রাতে চুপচাপ, দিনে ব্যস্ত, সন্ধ্যায় peak। স্থির capacity হয় বেশিরভাগ সময় বেশি, নয়তো peak-এ কম। একটা instance resize করে outage ছাড়া এই রেখা অনুসরণ করা যায় না। scaling policy-সহ একটা Auto Scaling group পারে, আর এটাই তাকে elastic বানায়: মোটামুটি যতটুকু ব্যবহার করো ততটুকুরই টাকা দাও, আর ভাবনার চেয়ে বড় peak এলে আরও instance চালু হয় (group-এর maximum পর্যন্ত)।
এক দিনের traffic, চারটা কৌশল
ভাঙা রেখা: প্রতি ঘণ্টায় চাপ সামলাতে কয়টা instance লাগে। টানা রেখা: কয়টা চলছে। নিচের ঘরগুলো এ পর্যন্ত দিনের হিসাব যোগ করে।
পরিস্থিতি
সময়
00:00
এখন লাগছে / এখন চলছে
3 / 16
যত instance-hour-এর টাকা
0
যে চাহিদা মেটেনি
0
পুরনো data centre-এর উত্তর: বছরের সবচেয়ে ব্যস্ত ঘণ্টা ধরে কেনো, আর সারাদিন চালাও। সবসময় ১৬টা instance।
#AWS-এ কোনটা কোথায় দেখা যায়
| লক্ষ্য | AWS-এর উপাদান | কোথায় শেখানো হয় |
|---|---|---|
| একটা EC2 instance scale up/down | instance type বদলানো (stop, বদল, start) | এই লেসন; instance type ৪.১-এ |
| scale out/in আর নষ্ট instance বদলানো | EC2 Auto Scaling group, কয়েকটা AZ জুড়ে | লেসন ৬.৫ |
| একটা প্রবেশপথ, traffic ভাগ, health check, মরা AZ এড়িয়ে চলা | Elastic Load Balancing: Application, Network, Gateway Load Balancer | লেসন ৬.২ থেকে ৬.৪ |
| Database-এর HA | RDS Multi-AZ (standby), Multi-AZ DB cluster, Aurora (৩টা AZ জুড়ে storage, replica) | database chapter |
| Database-এর read scaling | Read replica, Aurora replica | database chapter |
| Database-এর vertical scaling | DB instance class বদলানো; Aurora Serverless v2 | database chapter |
| AZ নিয়ে কোনো পরিকল্পনা ছাড়াই HA | Regional managed service: S3, DynamoDB, EFS Regional, Lambda নিজেরাই data বা compute AZ জুড়ে ছড়িয়ে রাখে | যার যার chapter |
#কোথায় গোলমাল হয়
| লক্ষণ | কারণ | সমাধান |
|---|---|---|
| “শুধু server upgrade করছি” আর site বন্ধ | vertical resize-এ stop/start লাগে | নির্দিষ্ট maintenance সময়ে resize করো, নয়তো scale out করো; RDS-এ Multi-AZ এটা ছোট করে |
| instance যোগ করার পর user হঠাৎ হঠাৎ logout | session রাখা server-এর memory-তে | session বাইরে রাখো (ElastiCache, DynamoDB), নয়তো আপাতত sticky session |
| “অনেকগুলো server” থাকার পরও AZ outage-এ পুরো app বন্ধ | সব instance, বা database, একটা AZ-এ | অন্তত দুটো AZ জুড়ে ASG, RDS Multi-AZ |
| AZ a গেলে AZ b-এর সুস্থ instance internet পায় না | AZ a-তে একটাই NAT gateway | প্রতি AZ-এ একটা NAT gateway, প্রতি AZ-এর আলাদা route table |
| AZ outage-এ site টিকে আছে কিন্তু ভীষণ ধীর | বাড়তি capacity নেই: টিকে থাকারা 100%-এর ওপরে | প্রতিটা AZ-এর মাপ N − 1 ধরে ঠিক করো, নয়তো জেনেশুনে degradation মেনে নাও |
| resize করতে যে instance stop করেছিলে সেটা terminate হয়ে গেছে | সেটা একটা ASG-এর, যে stopped instance-কে unhealthy ধরে | launch template বদলে instance বদলাও (instance refresh, লেসন ৬.৫) |
| রাতেও বিল বেশি | capacity peak ধরে রাখা, কখনো কমে না | scaling policy-সহ Auto Scaling; জানা ছন্দের জন্য scheduled scaling |
#System design-এ কীভাবে কাজে লাগে
- AWS-এ একটা web application-এর default চেহারা: অন্তত দুটো (প্রায়ই তিনটা) AZ জুড়ে একটা load balancer, সেই AZ-গুলোতে stateless instance-এর একটা Auto Scaling group, session ElastiCache বা DynamoDB-তে, ফাইল S3-তে, আর একটা Multi-AZ database। প্রতিটা tier একটা AZ হারিয়েও টিকে থাকে; web tier scale-ও করে।
- stateless tier-গুলো scale out করো, stateful কেন্দ্রটা scale up করো (আর তার সামনে read replica বা caching বসাও), যতদিন না data layer নতুন করে ভাবার সময় আসে।
- কয়টা AZ, ভেবেচিন্তে ঠিক করো। HA-র জন্য দুটো সর্বনিম্ন; তিনটা হলে AZ হারিয়ে টিকে থাকা সস্তা হয়, production-এ এটাই বেশি দেখা যায়।
- availability-কে একটা সংখ্যায় লেখো। ব্যবসা যদি 99.99% চায় (বছরে প্রায় ৫২ মিনিট), কয়েক মিনিটের resize-ওয়ালা একটা instance দিয়ে সেটা হবে না; multi-AZ active-active দিয়ে হবে।
#নিজে করে দেখো
এই command-গুলো AWS CLI-র, ID-গুলো বানানো। এগুলো টাকা লাগে এমন resource বানায়: শেষে মুছে ফেলো।
একটা Region-এ তোমার account কোন কোন AZ ব্যবহার করতে পারে দেখো (AZ-এর নাম একেক account-এ একেক physical zone-এ map হয়; zone ID সবার জন্য একই):
aws ec2 describe-availability-zones --region us-east-1 \
--query "AvailabilityZones[].[ZoneName,ZoneId,State]" --output table
একটা instance scale up করো: stop, type বদল, start, আর downtime নিজের চোখে দেখো।
aws ec2 stop-instances --instance-ids i-0abc1234def567890
aws ec2 wait instance-stopped --instance-ids i-0abc1234def567890
aws ec2 modify-instance-attribute --instance-id i-0abc1234def567890 --instance-type Value=t3.large
aws ec2 start-instances --instance-ids i-0abc1234def567890
aws ec2 describe-instances --instance-ids i-0abc1234def567890 \
--query "Reservations[].Instances[].[InstanceType,PublicIpAddress]"
খেয়াল করো, public IP বদলে গেছে (Elastic IP না হলে)।
দুটো AZ জুড়ে scale out করো (লেসন ৬.৫-এর একটু আগাম স্বাদ): আগে থেকে থাকা একটা launch template থেকে একটা Auto Scaling group, প্রতি AZ-এ একটা subnet দিয়ে।
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name web-asg \
--launch-template LaunchTemplateName=web-lt,Version='$Latest' \
--min-size 2 --max-size 6 --desired-capacity 2 \
--vpc-zone-identifier "subnet-0aaa1111bbbb2222c,subnet-0ddd3333eeee4444f"
# দেখো দুটো instance দুই AZ-এ ভাগ হয়েছে
aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names web-asg \
--query "AutoScalingGroups[].Instances[].[InstanceId,AvailabilityZone,HealthStatus]"
# হাতে scale out, তারপর আবার scale in
aws autoscaling set-desired-capacity --auto-scaling-group-name web-asg --desired-capacity 4
aws autoscaling set-desired-capacity --auto-scaling-group-name web-asg --desired-capacity 2
মুছে ফেলো: aws autoscaling delete-auto-scaling-group --auto-scaling-group-name web-asg --force-delete।
একটা single-AZ RDS instance-কে highly available বানাও (passive standby):
aws rds modify-db-instance --db-instance-identifier shop-db --multi-az --apply-immediately
#সারসংক্ষেপ
মূল কথাগুলো
- Scalability বেশি চাপ সামলায়; elasticity চাহিদা দেখে নিজে থেকে capacity যোগ-বিয়োগ করে; agility মিনিটে resource এনে দেয়; high availability ব্যর্থতার পরও টিকে থাকে; fault tolerance টিকে থাকে কারও চোখে না পড়েই।
- Vertical scaling (up/down) = বড় instance। EC2-তে stop/start লাগে (downtime), একটা ছাদে ঠেকে (আজ 32 TiB, 1,920 vCPU), আর থাকে একটা AZ-এ একটা machine হয়েই। database, cache আর legacy app-এর জন্য ঠিক।
- Horizontal scaling (out/in) = load balancer-এর পেছনে বেশি instance, যোগ-বিয়োগ করে Auto Scaling group। server stateless হতে হবে; session রাখো ElastiCache বা DynamoDB-তে।
- High availability = অন্তত দুটো AZ। Active-active (ASG + ELB) failover করে কয়েক সেকেন্ডে; passive standby (RDS Multi-AZ) প্রায় ১–২ মিনিটে।
- প্রতিটা single point of failure খুঁজে বের করো: একটা AZ, single-AZ database, একটাই NAT gateway, একটা বিশেষ server।
- কোনো degradation ছাড়া একটা AZ হারিয়ে টিকতে চাইলে প্রতি AZ-এ রাখো P ÷ (N − 1): ২টা AZ = 100% বাড়তি, ৩টা AZ = 50% বাড়তি।
- পরীক্ষা: stateless / web tier / spike → ASG; data centre হারিয়েও টেকো / fault tolerant → Multi-AZ; database-এর আরও memory লাগবে → scale up।
আগে নিজে উত্তর দাও, তারপর ব্যাখ্যাটা পড়ো। ঠিক হলেও পড়ো, কারণ ভুল Option-গুলো কেন ভুল, সেটাও ওখানে আছে।
নিজেকে যাচাই করোপ্রশ্ন
EC2-তে vertical scaling মানে কী?
নিজেকে যাচাই করোপ্রশ্ন
একজন architect বললেন আজ রাতে web tier scale out করবে। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
একজন engineer একটা EBS-backed EC2 instance-কে t3.large থেকে m7i.xlarge-এ বদলাতে চান। আগে কী করতে হবে?
নিজেকে যাচাই করোপ্রশ্ন
AWS-এ সাধারণত সবচেয়ে কম কতটুকু ছড়িয়ে থাকলে তাকে highly available বলা হয়?
নিজেকে যাচাই করোপ্রশ্ন
horizontal scaling নিয়ে কোন দুটো কথা সত্যি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
elasticity-র সবচেয়ে ভালো বর্ণনা কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
একটা company EC2-তে একটা stateless web application চালায়। দিনের মধ্যে traffic অনেক ওঠানামা করে। web tier কীভাবে scale করা উচিত?
নিজেকে যাচাই করোপ্রশ্ন
একটা requirement বলছে পুরো একটা data centre নষ্ট হলেও application টিকে থাকতে হবে। কোন design এটা পূরণ করে?
নিজেকে যাচাই করোপ্রশ্ন
জনপ্রিয় কোনো event-এর টিকিট ছাড়লেই একটা online ticket shop-এ হঠাৎ traffic spike আসে। কম খরচে spike সামলানোর মূল উত্তর AWS-এর কোন feature?
নিজেকে যাচাই করোপ্রশ্ন
একটা EC2 instance-এ নিজে চালানো একটা PostgreSQL database-এর memory ফুরিয়ে যাচ্ছে। application একটার বেশি database server ব্যবহার করতে পারে না। সবচেয়ে সরাসরি সমাধান কী?
নিজেকে যাচাই করোপ্রশ্ন
একটা trading platform-কে একটা Availability Zone নষ্ট হলেও পুরো performance রাখতে হবে, একটুও ধীর হওয়া চলবে না। এটা চলে দুটো AZ-এ। architect-কে কী নিশ্চিত করতে হবে?
নিজেকে যাচাই করোপ্রশ্ন
একটা application-এর peak-এ ১২টা instance লাগে। এটা দুটো Availability Zone-এ চলে, আর যেকোনো একটা AZ হারালেও কোনো degradation ছাড়া চলতে হবে। সবচেয়ে কম মোট কয়টা instance লাগবে?
নিজেকে যাচাই করোপ্রশ্ন
একই application (peak-এ ১২টা instance, একটা AZ গেলেও degradation ছাড়া চলবে) এবার তিনটা Availability Zone-এ সরানো হলো। এখন সবচেয়ে কম মোট কয়টা?
নিজেকে যাচাই করোপ্রশ্ন
একটা web tier দুটো AZ-এর প্রতিটায় ৪টা করে instance চালায়, আর peak-এ প্রতিটা instance 60% CPU-তে থাকে। ঠিক peak-এর সময় AZ a নষ্ট হলো। কী হবে?
নিজেকে যাচাই করোপ্রশ্ন
RDS Multi-AZ DB instance deployment (একটা standby) নিয়ে কোন দুটো কথা সত্যি?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
AZ a আর AZ b-এর private subnet-এ web server চলে। AZ a নষ্ট হলে AZ b-এর server সুস্থ থাকল, কিন্তু বাইরের একটা payment API call করতে পারল না। সবচেয়ে সম্ভাব্য design-এর ভুল কোনটা?
নিজেকে যাচাই করোপ্রশ্ন
একটা web application-কে চারটা instance নিয়ে load balancer-এর পেছনে নেওয়ার পর user অভিযোগ করছে, হঠাৎ হঠাৎ logout হয়ে যায় আর cart খালি হয়ে যায়। কী করা উচিত?
নিজেকে যাচাই করোপ্রশ্ন
শুধু vertical scaling দিয়ে কেন সীমাহীন বৃদ্ধি সামলানো যায় না?
নিজেকে যাচাই করোপ্রশ্ন
একজন engineer instance type বদলানোর জন্য একটা Auto Scaling group-এর instance stop করলেন। ফিরে এসে দেখলেন instance-টা terminate হয়ে গেছে আর নতুন একটা চলছে। কেন?
নিজেকে যাচাই করোপ্রশ্ন
একটা design-এ দুটো AZ-এ একটা Application Load Balancer, চারটা EC2 instance সবই AZ a-তে, আর AZ a-তে একটা Single-AZ RDS database। কোন দুটো বদল single point of failure দূর করে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
এগুলোর মধ্যে কোনটা passive (active-standby) high availability-র উদাহরণ?
নিজেকে যাচাই করোপ্রশ্ন
একটা টিম বলছে: আমাদের app এখন highly available, কারণ দুটোর বদলে দশটা instance চালাচ্ছি। দশটাই us-east-1a-তে। কোন কথাটা ঠিক?
নিজেকে যাচাই করোপ্রশ্ন
course-এর notes বলছে t2.micro-তে 4 GB RAM। আসলে t2.micro-র memory কত?
নিজেকে যাচাই করোপ্রশ্ন
একটা company তাদের একমাত্র application server দিনে scale up আর রাতে scale down করে। এটাকে কেন elastic বলা হয় না?
নিজেকে যাচাই করোপ্রশ্ন
কোন দুটো পরিস্থিতিতে প্রথম পছন্দ হিসেবে vertical scaling যুক্তিসঙ্গত?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা application-এর peak-এ ৬টা instance লাগে, আর এটা চলে তিনটা Availability Zone-এ। একটা AZ হারালেও কোনো degradation ছাড়া চলতে হবে। প্রতিটা AZ-এ কয়টা instance চালানো উচিত?
নিজেকে যাচাই করোপ্রশ্ন
একটা slide বলছে horizontal scalability মানেই elasticity। কোন কথাটা সবচেয়ে সঠিক?
নিজেকে যাচাই করোপ্রশ্ন
এগুলোর মধ্যে কোনটা তোমার কোনো AZ configuration ছাড়াই default-এ কয়েকটা Availability Zone জুড়ে ছড়ানো থাকে?
নিজেকে যাচাই করোপ্রশ্ন
কোন দুটো requirement Auto Scaling group দিয়ে horizontal scaling-এর দিকে ইঙ্গিত করে?
বেছে নাও ২
নিজেকে যাচাই করোপ্রশ্ন
একটা company এমন একটা highly available relational database চায়, যার failover সাধারণত এক মিনিটের অনেক কম সময়ে শেষ হয়, আর যার standby read-ও সার্ভ করতে পারে। কোনটা সবচেয়ে মানানসই?