মূল কনটেন্টে যান
এআই টিউটোরিয়াল

System Design Trainer-এর মাধ্যমে সিস্টেম ডিজাইন ইন্টারভিউ অনুশীলন করুন

System Design Trainer কীভাবে ইনস্টল করতে হয়, এর ইন্টার‌্যাক্টিভ হোয়াইটবোর্ডে AWS ও Azure আর্কিটেকচার তৈরি করতে হয়, ক্যাপাসিটি ও নির্ভরযোগ্যতা মূল্যায়ন করতে হয়, কাঠামোবদ্ধ স্তর সম্পন্ন করতে হয় এবং ডিজাইন-সংক্রান্ত সিদ্ধান্তে Jev-এর মতামত নিতে হয়—তা শিখুন।

System Design Trainer দিয়ে সিস্টেম ডিজাইন ইন্টারভিউ অনুশীলন

সিস্টেম ডিজাইন ট্রেইনার কী?

সিস্টেম ডিজাইন ট্রেইনার হলো সিস্টেম ডিজাইন ইন্টারভিউ অনুশীলনের জন্য একটি ইন্টারঅ্যাকটিভ হোয়াইটবোর্ড। আপনি একটি পরিস্থিতি নির্বাচন করেন, ক্যানভাসে AWS বা Azure কম্পোনেন্ট টেনে আনেন, সেগুলো সংযুক্ত করে একটি আর্কিটেকচার তৈরি করেন এবং নির্ধারিত নিয়মে ক্যাপাসিটি সিমুলেশন চালান।

সিমুলেটরটি অনুমান করে প্রতিটি কম্পোনেন্ট কতটা ট্রাফিক সামলাতে পারে, সিস্টেমের bottleneck শনাক্ত করে এবং আর্কিটেকচারের ঝুঁকিগুলো তুলে ধরে। ডিজাইন প্রস্তুত হলে, Jev এমন সিদ্ধান্তগুলো মূল্যায়ন করতে পারে যেগুলো শুধু ক্যাপাসিটি গণনার মাধ্যমে বিচার করা যায় না, যেমন স্কেলেবিলিটি, নির্ভরযোগ্যতা, ডেটা ডিজাইন এবং আপনার লিখিত ব্যাখ্যা।

প্রধান বৈশিষ্ট্য

  • ইন্টারঅ্যাকটিভ আর্কিটেকচার ক্যানভাস: হোয়াইটবোর্ডটি React Flow-এর মাধ্যমে @xyflow/react ব্যবহার করে তৈরি।
  • কাঠামোবদ্ধ অনুশীলন: প্রকল্পটিতে চারটি অধ্যায়জুড়ে ১৫টি স্তর রয়েছে।
  • লাইভ ক্যাপাসিটি মডেলিং: প্রতিটি নোডে ব্যবহারমাত্রা এবং এটি আনুমানিক কতজন ব্যবহারকারীকে সমর্থন করতে পারে তা প্রদর্শিত হয়।
  • আর্কিটেকচার বিশ্লেষণ: সিমুলেটরটি ব্যর্থতার একক বিন্দু, অনুপস্থিত লোড ব্যালান্সার এবং সরাসরি ডেটাবেসের সঙ্গে সংযুক্ত ক্লায়েন্ট শনাক্ত করে।
  • খরচ ও প্রাপ্যতার অনুমান: থ্রুপুট গণনার পাশাপাশি সিস্টেমটি অতিরিক্ত সূচক প্রদান করে।
  • ইন্টারভিউয়ার-ধাঁচের মূল্যায়ন: Jev স্কেলেবিলিটি, নির্ভরযোগ্যতা, ডেটা ডিজাইন এবং লিখিত ব্যাখ্যার নম্বর দেয়, তারপর পরবর্তী উন্নতির পরামর্শ দেয়।
  • কাস্টম প্রযুক্তি: আপনি Kafka, MongoDB বা NGINX-এর মতো প্রযুক্তি লিখতে পারেন। Jev তাদের আর্কিটেকচারগত ভূমিকা শ্রেণিবদ্ধ করে, যাতে অ্যাপ্লিকেশনটি একটি ক্যাপাসিটি প্রোফাইল নির্ধারণ করতে পারে।
  • স্থানীয় অগ্রগতি: ডিজাইন ও পরিস্থিতির অগ্রগতি ব্রাউজারে সংরক্ষিত হয়।
  • মুক্ত অনুশীলন: কাঠামোবদ্ধ স্তরগুলোর বাইরে একটি উন্মুক্ত হোয়াইটবোর্ডও রয়েছে।

