Skip to content
← ক্যাপাসিটি ও খরচ · মধ্যবর্তী · 9 মিনিট · 04 / 06 EN

The Cost of Redundancy

Multi-AZ, N+1, active-active — প্রতিটা availability pattern আসলে কত খরচ করে আর একটা বেছে নেওয়ার পেছনের হিসাব।

redundancyhigh availabilitymulti-AZN+1active-activeSLA

বাস্তব জীবনের উপমা

আপনার গাড়ির spare tire: একটা spare টায়ারের খরচ দ্বিগুণ করে কিন্তু আপনাকে রাস্তায় আটকে যাওয়া থেকে বাঁচায়। দুটো spare আর একটা tow-truck subscription মানে আপনি কখনো meeting মিস করবেন না — কিন্তু এখন আপনি trip-এর চেয়ে contingency-তে বেশি খরচ করে ফেলেছেন। প্রতিটা availability tier-এর একটা দাম আছে, আর সঠিকটা নির্ভর করে আটকে যাওয়া আসলে আপনার কত খরচ করায় তার উপর।

গল্পে বুঝি

শহরের বড় হাসপাতালটা চালান ফাতিমা আল-ফিহরি। তাঁর ICU-তে ভেন্টিলেটর, অপারেশন থিয়েটারে লাইট — সবকিছু বিদ্যুতে চলে। মেইন লাইন এক সেকেন্ডের জন্য গেলেও কারো জীবন চলে যেতে পারে। তাই বেসমেন্টে একটা বিশাল ব্যাকআপ জেনারেটর সবসময় ফুল-ট্যাংক ভরা, টেস্ট করা, রেডি অবস্থায় বসে থাকে। এমনকি ফাতিমা আরেকটা জেনারেটর রেখেছেন পাশের আলাদা বিল্ডিংয়ে — কারণ কোনো এক আগুন বা বন্যায় যদি পুরো বেসমেন্টটাই ডুবে যায়, তবু হাসপাতাল যেন থামে না। বছরের ৯৯% সময় এই দুটো জেনারেটর কিছুই করে না, শুধু বসে থাকে। কিন্তু ফাতিমা প্রতি মাসে ডিজেল কেনেন, মেকানিক ডেকে সার্ভিস করান, ভাড়া গোনেন — শুধু ওই একটা দিনের জন্য যেদিন মেইন পাওয়ার চলে যাবে।

ঠিক একই মোড়ে ইবনে সিনার ছোট্ট চায়ের দোকান। কারেন্ট গেলে তাঁর ফ্রিজের দুধ একটু গরম হয়, দুই-চারজন কাস্টমার হয়তো ফিরে যায় — ব্যস। এখন ইবনে সিনা যদি ফাতিমার মতো দুটো দামি জেনারেটর কিনে প্রতি মাসে ডিজেল আর সার্ভিসের পেছনে টাকা ঢালতেন, সেটা হতো নিছক বোকামি — যা রক্ষা করছেন তার চেয়ে ইনস্যুরেন্সেই বেশি খরচ। তাঁর জন্য একটা মোমবাতি বা ছোট একটা inverter-ই যথেষ্ট।

এই দুই দৃশ্যই আসলে redundancy আর high availability-র হিসাব। বসে থাকা ব্যাকআপ জেনারেটর হলো আপনার standby replica বা spare capacity, আর পাশের বিল্ডিংয়ের দ্বিতীয় জেনারেটর হলো multi-region / availability zone redundancy — একটা AZ বা region পুরো গেলেও যেন সেবা না থামে। জেনারেটর মূলত অলস বসে থাকলেও তেল-সার্ভিসের বিল গোনাটাই হলো reliability-র চলমান খরচ: বেশিরভাগ সময় idle থাকা resource-এর জন্য আপনাকে ঠিকই টাকা দিতে হয়। আর হাসপাতাল-বনাম-চায়ের-দোকানের বিচারটাই মূল শিল্প — reliability কতটা মূল্যবান সেটা তার খরচের বিপরীতে মেপে নেওয়া। বাস্তবে এই জন্যই একটা life-critical B2B SaaS হয়তো Multi-AZ database আর multi-region failover-এ মাসে হাজার ডলার ঢালে, অথচ একটা ছোট hobby প্রোজেক্ট একটা মাত্র সার্ভারেই দিব্যি চলে — কারণ তাদের downtime-এর দাম এক নয়।

Availability Target আর সেগুলোর মানে

99%    uptime = 87.6 hours/year downtime
99.9%  uptime = 8.76 hours/year downtime
99.99% uptime = 52.6 minutes/year downtime
99.999%uptime = 5.26 minutes/year downtime

Each additional "9" roughly costs 10x more in infrastructure and ops complexity.

একটা target বেছে নেওয়ার আগে হিসাব করুন downtime আসলে আপনার business-এর কত খরচ করায়:

Revenue impact:
  Monthly revenue: $500,000
  Hourly revenue: ~$700
  Cost of 8.76 hours downtime (99.9%): $6,100/year

Infrastructure cost to go 99.9% → 99.99%:
  Roughly 3x infrastructure spend = +$2,000/month = $24,000/year

99.99% costs $24,000 more per year to save $6,100 in downtime risk.
99.9% is the economically rational choice.

Five nines-এ commit করার আগে এই হিসাবটা করুন।

N+1 Redundancy

Baseline: N+1 instance চালান যেখানে N হলো load serve করতে যা লাগে। একটা fail করলে বাকি N পুরো traffic সামলায়।

At peak: 100 RPS → need 2 app servers at 50% utilization each
N+1:     3 app servers → if 1 fails, 2 remain at 50% utilization
         Can absorb a failure without degradation

Cost: 3/2 = 1.5x the cost of a non-redundant setup

