> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/availability.md).

# Availability

সিস্টেম ডিজাইনে Availability বলতে বোঝানো হয় যে একটি সিস্টেম বা সার্ভিস কতটা নির্ভরযোগ্যভাবে তার ব্যবহারকারীদের জন্য Available থাকে। সহজ ভাষায়, এটি পরিমাপ করে যে একটি সিস্টেম নিরবিচ্ছিন্নভাবে কাজ করে, নাকি মাঝে মাঝে অকারণে বন্ধ হয়ে যায়।

***

### Availability-এর সূত্র:

Availability সাধারণত নিম্নলিখিত সূত্র দ্বারা প্রকাশ করা হয়:

Availability = Uptime / (Uptime + Downtime)

যেখানে:

* Uptime = সিস্টেম কতক্ষণ কাজ করছে
* Downtime = সিস্টেম কতক্ষণ বন্ধ ছিল

উচ্চ Availability মানে হলো সিস্টেম খুব কম সময়ের জন্য ডাউন হয় এবং বেশিরভাগ সময় কাজ করে।

***

### High Availability (HA) কী?

যদি একটি সিস্টেম সর্বদা 99.99% বা তার বেশি সময় ধরে অ্যাক্সেসযোগ্য থাকে, তখন তাকে Highly Available System বলা হয়। উদাহরণস্বরূপ:

| Availability (%)     | Downtime (প্রতি বছর) |
| -------------------- | -------------------- |
| 90% (one nine)       | 36.5 দিন             |
| 99% (two nines)      | 3.65 দিন             |
| 99.9% (three nines)  | 8.76 ঘণ্টা           |
| 99.99% (four nines)  | 52.56 মিনিট          |
| 99.999% (five nines) | 5.26 মিনিট           |

Google, Amazon, এবং Facebook-এর মতো প্রতিষ্ঠান 99.99% বা তার বেশি Availability নিশ্চিত করার চেষ্টা করে।

***

### Availability বাড়ানোর কৌশল:

সিস্টেম ডিজাইনে High Availability নিশ্চিত করতে কিছু গুরুত্বপূর্ণ উপায় রয়েছে:

1. [**Replication**](/mominur-notes/system-design/availability/replication.md)
   * ডাটা ও সার্ভারগুলোর Backup রাখার মাধ্যমে Failure কমানো যায়।
   * উদাহরণ: Master-Slave Database Replication।
2. [**Load Balancing**](/mominur-notes/system-design/availability/load-balancing.md)
   * ট্র্যাফিক একাধিক সার্ভারের মধ্যে ভাগ করে ব্যাকআপ সার্ভার দিয়ে ডাউনটাইম কমানো।
   * উদাহরণ: Nginx, HAProxy।
3. [**Failover Mechanism**](/mominur-notes/system-design/availability/failover-mechanism.md)
   * কোনো সার্ভার Fail হলে অন্য সার্ভার স্বয়ংক্রিয়ভাবে Responsibility গ্রহণ করে।
   * উদাহরণ: Auto Scaling in AWS।
4. **Distributed Systems**
   * একাধিক সার্ভারে ডাটা ও কম্পিউটেশন ভাগ করে দিলে একটি সার্ভার ডাউন হলেও সার্ভিস চালু থাকে।
   * উদাহরণ: Google Cloud, Kubernetes।
5. **Caching**&#x20;
   * Static data ক্যাশিং করে দিলে সার্ভার কম লোড হয়ে থাকে, ফলে পারফরম্যান্স উন্নত হয়।
   * উদাহরণ: Redis, Memcached।

***

### Availability vs Reliability

অনেকেই Availability ও Reliability গুলিয়ে ফেলেন, তবে এদের মধ্যে পার্থক্য আছে:

| বিষয়   | Availability                               | Reliability                                                       |
| ------ | ------------------------------------------ | ----------------------------------------------------------------- |
| সংজ্ঞা | সিস্টেম কতক্ষণ কাজ করছে তা পরিমাপ করা হয়। | সিস্টেম কত দিন পর্যন্ত Failure ছাড়া চলতে পারে তা পরিমাপ করা হয়। |
| লক্ষ্য | Downtime কমানো                             | Failure rate কমানো                                                |
| উদাহরণ | সার্ভার 99.99% সময় অনলাইনে থাকে।          | সার্ভার ১ বছর ধরে কোনো ক্র্যাশ ছাড়া চলছে।                        |

***

### উদাহরণ:

ধরুন, আপনি একটি ই-কমার্স ওয়েবসাইট তৈরি করেছেন যেখানে 99% Availability আছে। এর মানে হলো, প্রতি বছর প্রায় ৩.৬৫ দিন ওয়েবসাইটটি বন্ধ থাকতে পারে! যদি আপনার ব্যবসার জন্য এটি খুব বেশি হয়, তাহলে আপনাকে High Availability ডিজাইন করতে হবে।
