Distributed Systems কী?
🔹 Distributed Systems কী?
একটা Distributed System হলো এমন একটি সিস্টেম যেখানে অনেকগুলো কম্পিউটার/সার্ভার মিলে একসাথে কাজ করে, কিন্তু ব্যবহারকারীর কাছে মনে হয় যেন এটা একটা সিস্টেম।
👉 মানে, “একাধিক কম্পিউটার = একসাথে কাজ = এক সিস্টেমের মতো অভিজ্ঞতা”
উদাহরণ
-
Google Search (তুমি যেটা সার্চ কর, সেটা হাজার হাজার সার্ভার মিলে প্রক্রিয়া করে)
-
Facebook, YouTube, Netflix
-
Banking বা Payment Gateway
🔹 কেন Distributed System দরকার?
-
Scalability (বড় করা সহজ) → এক সার্ভার দিয়ে কাজ হবে না, তাই অনেক সার্ভার দিয়ে লোড ভাগ করে দেওয়া যায়।
-
Availability (সবসময় অনলাইন রাখা) → একটা সার্ভার নষ্ট হলেও অন্যগুলো চালু থাকবে।
-
Performance (গতি বাড়ানো) → কাজ ভাগ হয়ে গেলে দ্রুত রেসপন্স পাওয়া যায়।
-
Geographic distribution → ব্যবহারকারী যেখানেই থাকুক (বাংলাদেশ, ইউরোপ, আমেরিকা), নিকটবর্তী সার্ভার থেকে দ্রুত সার্ভিস পাবে।
🔹 কবে Distributed System দরকার?
-
যখন user সংখ্যা অনেক বেড়ে যায় (মিলিয়ন/বিলিয়ন)।
-
যখন একটি সার্ভার দিয়ে সব রিকোয়েস্ট সামলানো যায় না।
-
যখন fault-tolerance (ডাউন হলেও সার্ভিস চালু থাকা) দরকার।
-
যখন global users থাকে (যেমন – Social Media, E-commerce, Banking)।
🔹 কিভাবে Design করা হয়?
Distributed System design করার সময় কিছু বিষয় মাথায় রাখতে হয়:
-
Data Replication → একই ডেটা একাধিক সার্ভারে রাখা, যাতে ব্যাকআপ থাকে।
-
Load Balancing → ট্রাফিক সমানভাবে ভাগ করে দেওয়া, যেন কোনো সার্ভার ওভারলোড না হয়।
-
Consistency vs Availability (CAP theorem) → ঠিক করতে হয় কোনটা বেশি গুরুত্বপূর্ণ।
-
Communication Protocol → সার্ভারগুলোর মধ্যে যোগাযোগ (gRPC, REST, Message Queue, Kafka ইত্যাদি)।
-
Monitoring & Fault Tolerance → সার্ভার ডাউন হলে বিকল্প সার্ভারকে চালু করা।
🔹 সুবিধা
✅ High Availability – সিস্টেম ডাউন হওয়ার সম্ভাবনা কম।
✅ Scalability – সহজে বাড়ানো যায়।
✅ Fast Response – কাছের সার্ভার থেকে দ্রুত রেসপন্স।
✅ Reliability – ডেটা replicate থাকায় হারানোর সম্ভাবনা কম।
🔹 অসুবিধা / চ্যালেঞ্জ
❌ Complexity বেশি – একাধিক সার্ভার ম্যানেজ করতে হয়।
❌ Consistency problem – সব সার্ভারে ডেটা একই রাখা কঠিন (CAP theorem)।
❌ Debugging কঠিন – কোথায় সমস্যা হলো বুঝতে কষ্ট হয়।
❌ Network dependency – নেটওয়ার্কে সমস্যা হলে অনেক প্রভাব পড়ে।
❌ Costly – অনেক সার্ভার চালানো ও মেইনটেইন করা ব্যয়বহুল।
🔹 Alternatives কী?
সব সময় Distributed System দরকার হয় না। ছোট/মাঝারি প্রোজেক্টে alternative হতে পারে:
-
Single Powerful Server → শুরুতে একটাই ভালো সার্ভার (vertical scaling)।
-
Database Optimization → Index, caching, query optimization ব্যবহার করে performance বাড়ানো।
-
Caching Layer → Redis/Memcached ব্যবহার করে লোড কমানো।
-
Content Delivery Network (CDN) → Static file (image, video, CSS/JS) user-এর কাছাকাছি সার্ভারে রাখা।
-
Microservices না নিয়ে Monolith Application → ছোট সিস্টেম হলে জটিল distributed design না করে একটিই centralized system রাখা।
🔹 সারাংশ
-
Distributed System মানে একাধিক সার্ভার/কম্পিউটার মিলে এক সিস্টেমের মতো কাজ করা।
-
দরকার হয় যখন user সংখ্যা অনেক, global service দিতে হয়, অথবা high availability দরকার হয়।
-
এতে scalability, speed, availability বাড়ে কিন্তু complexity ও cost বেড়ে যায়।
-
ছোট প্রোজেক্টে এর alternative হলো single server + caching + CDN।