ব্যাকআপ, স্ন্যাপশট ও ডিজাস্টার রিকভারি
এই পাঠে যা শিখবেন
- স্ন্যাপশট কী এবং ইনক্রিমেন্টাল স্ন্যাপশট কেন সাশ্রয়ী
- ব্যাকআপ রিটেনশন পলিসি কীভাবে ডিজাইন করা হয়
- RTO ও RPO-এর পার্থক্য এবং এগুলো কীভাবে ব্যাকআপ স্ট্র্যাটেজি নির্ধারণ করে
- Python দিয়ে RPO থেকে স্ন্যাপশট ফ্রিকোয়েন্সি হিসাব এবং একটি রিটেনশন পলিসি সিমুলেশন
১ · স্ন্যাপশট কী
স্ন্যাপশটSnapshotএকটি স্টোরেজ ভলিউম বা ডেটাবেসের নির্দিষ্ট মুহূর্তের (point-in-time) কপি — ডিজাস্টার রিকভারির মৌলিক হাতিয়ার। হলো ডেটা হারানোর বিরুদ্ধে সবচেয়ে মৌলিক প্রতিরক্ষা — একটি ভলিউম বা ডেটাবেসের ঠিক সেই মুহূর্তের অবস্থার কপি, যেখান থেকে প্রয়োজনে ফিরে যাওয়া যায়। প্রতিবার সম্পূর্ণ একটি নতুন কপি নেওয়া ব্যয়বহুল ও সময়সাপেক্ষ — তাই বেশিরভাগ ক্লাউড প্রোভাইডার ইনক্রিমেন্টাল স্ন্যাপশট ব্যবহার করে: প্রথমটি সম্পূর্ণ, তারপর প্রতিটি নতুন স্ন্যাপশট শুধু আগের স্ন্যাপশটের পর পরিবর্তিত ব্লকগুলো সংরক্ষণ করে।
একটি ১০০ GB ভলিউমের প্রতিদিন মাত্র ১ GB পরিবর্তন হলে, প্রতিদিন সম্পূর্ণ ১০০ GB কপি না নিয়ে শুধু সেই ১ GB পরিবর্তিত অংশ সংরক্ষণ করলেই যথেষ্ট — স্টোরেজ খরচ ও ব্যাকআপ নেওয়ার সময় উভয়ই বিশাল কমে যায়, অথচ রিকভারির সময় সবগুলো ইনক্রিমেন্টাল অংশ জোড়া লাগিয়ে পূর্ণ অবস্থা পুনর্গঠন করা হয়।
২ · ব্যাকআপ রিটেনশন পলিসি
সীমাহীন সময় ধরে প্রতিটি স্ন্যাপশট রাখা অবাস্তব ব্যয়বহুল — তাই একটি রিটেনশন পলিসি ঠিক করে দেয় কোন স্ন্যাপশটগুলো কতদিন রাখা হবে। একটি সাধারণ প্যাটার্ন —
গত ৭ দিনের প্রতিটি দৈনিক স্ন্যাপশট রাখা হয় — সাম্প্রতিক ভুলের জন্য সূক্ষ্ম রিকভারি।
গত ৪ সপ্তাহের প্রতি সপ্তাহে একটি স্ন্যাপশট রাখা হয় — মাঝারি মেয়াদের রিকভারি।
গত ১২ মাসের প্রতি মাসে একটি স্ন্যাপশট রাখা হয় — দীর্ঘমেয়াদি, কমপ্লায়েন্স-চালিত রিকভারি।
এই পলিসি রিকভারির সূক্ষ্মতা (কতটা নির্দিষ্ট মুহূর্তে ফিরে যাওয়া যায়) এবং স্টোরেজ খরচের মধ্যে একটি ভারসাম্য তৈরি করে — সাম্প্রতিক অতীত সূক্ষ্মভাবে কভার করা হয়, দূরবর্তী অতীত মোটা দাগে।
৩ · RTO ও RPO — দুটি ভিন্ন প্রশ্নের উত্তর
ডিজাস্টার রিকভারি পরিকল্পনার মূলে দুটি প্রশ্ন থাকে —
- RPORecovery Point Objectiveএকটি বিপর্যয়ে সর্বোচ্চ কতটুকু ডেটা (সময়ের হিসেবে) হারানো গ্রহণযোগ্য — সরাসরি স্ন্যাপশট নেওয়ার ফ্রিকোয়েন্সি নির্ধারণ করে। (Recovery Point Objective) — "কতটুকু ডেটা হারানো গ্রহণযোগ্য?" RPO ৪ ঘণ্টা মানে সর্বোচ্চ ৪ ঘণ্টার ডেটা হারাতে পারেন, তাই অন্তত প্রতি ৪ ঘণ্টায় একবার স্ন্যাপশট নিতে হবে।
- RTORecovery Time Objectiveএকটি বিপর্যয়ের পর সার্ভিস সম্পূর্ণ পুনরুদ্ধার করতে সর্বোচ্চ কতটুকু সময় নেওয়া যাবে। (Recovery Time Objective) — "কত দ্রুত সার্ভিস আবার চালু করতে হবে?" RTO ১ ঘণ্টা মানে বিপর্যয়ের ১ ঘণ্টার মধ্যেই সার্ভিস পুরোপুরি সচল করতে হবে।
RPO ও RTO যত কঠোর (কম ডেটা লস, দ্রুততর রিকভারি) হয়, বাস্তবায়ন তত ব্যয়বহুল ও জটিল হয় — ঘনঘন স্ন্যাপশট, একাধিক অঞ্চলে (region) রেপ্লিকেশন, এবং স্বয়ংক্রিয় ফেইলওভার সিস্টেম প্রয়োজন হতে পারে। প্রতিটি সিস্টেমের জন্য RTO/RPO তাই ব্যবসায়িক প্রভাব বিবেচনা করে ঠিক করা উচিত, সব সিস্টেমে একই কড়া লক্ষ্য চাপিয়ে দেওয়া অপ্রয়োজনীয় খরচ তৈরি করে।
৪ · সিমুলেশন — RPO থেকে ফ্রিকোয়েন্সি ও রিটেনশন প্রুনিং
নিচে একটি ফিক্সড RPO থেকে প্রয়োজনীয় স্ন্যাপশট ফ্রিকোয়েন্সি হিসাব করা হয়েছে, এবং ৯০ দিনের একটি সিমুলেটেড দৈনিক স্ন্যাপশট তালিকার উপর উপরের রিটেনশন পলিসি প্রয়োগ করে কোনগুলো টিকে থাকবে আর কোনগুলো প্রুন (মুছে ফেলা) হবে তা দেখানো হয়েছে — এটি একটি ইলাস্ট্রেটিভ টয় সিমুলেশন, বাস্তব কোনো ক্লাউড API-এর সাথে সংযুক্ত নয়।
# RPO থেকে প্রয়োজনীয় স্ন্যাপশট ফ্রিকোয়েন্সি (illustrative simulation)
rpo_hours = 4 # সর্বোচ্চ ৪ ঘণ্টার ডেটা লস গ্রহণযোগ্য
snapshots_per_day = 24 / rpo_hours
print(f"RPO = {rpo_hours} ঘণ্টা হলে দিনে অন্তত {snapshots_per_day:.0f}টি স্ন্যাপশট দরকার\n")
# রিটেনশন পলিসি সিমুলেশন — ৯০ দিনের দৈনিক স্ন্যাপশট থেকে কোনগুলো টিকবে
from datetime import date, timedelta
today = date(2026, 1, 1) # ফিক্সড রেফারেন্স তারিখ, শুধু উদাহরণের জন্য
snapshot_dates = [today - timedelta(days=i) for i in range(90)]
def keep_snapshot(snap_date, today):
age_days = (today - snap_date).days
if age_days <= 7:
return True # গত ৭ দিনের সবগুলো দৈনিক স্ন্যাপশট
elif age_days <= 28:
return snap_date.weekday() == today.weekday() # ৮-২৮ দিন: সপ্তাহে একটি
else:
return snap_date.day == 1 # ২৮ দিনের বেশি পুরনো: মাসে একটি
kept = [d for d in snapshot_dates if keep_snapshot(d, today)]
pruned = [d for d in snapshot_dates if not keep_snapshot(d, today)]
print(f"মোট সিমুলেটেড স্ন্যাপশট: {len(snapshot_dates)}")
print(f"রিটেনশন পলিসি অনুযায়ী রাখা হবে: {len(kept)}")
print(f"প্রুন (মুছে ফেলা) হবে: {len(pruned)}")
৫ · System Design ও Cybersecurity কোর্সের সাথে সম্পর্ক
RTO/RPO এবং ডিজাস্টার রিকভারির স্থাপত্যগত দিক (মাল্টি-রিজিয়ন আর্কিটেকচার, ফেইলওভার ডিজাইন) System Design কোর্সে গভীরভাবে আলোচিত হয়েছে, আর ব্যাকআপ ডেটার এনক্রিপশন ও অ্যাক্সেস কন্ট্রোল Cybersecurity কোর্সের বিষয়। এই পাঠ শুধু অপারেশনাল/DevOps দৃষ্টিকোণ থেকে দেখেছে — কীভাবে স্ন্যাপশট শিডিউল ও রিটেনশন পলিসি বাস্তবে সেট আপ করা হয়।
ইনক্রিমেন্টাল স্ন্যাপশট ব্যাকআপকে সাশ্রয়ী করে, একটি সুচিন্তিত রিটেনশন পলিসি সেই ব্যাকআপগুলোকে ব্যবস্থাপনাযোগ্য রাখে, এবং RTO/RPO ব্যবসায়িক প্রয়োজনকে সুনির্দিষ্ট, পরিমাপযোগ্য প্রযুক্তিগত লক্ষ্যে রূপান্তর করে — এই তিনটি একসাথে একটি দায়িত্বশীল ডিজাস্টার রিকভারি স্ট্র্যাটেজির ভিত্তি তৈরি করে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ একটি ই-কমার্স অ্যাপ্লিকেশনের অর্ডার ডেটাবেস এবং একটি ইন্টারনাল লগ-আর্কাইভ স্টোরেজের RPO আলাদা হওয়া উচিত কেন?
অর্ডার ডেটাবেসে ডেটা হারানো মানে সরাসরি গ্রাহকের অর্থ ও অর্ডার তথ্য হারানো — তাই এর RPO খুবই কড়া (কয়েক মিনিট বা তার কম) হওয়া উচিত। লগ-আর্কাইভ হারালে সাধারণত ব্যবসায়িক ক্ষতি সীমিত (হয়তো ডিবাগিং কিছুটা কঠিন হবে) — তাই এর RPO অনেক শিথিল (কয়েক ঘণ্টা) রাখলেও চলে। প্রতিটি সিস্টেমের RTO/RPO তার প্রকৃত ব্যবসায়িক প্রভাব অনুযায়ী আলাদাভাবে ঠিক করা উচিত।
প্র ০২ শুধু "দৈনিক পূর্ণ ব্যাকআপ, ৯০ দিন ধরে সব রাখা" — এই সহজ পলিসিতে কী সমস্যা থাকতে পারে?
দুটি সমস্যা — প্রথমত, প্রতিদিন সম্পূর্ণ পূর্ণ কপি নেওয়া ইনক্রিমেন্টাল পদ্ধতির চেয়ে বহুগুণ বেশি স্টোরেজ ও সময় নেয়। দ্বিতীয়ত, ৯০ দিনের প্রতিটি দৈনিক স্ন্যাপশট রাখলে স্টোরেজ খরচ লিনিয়ারভাবে বাড়তে থাকে, অথচ ৩০ দিন আগের কোনো নির্দিষ্ট দিনে ফিরে যাওয়ার প্রয়োজন বাস্তবে খুব কম হয় — তাই টায়ার্ড রিটেনশন (দৈনিক/সাপ্তাহিক/মাসিক) একই সুরক্ষা দিয়ে অনেক কম খরচে কাজ করে।
প্র ০৩ একটি টিম RTO = ৫ মিনিট বেছে নিলে তাদের আর্কিটেকচারে কী থাকতেই হবে বলে মনে হয়?
৫ মিনিটের মধ্যে সম্পূর্ণ পুনরুদ্ধার করতে হলে ম্যানুয়াল হস্তক্ষেপ (কাউকে জেগে উঠে স্ন্যাপশট থেকে রিস্টোর শুরু করা) বাস্তবসম্মত নয় — এর জন্য প্রয়োজন হবে স্বয়ংক্রিয় স্বাস্থ্য-পরীক্ষা (health check), স্বয়ংক্রিয় ফেইলওভার, এবং সম্ভবত একটি ইতিমধ্যে চালু থাকা স্ট্যান্ডবাই কপি (শুধু স্ন্যাপশট থেকে রিস্টোর নয়, বরং একটি "গরম" রেপ্লিকা) — এটি System Design কোর্সের হাই-অ্যাভেইলেবিলিটি আর্কিটেকচারের সরাসরি প্রয়োগ।
অনুশীলন
-
চিন্তা করুন: আপনার পরিচিত একটি অ্যাপ্লিকেশন বেছে নিয়ে অনুমান করুন এর RTO এবং RPO কী হওয়া উচিত এবং কেন।
উদাহরণ: একটি ব্যাংকিং অ্যাপের RPO প্রায় শূন্য (কোনো লেনদেন হারানো অগ্রহণযোগ্য) এবং RTO কয়েক মিনিট (গ্রাহকরা দীর্ঘ সময় সার্ভিস বন্ধ সহ্য করবে না) — এর জন্য প্রয়োজন সিনক্রোনাস রেপ্লিকেশন ও স্বয়ংক্রিয় ফেইলওভার। অন্যদিকে একটি অভ্যন্তরীণ অ্যানালিটিক্স ড্যাশবোর্ডের RPO কয়েক ঘণ্টা ও RTO কয়েক ঘণ্টা হলেও যথেষ্ট, কারণ সাময়িক বিভ্রাট ব্যবসায়িক ক্ষতি করে না।
-
পরীক্ষা করুন: উপরের কোড সেলে
rpo_hours-এর মান ১ ঘণ্টা করে দিন এবং দেখুন প্রয়োজনীয় দৈনিক স্ন্যাপশট সংখ্যা কীভাবে বদলায়।rpo_hours = 1করলেsnapshots_per_day = 24 / 1 = 24হবে — অর্থাৎ প্রতি ঘণ্টায় একটি স্ন্যাপশট প্রয়োজন। এটি স্পষ্ট করে কেন কড়া RPO সরাসরি বেশি স্ন্যাপশট, বেশি স্টোরেজ ব্যবহার এবং বেশি খরচের দিকে নিয়ে যায় — RPO আসলে একটি সরাসরি খরচ-নির্ধারক প্যারামিটার।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ পরবর্তী পাঠ M4-এ ক্লাউড নেটওয়ার্কিং শুরু করবে — VPC, লোড ব্যালেন্সার, DNS ও সিকিউরিটি গ্রুপ।
- System Design & Software Architecture কোর্স সঙ্গী কোর্স হাই-অ্যাভেইলেবিলিটি ও মাল্টি-রিজিয়ন ডিজাস্টার রিকভারি আর্কিটেকচার বিস্তারিত দেখুন।
- Cybersecurity & Ethical Hacking কোর্স সঙ্গী কোর্স ব্যাকআপ ডেটার এনক্রিপশন ও অ্যাক্সেস কন্ট্রোল শিখতে দেখুন।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity ও Cloud Computing & DevOps — সব এক জায়গায়।