প্রকল্প ইনস্টল ও চালানো

১. নির্ভরতা ইনস্টল করুন

রিপোজিটরি ক্লোন বা ডাউনলোড করুন, টার্মিনালে এর ডিরেক্টরি খুলুন এবং npm নির্ভরতাগুলো ইনস্টল করুন:

npm install

২. স্থানীয় পরিবেশ ফাইল তৈরি করুন

অন্তর্ভুক্ত পরিবেশ টেমপ্লেটটি .env.local-এ কপি করুন:

cp .env.example .env.local

৩. Jev কনফিগার করুন

আসল Jev উত্তর পেতে .env.local-এ একটি TYPESAFE_API_KEY মান যোগ করুন। Jev @typesafe-ai/sdk ব্যবহার করে lib/server/jev.ts-এ বাস্তবায়িত হয়েছে।

API key ছাড়াও অ্যাপ্লিকেশনটি চলতে পারে। সে ক্ষেত্রে Jev-এর উত্তরগুলো স্পষ্টভাবে চিহ্নিত একটি mock উত্তরে পরিবর্তিত হবে, ফলে আপনি বাহ্যিক মূল্যায়ন ছাড়াই বাকি কার্যপ্রবাহ অন্বেষণ করতে পারবেন।

৪. ডেভেলপমেন্ট সার্ভার চালু করুন

npm run dev

ট্রেইনার ব্যবহার শুরু করতে ডেভেলপমেন্ট সার্ভার প্রদর্শিত স্থানীয় ঠিকানাটি খুলুন।

আপনার প্রথম সিস্টেম ডিজাইন অনুশীলন সম্পন্ন করুন

  1. একটি প্রম্পট নির্বাচন করুন। এক মিলিয়ন ব্যবহারকারীর জন্য অবকাঠামো ডিজাইনের মতো একটি পরিস্থিতি বেছে নিন। প্রতিটি পরিস্থিতিতে নির্দিষ্ট ব্যবহারকারী সংখ্যা ও প্রয়োজনীয়তা দেওয়া থাকে।
  2. উদ্দেশ্যগুলো পড়ুন। প্রতিটি স্তরে আবশ্যিক উদ্দেশ্য এবং ঐচ্ছিক বোনাস উদ্দেশ্য থাকে, যা ডিজাইন চালানোর সময় যাচাই করা হয়।
  3. ক্লাউড কম্পোনেন্ট যোগ করুন। উপযুক্ত AWS বা Azure কম্পোনেন্ট হোয়াইটবোর্ডে টেনে আনুন।
  4. আর্কিটেকচার সংযুক্ত করুন। পরিস্থিতি অনুযায়ী ক্লায়েন্ট, নেটওয়ার্কিং কম্পোনেন্ট, অ্যাপ্লিকেশন সার্ভিস, ক্যাশ, কিউ এবং ডেটাবেসের মধ্যে অনুরোধ ও ডেটার পথ তৈরি করুন।
  5. ডিজাইন চালান। ব্যবহারমাত্রা, সমর্থিত ব্যবহারকারীর আনুমানিক সংখ্যা, প্রাপ্যতা, খরচ এবং আর্কিটেকচার সতর্কতা পর্যালোচনা করুন।
  6. bottleneck সমাধান করুন। অতিরিক্ত লোডযুক্ত কম্পোনেন্ট বা কাঠামোগত সতর্কতার ভিত্তিতে ডিজাইনটি হালনাগাদ করুন, তারপর আবার চালান।
  7. Jev-এর মতামত নিন। প্রস্তুত হলে মূল্যায়নের জন্য ডিজাইন ও লিখিত ব্যাখ্যা জমা দিন।

স্তরের স্কোর কীভাবে কাজ করে

সব আবশ্যিক উদ্দেশ্য পূরণ করলে একটি স্টার পাওয়া যায়। প্রতিটি বোনাস উদ্দেশ্য আরও একটি স্টার দেয়। স্টার XP প্রদান করে এবং আপনার র‍্যাঙ্কে অবদান রাখে, আর অগ্রগতি ব্রাউজারে সংরক্ষিত থাকে।

