Why microservices? (Monolith vs Microservices)
সিস্টেমের গঠন বা আর্কিটেকচার কেমন হবে তা নির্ধারণ করা একটি বড় চ্যালেঞ্জ। মূলত দুটি প্রধান আর্কিটেকচার আমরা ব্যবহার করি: Monolith এবং Microservices।
1. Monolithic Architecture
মনোলিথ হলো এমন একটি সিস্টেম যেখানে অ্যাপ্লিকেশনের সব পার্ট (ইউজার ম্যানেজমেন্ট, পেমেন্ট, নোটিফিকেশন ইত্যাদি) একটি মাত্র কোডবেস এবং একটি মাত্র সার্ভারে থাকে।
সুবিধা:
- Simple to develop: শুরুতে ডেভেলপ করা এবং টেস্ট করা খুব সহজ।
- Easy deployment: শুধুমাত্র একটি ফাইল বা একটি সার্ভারে ডিপ্লয় করলেই হয়।
- Performance: ইন্টার-সার্ভিস কমিউনিকেশন ল্যাটেন্সি থাকে না।
অসুবিধা:
- Hard to scale: কোনো একটি পার্টের জন্য পুরো অ্যাপ্লিকেশন স্কেল করতে হয়।
- Large codebase: কোডবেস অনেক বড় হয়ে গেলে বুঝতে এবং মেইনটেইন করতে সমস্যা হয়।
- New technology adoption: নতুন কোনো ল্যাঙ্গুয়েজ বা ফ্রেমওয়ার্ক ব্যবহার করা খুব কঠিন।
2. Microservices Architecture
মাইক্রোসার্ভিস হলো এমন একটি আর্কিটেকচার যেখানে একটি বড় অ্যাপ্লিকেশনকে অনেকগুলো ছোট ছোট, স্বাধীন সার্ভিসে ভাগ করা হয়। প্রতিটি সার্ভিস আলাদা ডাটাবেস এবং কোডবেস মেইনটেইন করে।
কেন মাইক্রোসার্ভিস ব্যবহার করবেন?
- Independent Scaling: যে সার্ভিসে লোড বেশি (যেমন: পেমেন্ট বা সার্চ), শুধুমাত্র তাকেই স্কেল করা যায়।
- Fault Isolation: একটি সার্ভিস ডাউন হলেও পুরো সিস্টেম বন্ধ হয়ে যায় না।
- Technology Variety: আলাদা আলাদা সার্ভিসের জন্য আলাদা ল্যাঙ্গুয়েজ (যেমন: একটি Go-তে, অন্যটি Python-এ) ব্যবহার করা যায়।
- Autonomous Teams: বিভিন্ন টিম আলাদা আলাদা সার্ভিস নিয়ে স্বাধীনভাবে কাজ করতে পারে।
Monolith বনাম Microservices
| বৈশিষ্ট্য | Monolith | Microservices |
|---|---|---|
| কোডবেস | একটি সিঙ্গল ইউনিট | অনেকগুলো ছোট ইউনিট |
| স্কেলিং | পুরো সিস্টেম স্কেল করতে হয় | সার্ভিস অনুযায়ী স্কেল করা যায় |
| ডিপ্লয়মেন্ট | সহজ (Single deployment) | জটিল (Distributed deployment) |
| টেকনোলজি | লিমিটেড | অনেক স্বাধীনতা থাকে |
TIP
শুরুতে ছোট প্রজেক্টের জন্য Monolith সেরা। কিন্তু যখন ইউজার এবং টিমের সংখ্যা অনেক বেড়ে যায়, তখন Microservices এ মুভ করা বুদ্ধিমানের কাজ।