Blog top image

Saga pattern


ট্রানজেকশন হচ্ছে বেশ কয়েকটা কাজ একটার পর একটা করে শেষ করতে হবে কিন্তু সব কাজ মিলে একটা কাজের মতো মনে হতে  হবে। কাজটা যদি সফল হতে  হয় তাহলে সবগুলো কাজকে সফল হতে হবে। আর যদি  কোন একটা বা একাধিক কাজ সফল হয় এবং এক বা একাধিক কাজ ফেইল হয় তাহলে কোন কিছুই হবে না, অর্থাৎ যারা সফল হয়েছে তাদেরকে আগের অবস্থায় নিয়ে যেতে হবে এবং কোন  কাজ হয়নি মনে করতে হবে। ATM থেকে টাকা উত্তোলন হচ্ছে ট্রানজেকশন এর ভালো উদাহরণ। যদি টাকা উত্তোলন সফল হয়, তাহলে মূল একাউন্ট থেকে টাকা কমে আসবে, টাকা উত্তোলন এর রেকর্ড হবে এবং টাকা পাওয়া যাবে। আর যদি কোন সমস্যার কারণে ব্যর্থ হয়, তাহলে টাকা পাওয়া যাবে না,  টাকা উত্তোলন এর রেকর্ড হবে না এবং মূল একাউন্ট থেকে টাকাও কমে আসবে না। মনোলিথ অ্যাপ্লিকেশনে  ডাটাবেস মূলত ট্রানজেকশন ম্যানেজ করে থাকে। 

মাইক্রোসার্ভিস আর্কিটেকচারে প্রতিটা সার্ভিস এর জন্য আলাদা ডাটাবেস থাকে। যখন প্রতিটা সার্ভিসে ডাটাবেস আলাদা হয়ে যায় তখন ডাটাবেস আর ট্রানজেকশন ম্যানেজ করতে পারে না। সেই ঝামেলা থেকে মুক্তির একটা উপায় হচ্ছে সাগা প্যাটার্ন। মূলত ডিস্ট্রিবিউটেড সিস্টেমে ট্রানজেকশন ম্যানেজ করার জন্য এই প্যাটার্ন ব্যবহার করা হয়ে থাকে। সাগা-প্যাটার্ন রিকোয়েস্ট রিসপন্স এবং ইভেন্ট ড্রিভেন উভয় পদ্বতিতেই কাজ করে। 

রিকোয়েস্ট রিসপন্স এ সাগা-প্যাটার্ন

রিকোয়েস্ট রিসপন্স মডেলে সাগা-প্যাটার্ন বাস্তবায়ন করতে আলাদা কাজ করতে হয়। ট্রানজেকশন ম্যানেজ করার জন্য একটা ওয়ার্কফ্লো অর্কেস্ট্রেশন সার্ভিস লাগে। অর্কেস্ট্রেশন সার্ভিস এর কাজ হচ্ছে ট্রানজেকশন বাস্তবায়ন করা। অর্কেস্ট্রেশন সার্ভিস এ দুইটা পাথ থাকে। একটা হচ্ছে সাকসেস পাথ আরেকটা হচ্ছে ফেইলিউর পাথ। যদি একটা কাজ সফল হয় তখন তারপরের নিচের দিকের কাজ শুরু হয় এবং এভাবে পুরা কাজটা শেষ হয়। আবার যদি কোন একটা কাজ ফেল হয়, তখন সেখান থেকে উপরের দিকে বাকি কাজগুলাকে আনডু করা  হয়।  




ইভেন্ট ড্রিভেন এ সাগা-প্যাটার্ন

ইভেন্ট ড্রিভেন এ ও সাগা-প্যাটার্ন একই ভাবে কাজ করে কিন্তু কোন ওয়ার্কফ্লো অর্কেস্ট্রেশন সার্ভিস লাগে না। এর পরিবর্তে মেসেজ ব্রোকারে কাজ আনডু করার একটা চ্যানেল থাকে। একটা সার্ভিস যখন কোন কাজ সম্পন্ন করে তখন সে পরের কাজের জন্য  মেসেজ ব্রোকারে একটা ইভেন্ট সেন্ড করবে এভাবে কাজ টা সম্পন্ন হবে। যদি কোন একটা কাজ ফেল হয়, তাহলে সে তার পূর্বের সার্ভিসকে কাজ আনডু করার জন্য একটা ইভেন্ট সেন্ড করবে এবং এভাবে সম্পূর্ণ কাজটা হয় সফল বা ফেইল  হবে।