Microservices Patterns (মাইক্রোসার্ভিস প্যাটার্নস)
মাইক্রোসার্ভিস আর্কিটেকচারে একটি বড় অ্যাপ্লিকেশনকে অনেকগুলো ছোট ও স্বাধীন সার্ভিসে ভাগ করা হয়। এই সার্ভিসগুলোর মধ্যে যোগাযোগ এবং স্থিতিশীলতা বজায় রাখার জন্য কিছু নির্দিষ্ট ডিজাইন প্যাটার্ন ব্যবহার করা হয়।
১. সার্ভিস ডিসকভারি (Service Discovery)
মাইক্রোসার্ভিস সিস্টেমে সার্ভিসগুলোর আইপি অ্যাড্রেস বা পোর্ট যেকোনো সময় পরিবর্তিত হতে পারে।
- থিওরি: একটি 'Service Registry' (যেমন Eureka বা Consul) থাকে যেখানে সব সার্ভিস তাদের লোকেশন রেজিস্টার করে। যখন এক সার্ভিস অন্য সার্ভিসকে কল করতে চায়, সে রেজিস্ট্রি থেকে ওই সার্ভিসের লোকেশন খুঁজে নেয়।
২. সাইডকার প্যাটার্ন (Sidecar Pattern)
Sidecar Pattern হলো আপনার মেইন সার্ভিসের সাথে একটি ছোট হেল্পার সার্ভিস যুক্ত করা। এটি মূল কোডে কোনো পরিবর্তন ছাড়াই নেটওয়ার্কিং, লগিং বা সিকিউরিটির মতো কাজগুলো হ্যান্ডেল করে।
- উপমা: একটি মোটরসাইকেলের পাশে থাকা সাইডকারের মতো, যা বাইকের ক্ষমতা বাড়ায়।
৩. সার্কিট ব্রেকার প্যাটার্ন (Circuit Breaker Pattern)
কোনো একটি সার্ভিস ফেইল করলে যেন পুরো সিস্টেম ডাউন না হয়, সেজন্য সার্কিট ব্রেকার ব্যবহার করা হয়।
- স্টেট: ১. Closed: সবকিছু ঠিক আছে, রিকোয়েস্ট যাচ্ছে। ২. Open: কোনো সার্ভিস বারবার ফেইল করলে সার্কিট ওপেন হয়ে যায় এবং সাথে সাথে এরর রেসপন্স দেয় (ডাটাবেস বা সার্ভিসে হিট না করে)। ৩. Half-Open: কিছু সময় পর চেক করা হয় সার্ভিসটি ঠিক হয়েছে কি না।
৪. সাগা প্যাটার্ন (SAGA Pattern)
মাইক্রোসার্ভিসে ডিস্ট্রিবিউটেড ট্রানজ্যাকশন (ACID) হ্যান্ডেল করা কঠিন। সাগা প্যাটার্ন এটি সমাধান করে:
- এটি একটি সিকোয়েন্স অফ লোকাল ট্রানজ্যাকশন। প্রতিটি সার্ভিস তার কাজ শেষ করে একটি ইভেন্ট পাঠায় যা পরের সার্ভিসকে ট্রিগার করে।
- যদি কোনো স্টেপ ফেইল করে, তবে সাগা একটি Compensating Transaction চালায় যা আগের সফল কাজগুলোকে রিভার্স করে দেয়।
৫. সার্ভিস মেশ (Service Mesh)
Service Mesh হলো একটি ডেডিকেটেড ইনফ্রাস্ট্রাকচার লেয়ার যা সার্ভিস-টু-সার্ভিস কমিউনিকেশন হ্যান্ডেল করে।
- এটি সাধারণত সাইডকার প্রক্সি (উদা: Envoy) ব্যবহার করে এবং Istio বা Linkerd এর মাধ্যমে কন্ট্রোল করা হয়।
- এটি লোড ব্যালেন্সিং, সার্ভিস ডিসকভারি এবং সিকিউরিটি (mTLS) সহজ করে দেয়।
৬. সাধারণ ইন্টারভিউ প্রশ্নোত্তর (General Q&A)
প্রশ্ন ১: কখন আপনি মাইক্রোসার্ভিস ব্যবহারের সিদ্ধান্ত নেবেন?উত্তর: যখন অ্যাপ্লিকেশনটি অনেক বড় হয়ে যায়, টিমে অনেক বেশি মেম্বার থাকে এবং ভিন্ন ভিন্ন সার্ভিসের আলাদা স্কেলিং প্রয়োজন হয়। ছোট প্রজেক্টের জন্য এটি ব্যবহার করলে জটিলতা ও খরচ বেড়ে যাবে।
প্রশ্ন ২: সার্ভিস মেশ এবং এপিআই গেটওয়ের মধ্যে বড় পার্থক্য কী?উত্তর: এপিআই গেটওয়ে মূলত এক্সটারনাল ট্রাফিক (North-South) হ্যান্ডেল করে। আর সার্ভিস মেশ ইন্টারনাল সার্ভিসগুলোর মধ্যে কমিউনিকেশন (East-West) হ্যান্ডেল করে।
প্রশ্ন ৩: মাইক্রোসার্ভিসে 'Observability' কেন গুরুত্বপূর্ণ?উত্তর: যেহেতু অনেকগুলো সার্ভিস থাকে, তাই সমস্যা কোথায় হয়েছে তা খুঁজে পাওয়া কঠিন। এজন্য ডিস্ট্রিবিউটেড ট্রেসিং (উদা: Jaeger) এবং সেন্ট্রাল লগিং প্রয়োজন।
৭. সিনারিও ভিত্তিক প্রশ্ন (Scenario-based Questions)
সিনারিও ১: "আপনার সিস্টেমে একটি সার্ভিস স্লো হওয়ার কারণে অন্য সুস্থ সার্ভিসগুলোও বাকে পড়ে যাচ্ছে। আপনি কীভাবে এটি আটকাবেন?"
সমাধান: এখানে আমি Circuit Breaker Pattern ব্যবহার করব। স্লো হওয়া সার্ভিসটিতে রিকোয়েস্ট পাঠানো বন্ধ করে দিলে অন্যান্য সার্ভিসগুলো রিসোর্স নষ্ট করবে না এবং সিস্টেমের বাকি অংশ সচল থাকবে।
সিনারিও ২: "একটি ই-কমার্স অ্যাপে পেমেন্ট সফল হয়েছে কিন্তু ইনভেন্টরি আপডেট হতে ফেইল করেছে। আপনি কীভাবে ডেটা কনসিস্টেন্সি বজায় রাখবেন?"
সমাধান: এখানে SAGA Pattern ব্যবহার করব। যেহেতু ইনভেন্টরি আপডেট ফেইল করেছে, তাই সাগা প্যাটার্ন একটি 'Refund' ইভেন্ট ট্রিগার করবে যা ইউজারের পেমেন্ট রিভার্স করে দেবে এবং সিস্টেম আবার ভ্যালিড স্টেটে ফিরে আসবে।
TIP
মাইক্রোসার্ভিসে সবসময় Design for Failure মানসিকতা রাখা উচিত। কোনো একটি পার্ট ফেইল করলে যেন পুরো সিস্টেম ক্যাসকেডিং ফেইলরের শিকার না হয়।