চতুর্থ অধ্যায়ে Azure Architecture Center-এর রেফারেন্স আর্কিটেকচার পুনর্নির্মাণ করতে বলা হয়। এই স্তরগুলোর কোনো একটি সম্পন্ন করার পর ট্রেইনারটি মূল আর্কিটেকচারের লিংক দেয়।

ক্যাপাসিটি মডেল বুঝুন

ক্যাপাসিটি ইঞ্জিনটি lib/simulate.ts-এ রয়েছে। এটি নির্ধারিত নিয়মে কাজ করে এবং AI ব্যবহার করে না। নিচের সম্পর্ক ব্যবহার করে পরিস্থিতি থেকে পিক লোড নির্ধারণ করা হয়:

DAU × requests per day ÷ 86,400 × peak factor

মডেলটি এই লোডকে রিড ও রাইটে ভাগ করে, তারপর সংযুক্ত গ্রাফের মাধ্যমে Users নোড থেকে তা প্রবাহিত করে।

সাধারণ কম্পোনেন্টগুলো ট্রাফিকে কীভাবে প্রভাব ফেলে

  • CDN: পরিস্থিতিতে edge-এ cache করা যায় হিসেবে চিহ্নিত ট্রাফিকের অংশ শোষণ করে।
  • ক্যাশ: hit rate অনুযায়ী রিড শোষণ করে। মডেলটি cache-aside sibling placement এবং inline placement উভয়ই সমর্থন করে।
  • কিউ: synchronous path থেকে রাইট সরিয়ে নিয়ে গড় অনুরোধ হারের দিকে ধীরে ধীরে প্রবাহিত করে।
  • সিবলিং কম্পোনেন্ট: একই ধরনের কম্পোনেন্টগুলো সমানভাবে লোড ভাগ করে। উদাহরণস্বরূপ, দুটি অ্যাপ্লিকেশন গ্রুপের সঙ্গে সংযুক্ত একটি লোড ব্যালান্সার তাদের মধ্যে ট্রাফিক বিতরণ করে।
  • SQL ডেটাবেস: রাইট ক্যাপাসিটি একটি primary দ্বারা সীমাবদ্ধ।
  • NoSQL ডেটাবেস: পার্টিশনের সঙ্গে রাইট ক্যাপাসিটি বৃদ্ধি পায়।

প্রতিটি নোড তার ব্যবহারমাত্রা এবং একটি supports ~N users অনুমান জানায়, যা পরিস্থিতির ব্যবহারকারীর সংখ্যা ব্যবহারমাত্রা দিয়ে ভাগ করে হিসাব করা হয়। পুরো সিস্টেমের সক্ষমতা নির্ধারিত হয় সেই বটলনেক দ্বারা, যার সমর্থিত ব্যবহারকারীর অনুমান সবচেয়ে কম।

ডিজাইন পুনরাবৃত্তির উদাহরণ

ধরা যাক, একটি ডিজাইন সব ক্লায়েন্ট ট্রাফিক সরাসরি একটি অ্যাপ্লিকেশন কম্পোনেন্টে এবং সেখান থেকে একটি ডেটাবেসে পাঠায়। সিমুলেশন চালালে অ্যাপ্লিকেশন বা ডেটাবেস বটলনেক হিসেবে দেখা দিতে পারে, পাশাপাশি নির্ভরযোগ্যতা-সংক্রান্ত সতর্কতাও পাওয়া যেতে পারে।

এরপর আপনি উপযুক্ত বিতরণ, ক্যাশিং, অ্যাসিনক্রোনাস প্রসেসিং বা ডেটা কম্পোনেন্ট যোগ করে আর্কিটেকচার সংশোধন করতে পারেন। উদাহরণস্বরূপ, লোড বালান্সারের পেছনে থাকা সমপর্যায়ের অ্যাপ্লিকেশন গ্রুপগুলো অ্যাপ্লিকেশন ট্রাফিক ভাগ করে নিতে পারে, একটি ক্যাশ তার হিট রেট অনুযায়ী ডেটাবেস রিড কমাতে পারে, এবং একটি কিউ সিঙ্ক্রোনাস পথ থেকে রাইট সরিয়ে নিতে পারে। প্রতিটি পরিবর্তনের পর আবার মডেল চালান, যাতে বোঝা যায় বটলনেক অন্য কোথাও সরে গেছে কি না।

