স্ট্র্যাংলার প্যাটার্ন:
স্ট্র্যাংলার প্যাটার্ন একটি software development প্যাটার্ন, যেখানে ধীরে ধীরে পুরনো (legacy) সিস্টেমকে ছোট ছোট অংশে ভেঙে নতুন মাইক্রোসার্ভিস এ মাইগ্রেট করা হয়। এতে পুরনো সিস্টেমটি পুরোপুরি বন্ধ না করেই নতুন সিস্টেম চালু করা যায়।
এই প্যাটার্ন বলে আমাদের যখন একটি app কে মাইক্রোসার্ভিস এ কনভার্ট করবো তখন একসাথে সব কিছু না করে , অল্প অল্প করে করতে ।এতে আমাদের ডিবাগ এবং স্ট্যাবিলিটিতে সাহায্য করবে। প্রথমে পুরনো সিস্টেম থেকে নির্দিষ্ট একটি অংশকে আলাদা করা হয় এবং এটি নতুন মাইক্রোসার্ভিস তৈরি করা হয়। পুরনো এবং নতুন সিস্টেম উভয়ই একসঙ্গে চালানো হয়, যেন নতুন সিস্টেমে কোনো সমস্যা হলে পুরনো সিস্টেম চালিয়ে যাওয়া যায়।
প্রথমে অল্প সংখ্যক ইউজার কে মাইক্রোসার্ভিস এ পাঠানো হয় এবং টেস্টি করা হয় এবং আস্তে আস্তে সম্পুর্ন ইউজারদের কে মাইক্রোসার্ভিস এ পাঠানো হয় ।
সাগা প্যাটার্ন:
সাগা প্যাটার্নে একটি বড় কাজকে অনেকগুলো ছোট ছোট transaction-এ ভাগ করা হয়। প্রতিটি transaction সফলভাবে সম্পন্ন হলে পরবর্তী transaction চালু হয়। আর যদি কোনো transaction ব্যর্থ হয়, তাহলে ব্যর্থ হওয়া transaction এর বিপরীতে পূর্ববর্তী transaction-গুলিকে undo করার জন্য compensating transaction চালানো হয়। মাইক্রোসার্ভিস এ সাধারনত প্রত্যেক সার্ভিস এর আলাদা আলাদা ডাটাবেইজ থাকে । এর ফলে ডাটাবেইজ এ ACID মেইন্টেইন করা কঠিন হয়ে যায় । যেমন ধরি Order আর Inventory এর জন্য আলাদা দুটি মাইক্রোসার্ভিস আছে ।
এখন যদি কোনো ইউজার অর্ডার করে তাহলে অর্ডার সার্ভিস এর ডাটাবেইজ এ অর্ডার এড হবে এবং অর্ডার কমপ্লিট হলে ইনভেন্টরিসার্ভিস এ ডাটা আপডেট হবে। এখন কোনো কারনে যদি অর্ডার সার্ভিস ডাউন থাকে তাহলে ইনভেন্টরি সার্ভিস এর ডাটাকে rollback করতে হবে । এই ক্ষেত্রে সাগা প্যাটার্ন ব্যাবহার হয় । সাগার দুই ধরনের প্যাটার্ন আছে ।
- Choreography-Based Saga: প্রতিটি মাইক্রোসার্ভিস তাদের কাজ শেষ করে পরবর্তী সার্ভিসে ইভেন্ট পাঠায়।
- Orchestration-Based Saga: একটি central orchestrator থাকে, যা পুরো সাগা transaction পরিচালনা করে। এটি নির্ধারণ করে কখন কোন সার্ভিস কাজ করবে এবং কোনো ব্যর্থতা হলে কিভাবে undo করা হবে।
কেন সাগা প্যাটার্ন প্রয়োজন?
Consistency নিশ্চিত করা: প্রতিটি transaction সফলভাবে শেষ না হলে অন্য transaction-গুলিকে undo করে consistency বজায় রাখা যায়।
Distributed System-এ Resilience বৃদ্ধি: যদি কোনো transaction ব্যর্থ হয়, তবে ঐ transaction undo করে আগের state-এ ফেরা যায়।
Scalability বৃদ্ধি করা: একাধিক microservices স্বাধীনভাবে কাজ করতে পারে, যার ফলে সিস্টেমের performance ভালো হয়।
CQRS বা Command Query Responsibility Segregation
CQRS বা Command Query Responsibility Segregation হলো একটি ডিজাইন প্যাটার্ন যেখানে Command এবং Query operations সম্পূর্ণ আলাদাভাবে পরিচালিত হয়। এটি মূলত read এবং write অপারেশনগুলোকে পৃথক রাখে, যা scalability, performance, এবং maintainability বাড়াতে সাহায্য করে ।
CQRS প্যাটার্নে, দুটি আলাদা মডেল ব্যবহার করা হয়:
- Command Model: এখানে write operations সম্পন্ন হয়, অর্থাৎ create, update, delete ইত্যাদি।
- Query Model: এখানে read operations সম্পন্ন হয়, অর্থাৎ ডেটা fetch বা read করা হয়।
CQRS প্যাটার্নে read এবং write অপারেশন পৃথক থাকায় performance বৃদ্ধি পায়। যেমন, আপনি reads-এর জন্য high-performance cache ব্যবহার করতে পারেন, যা write অপারেশনের ওপর প্রভাব ফেলে না। Read-heavy এবং write-heavy সিস্টেমগুলোর জন্য CQRS উপযোগী কারণ আপনি read এবং write operations আলাদাভাবে scale করতে পারবেন। আবার অনেক সময় আমাদের অন্য সার্ভিস এর ডাটারও প্রয়োজন হয় সেক্ষেত্রে একটি কমন ডাটাবেইজ রাখা হয় ।
এই গুলো হচ্ছে মাইক্রোসার্ভিস আর্কিটেকচার এর কিছু গুরুত্বপুর্ন প্যাটার্ন যা ব্যাবহার করে মাইক্রোসার্ভিস আর্কিটেকচার ইমপ্লিমেন্ট করা হয়ে থাকে ।
