Circuit breaker design pattern
সার্কিট ব্রেকার হল একটি ডিজাইন প্যাটার্ন যা সফ্টওয়্যার বিকাশে ব্যবহৃত হয়। এটি ব্যর্থতা সনাক্ত করতে ব্যবহৃত হয় এবং রক্ষণাবেক্ষণের সময়, অস্থায়ী বাহ্যিক সিস্টেমের ব্যর্থতা বা অপ্রত্যাশিত সিস্টেমের সমস্যাগুলির ক্রমাগত পুনরাবৃত্তি থেকে ব্যর্থতা প্রতিরোধের যুক্তিটি অন্তর্ভুক্ত করে। সাধারণ ব্যবহারগুলি ধরে নিন যে একটি অ্যাপ্লিকেশন প্রতি সেকেন্ডে 100 বার একটি ডাটাবেসের সাথে সংযুক্ত হয় এবং ডাটাবেস ব্যর্থ হয়। অ্যাপ্লিকেশন ডিজাইনার একই ত্রুটি বারবার পুনরাবৃত্তি করতে চান না। তারা টিসিপি সংযোগের সময়সীমা শেষ হওয়ার জন্য অপেক্ষা না করেই দ্রুত এবং সুন্দরভাবে ত্রুটিটি পরিচালনা করতে চায়। সাধারণত সার্কিট ব্রেকার একটি বাহ্যিক পরিষেবার প্রাপ্যতা পরীক্ষা করতে ব্যবহার করা যেতে পারে। একটি বাহ্যিক পরিষেবা একটি ডাটাবেস সার্ভার বা অ্যাপ্লিকেশন দ্বারা ব্যবহৃত একটি ওয়েব পরিষেবা হতে পারে। সার্কিট ব্রেকার ব্যর্থতা সনাক্ত করে এবং অ্যাপ্লিকেশনটিকে ব্যর্থ হওয়ার জন্য নির্ধারিত ক্রিয়াটি সম্পাদন করার চেষ্টা করতে বাধা দেয় (যতক্ষণ না এটি পুনরায় চেষ্টা করা নিরাপদ হয়)। সার্কিট ব্রেকার ডিজাইন প্যাটার্ন বাস্তবায়নের জন্য একাধিক অনুরোধের মাধ্যমে সংযোগের অবস্থা বজায় রাখতে হবে। প্রকৃত অনুরোধগুলি থেকে ব্যর্থতা সনাক্ত করার জন্য এটিকে অবশ্যই যুক্তিকে বন্ধ করে দিতে হবে। অতএব, সার্কিট ব্রেকারের মধ্যে থাকা স্টেট মেশিনটিকে তার মধ্য দিয়ে যাওয়া অনুরোধগুলির সাথে একযোগে কাজ করতে হবে। এটি অর্জনের একটি উপায় হল অ্যাসিঙ্ক্রোনাসভাবে। একটি মাল্টি-নোড (ক্লাস্টারযুক্ত) সার্ভারে, আপস্ট্রিম পরিষেবার অবস্থা ক্লাস্টারের সমস্ত নোড জুড়ে প্রতিফলিত হতে হবে। অতএব, বাস্তবায়নের জন্য একটি স্থায়ী সঞ্চয় স্তর ব্যবহার করার প্রয়োজন হতে পারে, যেমন। একটি নেটওয়ার্ক ক্যাশে যেমন মেমক্যাচড বা রেডিস, বা স্থানীয় ক্যাশে (ডিস্ক বা মেমরি ভিত্তিক) অ্যাপ্লিকেশনটিতে, একটি বাহ্যিক পরিষেবার প্রাপ্যতা রেকর্ড করতে। সার্কিট ব্রেকার একটি নির্দিষ্ট বিরতিতে বাহ্যিক পরিষেবার অবস্থা রেকর্ড করে। অ্যাপ্লিকেশন থেকে বাহ্যিক পরিষেবা ব্যবহার করার আগে, বর্তমান অবস্থা পুনরুদ্ধার করার জন্য স্টোরেজ স্তরটিকে জিজ্ঞাসা করা হয়। পারফরম্যান্সের প্রভাব যদিও এটা বলা নিরাপদ যে সুবিধাগুলি পরিণতির চেয়ে বেশি, সার্কিট ব্রেকার বাস্তবায়নের ফলে সংরক্ষণের স্থান, প্রয়োগের জটিলতা এবং কার্যকর প্রয়োগের গণনামূলক ব্যয়কে নেতিবাচকভাবে প্রভাবিত করবে। কারণ এটি সার্কিটের অবস্থা পরীক্ষা করার জন্য এক্সিকিউশন পাথ-এ অতিরিক্ত কোড যোগ করে। এটি নীচের পিএইচপি উদাহরণে দেখা যেতে পারে, যেখানে ডাটাবেস স্থিতির জন্য এপিসি পরীক্ষা করতে কয়েকটি অতিরিক্ত চক্র খরচ হয়। এছাড়াও, সার্কিট ব্রেকার কোডটি চালানোর জন্য এটি যে সিস্টেমে চলছে সেখানে সম্পদ খরচ করে, এইভাবে "বাস্তব" অ্যাপ্লিকেশনগুলির জন্য কম কার্যকর করার ক্ষমতা রেখে যায়। ব্যবহৃত সঞ্চয় স্তর এবং সাধারণত উপলব্ধ সম্পদের উপর কতটা নির্ভর করে। এই ক্ষেত্রে সবচেয়ে বড় কারণগুলি হল ক্যাশের ধরন, উদাহরণস্বরূপ, ডিস্ক-ভিত্তিক বনাম মেমরি-ভিত্তিক এবং স্থানীয় বনাম নেটওয়ার্ক। সার্কিট ব্রেকারের বিভিন্ন অবস্থা বন্ধ খোলা অর্ধ-খোলা বন্ধ অবস্থা যখন সবকিছু স্বাভাবিক থাকে, সার্কিট ব্রেকারগুলি বন্ধ থাকে এবং সমস্ত অনুরোধ নীচে দেখানো পরিষেবাগুলিতে চলে যায়। যদি ব্যর্থতার সংখ্যা সীমা অতিক্রম করে বৃদ্ধি পায়, তবে সার্কিট ব্রেকারটি ঘুরে যায় এবং একটি উন্মুক্ত অবস্থায় চলে যায়। উন্মুক্ত অবস্থা এই অবস্থায় সার্কিট ব্রেকার পরিষেবাগুলিকে আহ্বান না করেই অবিলম্বে একটি ত্রুটি প্রদান করে। সার্কিট ব্রেকারগুলি একটি সময়সীমা শেষ হওয়ার পরে অর্ধ-খোলা অবস্থায় চলে যায়। সাধারণত, এটিতে একটি পর্যবেক্ষণ ব্যবস্থা থাকবে যেখানে সময়সীমা নির্দিষ্ট করা হবে। অর্ধ-খোলা অবস্থা এই অবস্থায়, সার্কিট ব্রেকার মাইক্রোসার্ভিস থেকে সীমিত সংখ্যক অনুরোধকে পাসথ্রু এবং অপারেশন আহ্বান করার অনুমতি দেয়। যদি অনুরোধগুলি সফল হয়, তবে সার্কিট ব্রেকারটি বন্ধ অবস্থায় চলে যাবে। তবে, যদি অনুরোধগুলি ব্যর্থ হতে থাকে, তবে এটি ওপেন স্টেটে ফিরে যায়। উদাহরণ বাস্তবায়ন পিএইচপি নিম্নলিখিত পিএইচপি-তে একটি নমুনা বাস্তবায়ন। ধারণার প্রমাণ একটি মাইএসকিউএল সার্ভারের অবস্থা একটি শেয়ারড মেমরি ক্যাশে (এপিসি) সংরক্ষণ করে। নিম্নলিখিত স্ক্রিপ্টটি ক্রন্ট্যাবের মাধ্যমে একটি নির্দিষ্ট বিরতিতে চালানো যেতে পারে। $মাইসকলি = নতুন মাইসকলি ("স্থানীয় হোস্ট", "ব্যবহারকারীর নাম", "পাসওয়ার্ড"); যদি ($মাইসকলি-> সংযোগ _ ত্রুটি) {এপিসি _ স্টোর ("ডিবিস্ট্যাটাস", "ডাউন");} অন্যথায় {এপিসি _ স্টোর ("ডিবিস্ট্যাটাস", "আপ"); $মাইসকলি-> ক্লোজ ();} একটি অ্যাপ্লিকেশনে ব্যবহার যদি (এপিসি _ ফেচ ("ডিবিস্ট্যাটাস") = = = "ডাউন") {ইকো "ডাটাবেস সার্ভার বর্তমানে উপলব্ধ না থাকে। দয়া করে এক মিনিটের মধ্যে আবার চেষ্টা করুন। "; প্রস্থান;} $মাইএসকিউলি = নতুন মাইএসকিউলি (" "স্থানীয় হোস্ট", "" "ব্যবহারকারীর নাম", "" "ডাটাবেস" "); $ফলাফল = $মাইএসকিউলি-> প্রশ্ন (" "টেবিল থেকে নির্বাচন করুন" "); বাহ্যিক লিঙ্কগুলি রেখাচিত্রের সাথে পিএইচপি বাস্তবায়নের উদাহরণ সি #ব্যবহার করে পলির সাথে পুনরায় চেষ্টা করার প্যাটার্নের উদাহরণ পলি পলি ব্যবহার করে অ্যান্ডার্স লাইবেকার্স থেকে সি #বাস্তবায়নের উদাহরণ পলি পলি নুগেট প্যাকেজ ব্যবহার করে আলেকজান্ডার নিকিতিন থেকে সি #বাস্তবায়নের উদাহরণ আরইএসটিফুল আর্কিটেকচার মার্টিন ফাউলার ব্লিকি সফ্টওয়্যার ডিজাইনের নিদর্শনগুলিতে প্রয়োগ করা পাইথন স্থিতিশীলতার নিদর্শনগুলিতে প্রয়োগ করা নিবন্ধগুলি উদাহরণস্বরূপ পিএইচপি কোড সহ নিবন্ধ