উচ্চতর সক্ষমতার অনুমান স্বয়ংক্রিয়ভাবে কোনো ডিজাইনকে সঠিক করে না। নির্ভরযোগ্যতা, ডেটা ডিজাইন, স্কেলেবিলিটি এবং আপনার সিদ্ধান্তের পেছনের যুক্তির পারস্পরিক সমঝোতা মূল্যায়ন করতে Jev ব্যবহার করুন।

Jev কার্যকরভাবে ব্যবহার করুন

ডিটারমিনিস্টিক সিমুলেটর তার হিসাব করা সংখ্যাগুলো Jev-কে তথ্য হিসেবে দেয়। এরপর থ্রুপুটের সূত্রে রূপান্তর করা যায় না এমন বিচার Jev পরিচালনা করে।

  • মূল্যায়ন স্কোর: স্কেলেবিলিটি, নির্ভরযোগ্যতা, ডেটা ডিজাইন এবং লিখিত ব্যাখ্যা পর্যালোচনা করে।
  • উন্নতির নির্বাচন: পরবর্তী ধাপে কী উন্নত করা উচিত তা নির্বাচন করে।
  • চেকলিস্টের বিচার: পরিস্থিতির প্রতিটি চেকলিস্ট আইটেমের জন্য একটি করে Noul তৈরি করে।
  • কাস্টম কম্পোনেন্ট শ্রেণিবিন্যাস: আপনার প্রবেশ করানো প্রযুক্তিকে একটি আর্কিটেকচারাল ভূমিকা দেয়, ফলে ট্রেইনার সংশ্লিষ্ট সক্ষমতার প্রোফাইল প্রয়োগ করতে পারে।

আরও কার্যকর প্রতিক্রিয়ার জন্য লিখিত ব্যাখ্যাটি স্পষ্ট করুন। ট্রাফিকের প্রবাহ, স্কেলিংয়ের অনুমান, ব্যর্থতা মোকাবিলা, রিড ও রাইটের ধরন এবং প্রতিটি প্রধান কম্পোনেন্ট কেন রাখা হয়েছে তা বর্ণনা করুন।

উন্নত পরামর্শ

প্রতিটি কম্পোনেন্ট নয়, বটলনেক অপ্টিমাইজ করুন

সিস্টেম তার সীমাবদ্ধ কম্পোনেন্ট যতজন ব্যবহারকারী সমর্থন করে, ততজন ব্যবহারকারীই সমর্থন করতে পারে। সবচেয়ে কম সমর্থিত-ব্যবহারকারী অনুমান দেখানো নোড দিয়ে শুরু করুন। ডিজাইন পরিবর্তনের পর আবার সিমুলেশন চালান, কারণ একটি বটলনেক দূর করলে আরেকটি প্রকাশ পেতে পারে।

সিঙ্ক্রোনাস ও অ্যাসিনক্রোনাস পথ তুলনা করুন

কিউ সিঙ্ক্রোনাস রিকোয়েস্ট পথ থেকে রাইট সরিয়ে নেয় এবং গড় লোডের দিকে সেগুলোকে মসৃণভাবে পরিচালনা করে। পরিস্থিতি অ্যাসিনক্রোনাস প্রসেসিং অনুমোদন করলে সরাসরি রাইটের পথের সঙ্গে কিউ-ভিত্তিক আর্কিটেকচার তুলনা করতে মডেল ব্যবহার করুন।

ক্যাশের অবস্থান পরীক্ষা করুন

সিমুলেটর ক্যাশ-অ্যাসাইড প্যাটার্নে সমপর্যায়ের কম্পোনেন্ট হিসেবে ব্যবহৃত ক্যাশ এবং ইনলাইন অবস্থানে রাখা ক্যাশ শনাক্ত করে। অবস্থান ও হিট রেট কীভাবে পরবর্তী ধাপের রিড ট্রাফিককে প্রভাবিত করে তা পর্যবেক্ষণ করুন।

কাঠামোগত সতর্কতার দিকে নজর রাখুন

