Chapters of Frontend Dev থেকে Full-Stack Backend

Week 4 - Capstone + NestJS + System Design + DrillChapter 26 of 282 min read

Englishবাংলা

System design practice - কাগজে আর্কিটেকচার আঁকা

URL shortener, notification system, rate limiter - ভাবার ছক: requirement, ধারণক্ষমতা, অংশ, tradeoff

Senior পদের interview-তে একটা প্রশ্ন প্রায় নিশ্চিত: 'একটা URL shortener বানান তো।' এখানে কেউ কোড চায় না - চায় আপনার ভাবনার গঠনটা। আপনি requirement জিজ্ঞেস করেন কিনা, অংশগুলো ভাগ করতে পারেন কিনা, আর প্রতিটা সিদ্ধান্তের দাম (tradeoff) বলতে পারেন কিনা। ভালো খবর: এই কোর্সে শেখা প্রায় প্রতিটা ধারণাই এখানে কাজে লাগে।

যেকোনো design-এর ছক - চার ধাপ

  • Requirement পরিষ্কার করুন - কত user, পড়া বেশি না লেখা বেশি, কী কী feature অবশ্যই লাগবে। প্রশ্ন করা দুর্বলতা নয়, পেশাদারিত্ব।
  • অংশগুলো ভাগ করুন - client, API server, database, cache, queue - কোনটা কীসের দায়িত্বে।
  • Data-র সিদ্ধান্ত - SQL না NoSQL, কোথায় index, কোন অংশে cache।
  • Tradeoff বলুন - কেন এই পছন্দ, তার বদলে কী ছাড় দিলেন। নিখুঁত উত্তর নেই, সচেতন সিদ্ধান্তই উত্তর।

উদাহরণ - URL shortener

লিখতে হয় কম, পড়তে (redirect) হয় অনেক বেশি - তাই পড়ার পথটা দ্রুত রাখাই মূল কাজ। ছোট code বানানো: লম্বা URL-এর id-কে base62-তে বদলে ছোট করা। জনপ্রিয় link-গুলো Redis cache-এ - বেশিরভাগ redirect database ছোঁবেই না। Database-এ শুধু code ও আসল URL-এর জোড়া - গঠন সরল বলে SQL-ই যথেষ্ট। দেখুন তো - cache-এর সিদ্ধান্তটা সপ্তাহ ৩-এর, database-এরটা সপ্তাহ ২-এর। System design আলাদা জাদু নয়, জানা ধারণাগুলোর সাজানো প্রয়োগ।

বাকি দুটোও একইভাবে ভাবুন। Notification system: পাঠানোর কাজ queue-তে (সপ্তাহ ৩), কোন মাধ্যমে যাবে তার আলাদা worker, ব্যর্থ হলে retry। Rate limiter: প্রতিটা user-এর গুনতি Redis-এ, কারণ গুনতিটা দ্রুত জায়গায় না থাকলে limiter নিজেই বোঝা হয়ে যাবে। প্রতিটা design আঁকতে ২০-২৫ মিনিট নিন - বাক্স আর তীরচিহ্নই যথেষ্ট, সুন্দর ছবি দরকার নেই।

সবাই যে ভুলটা করে

প্রশ্ন শুনেই আঁকতে শুরু করা - requirement না জিজ্ঞেস করে। আরেকটা ভুল: শুধু সুখের পথটা (সব ঠিকঠাক চললে) আঁকা। ভালো design-এ ব্যর্থতার কথাও থাকে - server পড়ে গেলে কী হবে, database ধীর হলে কী হবে।

আজকের Practice

তিনটা design-ই কাগজে আঁকুন - URL shortener, notification system, rate limiter। প্রতিটার নিচে দুটো tradeoff এক লাইনে করে লিখুন। আঁকা শেষ হলে যেকোনো একটা মুখে বুঝিয়ে বলুন, যেন সামনে interviewer বসে আছে।

Interview-এ কীভাবে বলবেন

নিজেকে যাচাই করুন: 'System design-এ আমি প্রথমে requirement আর অনুপাত (পড়া বনাম লেখা) পরিষ্কার করি, তারপর অংশ ভাগ করি, data আর cache-এর সিদ্ধান্ত নিই, আর প্রতিটা পছন্দের tradeoff বলি। যেমন URL shortener-এ পড়া বেশি বলে redirect-এর পথে Redis cache রেখেছি, database রেখেছি সরল SQL-এ।'

All chapters of Frontend Dev থেকে Full-Stack Backend