Availability

Availability কী?

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

সূত্র:

Availability = Uptime / (Uptime + Downtime)

  • Uptime: সিস্টেম যতক্ষণ চালু ছিল

  • Downtime: সিস্টেম যতক্ষণ বন্ধ ছিল

High Availability (HA)

সিস্টেম খুব কম সময় বন্ধ থাকলে এবং প্রায় সবসময় চালু থাকলে তাকে Highly Available বলা হয়। সাধারণত ৯৯.৯৯% বা তার বেশি হলে এই নামে ডাকা হয়।

Availability

নামকরণ

বছরে সর্বোচ্চ Downtime

৯০%

এক নাইন

৩৬.৫ দিন

৯৯%

দুই নাইন

৩.৬৫ দিন

৯৯.৯%

তিন নাইন

৮.৭৬ ঘণ্টা

৯৯.৯৯%

চার নাইন

৫২.৫৬ মিনিট

৯৯.৯৯৯%

পাঁচ নাইন

৫.২৬ মিনিট

বড় প্রতিষ্ঠান (Google, Amazon, Meta) সাধারণত ৯৯.৯৯% বা তার বেশি লক্ষ্য রাখে। প্রতিটি অতিরিক্ত "নাইন" অর্জনের খরচ ও জটিলতা বহুগুণ বাড়ে, তাই ব্যবসার প্রয়োজন বুঝে লক্ষ্য ঠিক করতে হয়।

সহজ উদাহরণ

একটি ই-কমার্স সাইটের Availability ৯৯% হলে বছরে প্রায় ৩.৬৫ দিন সেটি বন্ধ থাকতে পারে। ঈদের সেলের সময় এক ঘণ্টা বন্ধ থাকলেও বিশাল ক্ষতি হয়। এমন ক্ষেত্রে High Availability ডিজাইন করা জরুরি।

Availability বাড়ানোর কৌশল

১. Replication

ডাটা ও সার্ভারের একাধিক কপি রাখা, যাতে একটি নষ্ট হলে অন্যটি কাজ চালায়।
উদাহরণ: Primary-Replica Database Replication (আগে যাকে Master-Slave বলা হতো)।

২. Load Balancing

ট্রাফিক একাধিক সার্ভারে ভাগ করা এবং অসুস্থ সার্ভার বাদ দিয়ে শুধু সুস্থ সার্ভারে রিকোয়েস্ট পাঠানো।
উদাহরণ: Nginx, HAProxy।

৩. Failover Mechanism

কোনো সার্ভার বিকল হলে অন্যটি স্বয়ংক্রিয়ভাবে দায়িত্ব নেয়। Health Check দিয়ে ব্যর্থতা শনাক্ত করা হয়।
উদাহরণ: Standby Database, Kubernetes-এর স্বয়ংক্রিয় Restart।

সংশোধনী: মূল লেখায় Failover-এর উদাহরণ হিসেবে "AWS Auto Scaling" দেওয়া ছিল। Auto Scaling মূলত Load অনুযায়ী সার্ভার বাড়ানো-কমানোর জন্য, তবে বিকল সার্ভার প্রতিস্থাপনেও সাহায্য করে। তাই সঠিক Failover-এর উদাহরণ হিসেবে Standby ও Health Check-ভিত্তিক ব্যবস্থা দিয়েছি।

৪. Distributed System ও Redundancy

একাধিক সার্ভার, এমনকি একাধিক Data Center বা Availability Zone-এ সিস্টেম ছড়িয়ে রাখা, যাতে একটি জায়গা বিকল হলেও সার্ভিস চলে।
উদাহরণ: Multi-AZ Deployment, Kubernetes Cluster।

৫. Caching

বারবার ব্যবহৃত ডাটা ক্যাশে রাখলে Database-এর চাপ কমে এবং সিস্টেম দ্রুত ও স্থিতিশীল থাকে।
উদাহরণ: Redis, Memcached, CDN।

৬. অন্যান্য কৌশল

  • Health Check ও Monitoring: সমস্যা ঘটার আগেই বা সাথে সাথে শনাক্ত করা

  • Graceful Degradation: কোনো ফিচার বিকল হলে পুরো সিস্টেম বন্ধ না করে শুধু সেই অংশ সীমিত করা

  • Rolling Deployment: আপডেটের সময় একে একে সার্ভার বদলানো, যাতে Downtime না হয়

  • নিয়মিত Backup ও Disaster Recovery Plan

Availability বনাম Reliability

বিষয়

Availability

Reliability

সংজ্ঞা

সিস্টেম প্রয়োজনের সময় কতটা চালু থাকে

সিস্টেম Failure ছাড়া কতটা ভুলহীনভাবে চলে

লক্ষ্য

Downtime কমানো

Failure-এর হার কমানো

উদাহরণ

সার্ভার ৯৯.৯৯% সময় অনলাইনে থাকে

সার্ভার এক বছর কোনো ক্র্যাশ ছাড়া চলেছে

দুটি ধারণা সম্পর্কিত হলেও আলাদা। একটি সিস্টেম বারবার ক্র্যাশ করলেও যদি প্রতিবার কয়েক সেকেন্ডে আবার চালু হয়ে যায়, তার Availability উচ্চ হতে পারে কিন্তু Reliability কম।

Availability বনাম Scalability

  • Scalability: বাড়তি Load সামলানোর ক্ষমতা

  • Availability: বিকল হলেও চালু থাকার ক্ষমতা

Horizontal Scaling-এ একাধিক সার্ভার থাকায় দুটিই একসাথে উন্নত হয়।

ডিজাইনে মনে রাখবেন

  • Single Point of Failure (SPOF) খুঁজে বের করে দূর করুন। Load Balancer, Database, এমনকি DNS-ও SPOF হতে পারে।

  • CAP Theorem: Network Partition-এ Consistency ও Availability-এর মধ্যে একটি বেছে নিতে হয়।

  • Failover নিয়মিত পরীক্ষা করুন, নইলে প্রয়োজনের সময় কাজ নাও করতে পারে।

Availability হলো সিস্টেম কতটা সময় চালু থাকে তার পরিমাপ। Replication, Load Balancing, Failover, Redundancy ও Caching-এর মতো কৌশল মিলিয়ে High Availability অর্জন করা যায়। সঠিক লক্ষ্য ঠিক করা এবং SPOF দূর করাই একজন সিস্টেম ডিজাইনারের মূল কাজ।