শুধু ব্যবহারমাত্রার দিকে মনোযোগ দেবেন না। একক ব্যর্থতার পয়েন্ট, অনুপস্থিত লোড বালান্সার এবং ক্লায়েন্ট থেকে সরাসরি ডেটাবেস সংযোগ আছে কি না পরীক্ষা করুন। কাঁচা সক্ষমতা যথেষ্ট হলেও এসব সতর্কতা নির্ভরযোগ্যতা বা নিরাপত্তা-সম্পর্কিত ডিজাইনের দুর্বলতা প্রকাশ করতে পারে।

ক্যাটালগের সংখ্যার পেছনের উৎস পরীক্ষা করুন

সক্ষমতা, প্রাপ্যতা এবং খরচের তথ্য lib/catalog.ts-এ সংজ্ঞায়িত করা আছে। প্রতিটি সংখ্যার সঙ্গে একটি উৎস থাকে, যা কম্পোনেন্ট প্রপার্টিজ কার্ডে দেখানো হয়। মানগুলোকে অফিসিয়াল সীমা, অফিসিয়াল SLA, ভেন্ডর বেঞ্চমার্ক, অনুমান অথবা প্রকাশিত সীমাবিহীন সেবা হিসেবে শ্রেণিবদ্ধ করা হয়েছে।

  • অফিসিয়াল সীমা: প্রকাশিত AWS বা Azure কোটা, যেমন অ্যাকাউন্ট-স্তরের রিকোয়েস্ট থ্রোটল।
  • অফিসিয়াল SLA: ভেন্ডরের মাসিক আপটাইম প্রতিশ্রুতি।
  • ভেন্ডর বেঞ্চমার্ক: প্রকাশিত পারফরম্যান্সের পরিমাপ, যা নিশ্চয়তাপ্রাপ্ত নয়।
  • অনুমান: কোনো ভেন্ডর মান পাওয়া না গেলে মডেল করা মান। প্রকল্পটি সব খরচকেও অনুমান হিসেবে গণ্য করে।
  • প্রকাশিত সীমা নেই: এমন একটি সেবা, যাকে স্বাধীনভাবে স্কেল করার মডেল করা হয়েছে, তাই এটি বটলনেক হয় না।

README-তে বলা হয়েছে যে এসব উৎস সর্বশেষ সেপ্টেম্বর 2026-এ যাচাই করা হয়েছিল। ক্লাউড কোটা পরিবর্তিত হয় এবং অনেক কোটা বাড়ানো যায়, তাই সিমুলেশনের ফলাফলকে নিশ্চয়তা নয়, বরং অনুমান হিসেবে বিবেচনা করা উচিত।

পরিস্থিতি অন্বেষণ বা সম্প্রসারণ করুন

পরিস্থিতির সংজ্ঞাগুলো lib/scenarios.ts-এ সংরক্ষিত, আর 15টি কাঠামোবদ্ধ লেভেল lib/levels.ts-এ সংজ্ঞায়িত। উপলভ্য অনুশীলনের প্রম্পট বাড়াতে lib/scenarios.ts-এ পরিস্থিতি যোগ করুন।

ব্রাউজারে সংরক্ষণব্যবস্থা বুঝুন

ক্যানভাসের ডিজাইনগুলো প্রতি পরিস্থিতির জন্য localStorage-এ সংরক্ষিত হয়, এবং অগ্রগতিও ব্রাউজারে রাখা হয়। মনে রাখবেন, ব্রাউজারের স্টোরেজ বর্তমান ব্রাউজার প্রোফাইল ও পরিবেশের মধ্যেই সীমাবদ্ধ।

উপসংহার

System Design Trainer একটি ইন্টারঅ্যাকটিভ ক্লাউড আর্কিটেকচার ক্যানভাস, ডিটারমিনিস্টিক সক্ষমতা মডেলিং, কাঠামোবদ্ধ উদ্দেশ্য এবং Jev-ভিত্তিক ডিজাইন পর্যালোচনাকে একত্র করে। পরিমাপযোগ্য আচরণ পরীক্ষা করতে সিমুলেটর ব্যবহার করুন, কাঠামোগত সমস্যা ধরতে সতর্কতাগুলো কাজে লাগান, এবং সিস্টেম ডিজাইন ইন্টারভিউতে প্রত্যাশিত যুক্তি ও পারস্পরিক সমঝোতার বিশ্লেষণ উন্নত করতে Jev ব্যবহার করুন।