
পরিচয়
সবকিছু সুস্থ থাকলে রেডিস শিলা শক্ত অনুভব করে। আসল পরীক্ষা শুরু হয় যখন কিছু ভেঙ্গে যায়। একটি নোড ক্র্যাশ হয়, একটি ভার্চুয়াল মেশিন রিবুট হয়, একটি কন্টেইনার অদৃশ্য হয়ে যায়, বা একটি নেটওয়ার্ক সমস্যা সিস্টেমের অংশকে বিচ্ছিন্ন করে দেয়৷
এর পরে কী ঘটবে তা সম্পূর্ণরূপে নির্ভর করে কীভাবে প্রতিলিপি এবং উচ্চ প্রাপ্যতা ডিজাইন করা হয়েছিল তার উপর। অনেক দল অনুমান করে যে রেডিস স্বয়ংক্রিয়ভাবে ব্যর্থতাগুলি পরিচালনা করে, তবে এটি এমন নয়। Redis বিল্ডিং ব্লক প্রদান করে, সমাপ্ত সমাধান নয়।
প্রতিলিপি এবং উচ্চ প্রাপ্যতা বিভিন্ন সমস্যার সমাধান করে। রেডিস উভয়কেই সমর্থন করে, তবে স্থিতিস্থাপক উত্পাদন ব্যবস্থা তৈরির জন্য পার্থক্য বোঝা গুরুত্বপূর্ণ৷
রিডিস প্রতিলিপি আসলে কি করে
এর মূল অংশে, রেডিস প্রতিলিপি হল এক নোড থেকে অন্যের কাছে ডেটা অনুলিপি করা। একটি প্রাথমিক নোড, যাকে সাধারণত মাস্টার বলা হয়, সমস্ত লেখার ক্রিয়াকলাপ পরিচালনা করে। এক বা একাধিক প্রতিলিপি নোড পরিবর্তনের একটি ক্রমাগত প্রবাহ পায় এবং তাদের ডেটা সিঙ্কে রাখে৷
তিনটি প্রধান কারণে প্রতিলিপি বিদ্যমান:রিড স্কেলিং, ফেইলওভার রেডিনেস এবং ডেটা রিডানডেন্সি। যাইহোক, একা প্রতিলিপি উচ্চ প্রাপ্যতার গ্যারান্টি দেয় না। এটি শুধুমাত্র এটি তৈরি করার জন্য প্রয়োজনীয় উপাদান সরবরাহ করে৷
কিভাবে হুডের নিচে প্রতিলিপি কাজ করে
যখন একটি প্রতিরূপ একটি মাস্টারের সাথে সংযোগ করে, এটি একটি প্রাথমিক সিঙ্ক্রোনাইজেশন প্রক্রিয়ার সাথে শুরু হয়। মাস্টার তার বর্তমান ডেটার একটি স্ন্যাপশট তৈরি করে এবং প্রতিলিপিতে পাঠায়। রেপ্লিকা এই স্ন্যাপশটটিকে মেমরিতে লোড করে।
প্রাথমিক সিঙ্কের পরে, মাস্টার পরবর্তী সমস্ত লেখার আদেশ প্রতিলিপিতে প্রবাহিত করে। সামঞ্জস্যপূর্ণ থাকার জন্য প্রতিরূপটি এই আদেশগুলি একই ক্রমে প্রয়োগ করে৷
এই পদ্ধতিটি দক্ষ এবং সহজ, কিন্তু এটি গুরুত্বপূর্ণ ট্রেডঅফের পরিচয় দেয়। প্রতিলিপিটি ডিফল্টরূপে অ্যাসিঙ্ক্রোনাস, যার মানে সর্বদা একটি ছোট উইন্ডো থাকে যেখানে মাস্টারে ডেটা বিদ্যমান থাকে তবে এখনও প্রতিলিপিগুলিতে নেই৷
অসিঙ্ক্রোনাস প্রতিলিপি এবং ডেটা হারানোর ঝুঁকি
অ্যাসিঙ্ক্রোনাস রেপ্লিকেশন রেডিসকে দ্রুত এবং প্রতিক্রিয়াশীল থাকার অনুমতি দেয়, তবে এর অর্থ এই যে মাস্টার ব্যর্থ হলে কিছু ডেটা ক্ষতি সম্ভব।
যদি প্রতিলিপিগুলি সাম্প্রতিক লেখাগুলি পাওয়ার আগে মাস্টার ক্র্যাশ করে, সেই লেখাগুলি হারিয়ে যায়৷ রেডিস এই বাস্তবতা আড়াল করার চেষ্টা করে না। ক্যাশে ডেটার জন্য, এটি সাধারণত গ্রহণযোগ্য। জটিল অবস্থার জন্য, এটা নাও হতে পারে।
রেডিস প্রতিলিপিকে আরও কঠোর করার জন্য বিকল্পগুলি সরবরাহ করে, তবে কঠোর গ্যারান্টি বিলম্ব বাড়ায় এবং প্রাপ্যতা হ্রাস করে। কতটা ডেটা ক্ষতি গ্রহণযোগ্য তা নির্ধারণ করা একটি মূল স্থাপত্যগত সিদ্ধান্ত।
রিড স্কেল করতে প্রতিলিপি ব্যবহার করা
রেডিস প্রতিলিপি ব্যবহার করার একটি সাধারণ কারণ হল রিড ট্রাফিক স্কেল করা। অ্যাপ্লিকেশনগুলি মাস্টারের কাছে লেখার ক্রিয়াকলাপ পরিচালনা করতে পারে এবং প্রতিলিপিগুলি জুড়ে পঠিত ক্রিয়াকলাপগুলি বিতরণ করতে পারে৷
এটি মাস্টারের উপর লোড হ্রাস করে এবং সামগ্রিক থ্রুপুট উন্নত করে। যাইহোক, যেহেতু প্রতিলিপিটি অ্যাসিঙ্ক্রোনাস, তাই প্রতিলিপিগুলি কিছুটা বাসি ডেটা ফেরত দিতে পারে৷
ক্যাশিং প্রোফাইল বা কনফিগারেশনের মতো ব্যবহারের ক্ষেত্রে, এটি সাধারণত ঠিক থাকে। দৃঢ় ধারাবাহিকতা প্রয়োজন এমন পরিস্থিতিতে, এটি গ্রহণযোগ্য নাও হতে পারে। দলগুলোকে ইচ্ছাকৃতভাবে এই ট্রেডঅফ করতে হবে।
মাস্টার ব্যর্থ হলে কি হয়
একা প্রতিলিপি মাস্টার ব্যর্থতা পরিচালনা করে না। যখন মাস্টার নিচে চলে যায়, তখন প্রতিলিপিগুলি সিঙ্কে থাকে কিন্তু বাহ্যিক ব্যর্থতা প্রক্রিয়া ছাড়া স্বয়ংক্রিয়ভাবে প্রচারিত হয় না।
উচ্চ প্রাপ্যতা ব্যর্থতা সনাক্ত করতে কিছু প্রয়োজন, সিদ্ধান্ত সমন্বয়, এবং একটি নতুন মাস্টার প্রচার. এখানেই ব্যর্থতা সিস্টেমগুলি কার্যকর হয়৷
৷রেডিস সেন্টিনেল এবং উচ্চ উপলব্ধতা
রেডিস সেন্টিনেল হল রেডিসে উচ্চ প্রাপ্যতা যোগ করার জন্য ঐতিহ্যগত সমাধান। সেন্টিনেল প্রক্রিয়াগুলি Redis দৃষ্টান্তগুলি নিরীক্ষণ করে, ব্যর্থতা সনাক্ত করে এবং ঐক্যমতে পৌঁছানোর জন্য একে অপরের সাথে যোগাযোগ করে৷
যখন সেন্টিনেলরা সম্মত হন যে একজন মাস্টার নিচে আছেন, তখন প্রতিলিপিগুলির একটিকে নতুন মাস্টার হওয়ার জন্য উন্নীত করা হয়। সেন্টিনেলরাও ক্লায়েন্টদের অবহিত করে যাতে তারা সঠিক নোডের সাথে পুনরায় সংযোগ করতে পারে।
সেন্টিনেল অতিরিক্ত উপাদান এবং জটিলতা প্রবর্তন করে। কার্যকরী হওয়ার জন্য, একাধিক সেন্টিনেল নোড চলমান থাকতে হবে। সত্য উচ্চ প্রাপ্যতার জন্য একটি একক সেন্টিনেল যথেষ্ট নয়।
কিভাবে সেন্টিনেল ব্যর্থ হওয়ার সিদ্ধান্ত নেয়
সেন্টিনেল মিথ্যা ব্যর্থতা এড়াতে টাইমআউট এবং কোরাম ব্যবহার করে। একাধিক সেন্টিনেলকে অবশ্যই সম্মত হতে হবে যে প্রচার হওয়ার আগে একজন মাস্টারের কাছে পৌঁছানো যায় না।
এই নকশা নির্ভরযোগ্যতা উন্নত কিন্তু ব্যর্থতা তাত্ক্ষণিক নয় মানে. সর্বদা একটি ছোট সময় থাকে যখন মাস্টার অনুপলব্ধ থাকে এবং কোন প্রতিস্থাপন সক্রিয় থাকে না।
অ্যাপ্লিকেশনগুলি অবশ্যই এই উইন্ডোটি সুন্দরভাবে পরিচালনা করার জন্য ডিজাইন করা উচিত। পুনরায় চেষ্টা, টাইমআউট এবং ফলব্যাক আচরণ অপরিহার্য।
রিডিস ক্লাস্টার এবং বিল্ট-ইন উচ্চ উপলব্ধতা
রেডিস ক্লাস্টার সরাসরি সিস্টেমে প্রতিলিপি এবং ফেইলওভারকে একীভূত করে। প্রতিটি শার্ডের একটি মাস্টার এবং প্রতিলিপি রয়েছে এবং যখন একটি মাস্টার ব্যর্থ হয় তখন স্বয়ংক্রিয়ভাবে ব্যর্থতা ঘটে।
এটি সেন্টিনেলের প্রয়োজনীয়তাকে সরিয়ে দেয় তবে অন্যান্য সীমাবদ্ধতার পরিচয় দেয়। মূল বন্টন, ক্লায়েন্ট আচরণ, এবং ক্রস-শার্ড অপারেশনের জন্য যত্নশীল ডিজাইনের প্রয়োজন।
কঠোর স্থাপত্যের সীমানা আরোপ করার সময় Redis ক্লাস্টার উচ্চ প্রাপ্যতাকে সহজ করে।
ফেলওভার মানে জিরো ডাউনটাইম নয়
একটি সাধারণ ভুল ধারণা হল Redis ফেইলওভার শূন্য ডাউনটাইম গ্যারান্টি দেয়। বাস্তবে, ব্যর্থতা দ্রুত কিন্তু তাৎক্ষণিক নয়।
ব্যর্থতার সময়, কিছু অনুরোধ ব্যর্থ হবে বা পুনরায় চেষ্টা করতে হবে। ভাল-পরিকল্পিত সিস্টেমগুলি এই আচরণটি আশা করে এবং সুন্দরভাবে পুনরুদ্ধার করে। খারাপভাবে ডিজাইন করা সিস্টেমগুলি ক্র্যাশ বা ক্যাসকেডিং ব্যর্থতা ট্রিগার করতে পারে৷
উচ্চ প্রাপ্যতা স্থিতিস্থাপকতা উন্নত করে, পরিপূর্ণতা নয়।
মস্তিষ্ক বিভক্ত এবং এর ঝুঁকি
বিভক্ত মস্তিষ্ক ঘটে যখন একাধিক নোড বিশ্বাস করে যে এটি মাস্টার। রেডিস এবং সেন্টিনেল এটি প্রতিরোধ করার জন্য ডিজাইন করা হয়েছে, কিন্তু নেটওয়ার্ক পার্টিশন এবং ভুল কনফিগারেশন এখনও এটি ঘটাতে পারে।
বিভক্ত মস্তিষ্ক বিরোধপূর্ণ লেখা এবং ডেটা দুর্নীতির ফলে হতে পারে। এই ঝুঁকি কমানোর জন্য প্রয়োজন সঠিক সেন্টিনেল কোরাম, সঠিক নেটওয়ার্ক সেটআপ এবং বুদ্ধিমান সময়সীমা।
এই বিবরণগুলি উপেক্ষা করা বিরল কিন্তু গুরুতর ঘটনার একটি সাধারণ কারণ৷
৷প্রতিলিপি ল্যাগ এবং কর্মক্ষমতা প্রভাব
রেপ্লিকেশন ল্যাগ সাধারণত ছোট কিন্তু শূন্য হয় না। ভারী লেখার চাপে, প্রতিলিপিগুলি মাস্টারের পিছনে পড়ে যেতে পারে।
উচ্চ ব্যবধানের সময় একটি ব্যর্থতা ঘটলে, ডেটা ক্ষতি বৃদ্ধি পায়। প্রতিলিপিকরণ ল্যাগ পর্যবেক্ষণ করা সিস্টেমের জন্য অপরিহার্য যেখানে ডেটা অখণ্ডতা গুরুত্বপূর্ণ।
ব্যবধানে আকস্মিক বৃদ্ধি প্রায়ই অন্তর্নিহিত কর্মক্ষমতা বা সম্পদের সমস্যা নির্দেশ করে।
কেন প্রতিলিপি ব্যাকআপ নয়
প্রতিলিপি ব্যাকআপ সঙ্গে বিভ্রান্ত করা উচিত নয়. যদি মাস্টারে ডেটা মুছে ফেলা হয়, সেই মুছে ফেলা অবিলম্বে প্রতিলিপি করা হয়৷
৷ব্যাকআপ মানব ত্রুটি এবং যৌক্তিক দুর্নীতি থেকে রক্ষা করে। প্রতিলিপি হার্ডওয়্যার বা প্রক্রিয়া ব্যর্থতার বিরুদ্ধে রক্ষা করে। Redis যদি মূল্যবান ডেটা সঞ্চয় করে তাহলে উভয়েরই প্রয়োজন।
সাধারণ রেডিস HA ভুল
Redis উচ্চ প্রাপ্যতা ডিজাইন করার সময় দলগুলি প্রায়শই একই ভুল করে। এর মধ্যে রয়েছে অনুমান করা প্রতিলিপিটি উচ্চ প্রাপ্যতার সমান, শুধুমাত্র একটি সেন্টিনেল চালানো, প্রতিলিপি ল্যাগ উপেক্ষা করা, ফেইলওভার পরীক্ষা করতে ব্যর্থ হওয়া এবং রেডিস ত্রুটির জন্য অ্যাপ্লিকেশনগুলিকে ক্র্যাশ করার অনুমতি দেওয়া।
বাস্তব-বিশ্ব বিভ্রাট প্রতিবেদনে এই ভুলগুলি বারবার প্রদর্শিত হয়৷
ডিজাইনের অংশ হিসেবে পরীক্ষায় ব্যর্থতা
উচ্চ প্রাপ্যতা যা কখনই পরীক্ষা করা হয় না তা কেবল কাগজে বিদ্যমান। দলগুলিকে নিয়মিতভাবে নিয়ন্ত্রিত পরিবেশে মাস্টারকে থামিয়ে ব্যর্থতার অনুকরণ করা উচিত।
ব্যর্থতার আচরণ পর্যবেক্ষণ করা, পুনরুদ্ধারের সময় পরিমাপ করা এবং অ্যাপ্লিকেশন প্রতিক্রিয়া বোঝা অমূল্য অন্তর্দৃষ্টি প্রদান করে যা কোনো ডকুমেন্টেশন প্রতিস্থাপন করতে পারে না।
Redis HA এর জন্য একটি ব্যবহারিক মানসিক মডেল
Redis উচ্চ প্রাপ্যতা graceful অবক্ষয় সম্পর্কে. যখন রেডিস সুস্থ থাকে, তখন সিস্টেমটি ভাল কাজ করে। যখন রেডিস অস্বাস্থ্যকর হয়ে ওঠে, তখন কর্মক্ষমতা হ্রাস পেতে পারে। যখন রেডিস অনুপলব্ধ থাকে, তখনও সিস্টেমটি টিকে থাকা উচিত৷
৷যদি Redis নিচে যাওয়ার ফলে সম্পূর্ণ সিস্টেম বিভ্রাট হয়, তাহলে উচ্চ প্রাপ্যতা অসম্পূর্ণ।
সারাংশ
রিডিস প্রতিলিপি এবং উচ্চ প্রাপ্যতা আকৃতি দেয় কিভাবে সিস্টেমগুলি চাপের মধ্যে আচরণ করে। প্রতিলিপি ডেটার কপি প্রদান করে, যখন উচ্চ প্রাপ্যতা পরিষেবার ধারাবাহিকতা প্রদান করে৷
উভয়েরই যত্নশীল ডিজাইন, বাস্তবসম্মত প্রত্যাশা এবং ক্রমাগত পরীক্ষার প্রয়োজন। সঠিকভাবে প্রয়োগ করা হলে, রেডিস ব্যর্থতাগুলি বড় ঘটনার পরিবর্তে নিয়মিত ঘটনা হয়ে ওঠে। এটি Redis উচ্চ প্রাপ্যতা লক্ষ্য.