সিস্টেম ডিজাইন আসলে কী?
- ●System design মানে — একটা বড় সফটওয়্যার অনেক মানুষ একসাথে ব্যবহার করলেও যেন দ্রুত ও নির্ভরযোগ্যভাবে চলে, সেভাবে তার কাঠামো সাজানো।
- ●এখানে 'সঠিক' উত্তর একটাই নয় — সবকিছুই trade-off (একটা পেতে আরেকটা ছাড়তে হয়)।
- ●Interview-তে তোমার চিন্তাভাবনা দেখা হয়, মুখস্থ উত্তর নয়।
সমস্যাটা দিয়ে শুরু করি
ধরো তুমি একটা ছোট্ট ওয়েবসাইট বানালে — একটা server, একটা database। তোমার বন্ধুরা মিলে ১০০ জন ব্যবহার করছে, সব ঠিকঠাক।
হঠাৎ তোমার সাইটটা ভাইরাল হয়ে গেল। এখন একসাথে ১০ লক্ষ মানুষ ঢুকতে চাইছে। কী হবে?
- Server হ্যাং করে যাবে 😵
- Page লোড হতে এক যুগ লাগবে
- Database আর সামলাতে পারবে না
এই সমস্যাগুলো আগে থেকে ভেবে সমাধান করার নামই System Design।
তাহলে System Design কী?
System design হলো — একটা বড় সফটওয়্যার সিস্টেমের বিভিন্ন অংশ (server, database, cache, network) কীভাবে সাজানো হবে, যাতে তা অনেক ব্যবহারকারীর চাপেও দ্রুত, নির্ভরযোগ্য ও সাশ্রয়ীভাবে কাজ করে — সেই পরিকল্পনা।
কোডিং শেখায় তুমি একটা feature কীভাবে বানাবে। System design শেখায় সেই feature লক্ষ লক্ষ মানুষের জন্য কীভাবে বানাবে।
একটা ছোট চায়ের দোকান এক বিক্রেতা দিয়েই চলে। কিন্তু সেটা যদি বিশাল রেস্টুরেন্ট চেইন হয়ে যায়? তখন লাগবে অনেক শাখা (server), কেন্দ্রীয় গুদাম (database), অর্ডার সামলানোর লাইন (queue), আর গ্রাহক যেন লাইনে বেশিক্ষণ দাঁড়িয়ে না থাকে তার ব্যবস্থা (load balancing)। এই পরিকল্পনাটাই system design।
কেন এটা শিখব?
- চাকরির ইন্টারভিউ — মিড ও সিনিয়র লেভেলের প্রায় প্রতিটা সফটওয়্যার ইন্টারভিউতে system design round থাকে।
- ভালো ইঞ্জিনিয়ার হওয়া — শুধু কোড লেখা নয়, কেন এক জিনিস আরেকটার চেয়ে ভালো — সেটা বোঝা।
- বাস্তব কাজ — অফিসে নতুন feature বানানোর সময় এই চিন্তাভাবনাই কাজে লাগে।
সবচেয়ে জরুরি ধারণা: Trade-off
System design-এ মুখস্থ করার মতো একটাই 'সঠিক উত্তর' নেই। বরং প্রতিটা সিদ্ধান্তের ভালো-মন্দ দুটো দিকই আছে।
- দ্রুত চাও? → হয়তো বেশি টাকা খরচ করতে হবে।
- সবসময় সর্বশেষ ডেটা চাও (consistency)? → হয়তো system মাঝে মাঝে ধীর হবে।
ইন্টারভিউতে কেউ তোমার কাছে নিখুঁত উত্তর চায় না। তারা দেখতে চায় — তুমি কীভাবে চিন্তা করো, কোন trade-off বেছে নাও আর কেন বেছে নাও।
এই কোর্সে আমরা কী শিখব?
- মৌলিক ধারণা — scalability, availability, load balancer, cache, database ইত্যাদি।
- Trade-offs — কখন কোনটা বেছে নেবে।
- আর্কিটেকচার প্যাটার্ন — microservices, event-driven ইত্যাদি।
- কেস স্টাডি — URL shortener, চ্যাট অ্যাপ-এর মতো বাস্তব সিস্টেম ডিজাইন।
প্রতিটা ধারণার সাথে থাকবে ইন্টারঅ্যাক্টিভ টুল — যেখানে তুমি নিজে হাতে নাড়াচাড়া করে শিখতে পারবে।
চলো, পরের পাঠে দেখি — ইন্টারনেটে আসলে Client আর Server কীভাবে কথা বলে।
মূল শব্দ (Key Terms)
মিনি কুইজ
1. System design-এ সাধারণত একটাই 'সঠিক' উত্তর থাকে — কথাটা কি ঠিক?
2. নিচের কোনটা system design-এর মূল লক্ষ্য?