Availability gain:
  Probability both remaining fail simultaneously (MTTF = 30 days/server):
  P = (1/720)² = 0.000002 ≈ 99.9998% availability

Stateless application server-এর জন্য N+1 হলো default। এটা সস্তা (50% premium) আর সবচেয়ে সাধারণ failure mode (single server crash বা restart) সামলায়।

Multi-AZ (Active-Standby)

Primary একটা availability zone-এ চালান, standby আরেকটায়। Primary fail করলে standby-তে failover — সাধারণত 30-60 সেকেন্ডের downtime।

AWS RDS Multi-AZ:
  Primary + synchronous standby
  Automatic failover: ~60s
  Cost: 2x single-AZ instance

Example:
  Single-AZ db.m5.large: $140/month
  Multi-AZ db.m5.large:  $280/month

What you get:
  AZ failure protection (rare but catastrophic without it)
  Storage failure protection
  OS/maintenance failover (zero-downtime patching)

আপনার database-এর জন্য Multi-AZ সাধারণত production-এ সঠিক সিদ্ধান্ত। 2x খরচটা AZ-level failure আর maintenance window-এর বিরুদ্ধে protection দিয়ে justify হয়।

Active-Active vs Active-Standby

Active-Standby: একটা node traffic সামলায়, standby দরকার না হওয়া পর্যন্ত idle থাকে। সরল কিন্তু standby-র capacity নষ্ট করে।

Active-Active: দুটো node একসাথে traffic সামলায়। Failover seamless (কোনো switchover delay নেই) আর standby-র capacity আসলে ব্যবহার হয়।

Active-Standby (Multi-AZ):
  Cost: 2x (pay for standby that does no work)
  Failover: 30-60s automatic
  Complexity: low

Active-Active (two regions):
  Cost: 2x (same) but standby serves real traffic
  Failover: seconds (DNS switchover)
  Complexity: high — need conflict resolution for writes

Stateless service-এর জন্য active-active অর্থবহ (দুটো node-ই traffic serve করে = active-standby-র সমান দামে 2x capacity)। Stateful service-এর (database) জন্য এটাতে write conflict সামলাতে হয়, যা উল্লেখযোগ্য জটিলতা যোগ করে।

Regional Redundancy (Multi-Region)

পুরো region failure-এর বিরুদ্ধে protect করে (বিরল কিন্তু বাস্তব — AWS us-east-1-এ multi-hour outage হয়েছে)।

Architecture: Primary region (us-east-1) + DR region (us-west-2)
  - App servers: active-active, DNS-based routing
  - Database: async replication to DR region

Cost:
  DR region: full replica of production infrastructure
  Roughly 2x total infrastructure cost
  Plus: data transfer costs for replication (~$0.09/GB)

RTO (Recovery Time Objective): hours (multi-region setup, manual failover)
              or minutes (automated failover with Route53 health checks)
RPO (Recovery Point Objective): seconds-to-minutes (async replication lag)

বেশিরভাগ কোম্পানির active-active multi-region দরকার নেই। একটা সহজ approach: দ্বিতীয় region-এ আপনার stack deploy করুন কিন্তু scaled down রাখুন। Disaster হলে scale up করুন আর DNS আপডেট করুন। Cold standby একটা full replica-র 20-30% খরচ করে।

Cross-Region Replication-এর খরচ

Region-এর মধ্যে data replicate করা AWS-এ ব্যয়বহুল:

Data transfer between AWS regions: $0.02/GB (inter-region)
PostgreSQL WAL replication: proportional to write volume

At 100GB/day write volume:
  Monthly replication cost: 100 × 30 × $0.02 = $60/month

Object storage (S3) cross-region replication:
  Per-object replication fee: $0.015 per 1,000 objects
  Plus: storage in both regions
  Plus: data transfer fees

For read-only replicas in other regions (analytics workloads):
  DMS or pglogical replication: simpler and cheaper than full multi-region

Chaos Budget: Confidence-এর জন্য টাকা দেওয়া

Redundancy একটা insurance policy। Premium হলো চলমান infrastructure cost; payout হলো downtime ছাড়া failure থেকে বেঁচে যাওয়া। আপনার আসল risk অনুযায়ী insurance-এর সাইজ ঠিক করুন:

Risk matrix for a B2B SaaS:
  Application server failure (weekly): N+1 handles → no downtime
  Database failure (monthly): Multi-AZ → 60s downtime
  AZ failure (yearly): Multi-AZ → handled
  Region failure (multi-year): accept the risk OR pay for multi-region

Cost to handle each:
  N+1 app servers: +50% app server cost
  Multi-AZ DB: +$140/month (2x RDS)
  Multi-region: +$2,000/month (full replica)

Acceptable risk decision: cover everything up to AZ failure, accept region failure.
Total redundancy cost: ~$350/month

Redundancy-র Operational খরচ

Hardware cost দৃশ্যমান। Operational cost নয়:

Complexity tax:

  • monitor করার জন্য বেশি component
  • test করার জন্য বেশি failure mode
  • লেখা আর maintain করার জন্য বেশি runbook
  • প্রতি quarter-এ practice করার জন্য failover procedure

Testing debt: Untested failover সবচেয়ে খারাপ মুহূর্তে fail করে। Chaos testing (chaos-resilience-এর chapter) আর game day যোগ করুন। HA testing-এর জন্য প্রতি quarter-এ 1-2 engineer-day budget রাখুন।

Simplicity premium: অনেক team তাদের production 2 app server + managed DB + managed Redis-এ চালায়। বোঝা সহজ, কিছু ভাঙলে দ্রুত ঠিক করা যায়, operate করা সস্তা। শুধু তখনই জটিলতা যোগ করুন যখন উপরের হিসাব দেখায় সেটা পোষায়।