বেশিরভাগ সিস্টেম কাজ করার জন্য ডিজাইন করা হয়।
খুব কমই টিকে থাকার জন্য ডিজাইন করা হয়।
পার্থক্যটা সূক্ষ্ম মনে হয়। কিন্তু তা নয়। একটি সিস্টেম যা “কাজ করে” তা প্রত্যাশিত বিষয়গুলো সামলায়। একটি সিস্টেম যা টিকে থাকে তা বাকি সবকিছু সামলায় — যে ট্রাফিক স্পাইক কেউ মডেল করেনি, যে ডিপেন্ডেন্সি নীরবে তার API পরিবর্তন করেছে, যে ক্যাসকেডিং ফেইলিওর একটি মাত্র টাইমআউট থেকে শুরু হয়।
ভঙ্গুরতার ফাঁদ
বাস্তবে ভঙ্গুর আর্কিটেকচার দেখতে এরকম:
- সার্ভিসগুলোর মধ্যে টাইট কাপলিং যা “কখনো পরিবর্তন হবে না”
- শেয়ার্ড ডেটাবেস যা অদৃশ্য সিঙ্গেল পয়েন্ট অফ ফেইলিওর হয়ে যায়
- এরর হ্যান্ডলিং যা লগ করে এবং গিলে ফেলে, প্রপাগেট এবং রিকভার করার বদলে
- মনিটরিং যা আপনাকে কিছু ভেঙেছে বলে আপনার ইউজাররা ইতিমধ্যে জানার পরে
দ্বিতীয় দিনের জন্য ডিজাইন
সেরা আর্কিটেক্টরা জিজ্ঞেস করেন না “এটা কি কাজ করবে?” তারা জিজ্ঞেস করেন “এটা ফেইল করলে কী হবে?”
যদি না। কখন।
সার্কিট ব্রেকার রিট্রাই ঝড়ের বদলে। বাল্কহেড শেয়ার্ড থ্রেড পুলের বদলে। গ্রেসফুল ডিগ্রেডেশন সব-অথবা-কিছুই-না এর বদলে।
মূলনীতি
ব্যর্থতা ধরে নিন। রিকভারির জন্য ডিজাইন করুন। টিকে থাকার জন্য অপ্টিমাইজ করুন।
প্রতিটি আর্কিটেকচারাল সিদ্ধান্ত একটি ট্রেড-অফ। কিন্তু একটি ট্রেড-অফ আমি কখনো করি না: আমি কখনো সুবিধার জন্য রেজিলিয়েন্স ত্যাগ করি না।
এমন সিস্টেম তৈরি করুন যা টিকে থাকে। বাকিটা নয়েজ।
