Skip to Content
সিস্টেম ডিজাইনে স্বাগতম 🎉

ধাপ ২ - হাই-লেভেল ডিজাইন প্রস্তাব করা এবং সম্মতি (buy-in) নেওয়া (Step 2 - Propose high-level design and get buy-in)

এই ধাপে, আমাদের লক্ষ্য থাকে একটি হাই-লেভেল ডিজাইন তৈরি করা এবং ডিজাইনটির ব্যাপারে ইন্টারভিউয়ারের সাথে একমত হওয়া। এই প্রক্রিয়ায় ইন্টারভিউয়ারের সাথে সহযোগিতা (collaborate) করাটা খুব ভালো একটি আইডিয়া।

  • ডিজাইনের জন্য একটি প্রাথমিক ব্লুপ্রিন্ট (blueprint) তৈরি করুন। ফিডব্যাক (feedback) বা মতামত জানতে চান। আপনার ইন্টারভিউয়ারকে একজন সতীর্থ বা টিমমেট হিসেবে বিবেচনা করুন এবং একসাথে কাজ করুন। অনেক ভালো ইন্টারভিউয়ার কথা বলতে এবং এই প্রক্রিয়ায় যুক্ত হতে পছন্দ করেন।
  • হোয়াইটবোর্ড বা কাগজে মূল উপাদানগুলো (key components) দিয়ে বক্স ডায়াগ্রাম আঁকুন। এর মধ্যে ক্লায়েন্ট (মোবাইল/ওয়েব), এপিআই (APIs), ওয়েব সার্ভার, ডেটাস্টোর, ক্যাশ (cache), সিডিএন (CDN), মেসেজ কিউ (message queue) ইত্যাদি অন্তর্ভুক্ত থাকতে পারে।
  • আপনার ব্লুপ্রিন্টটি স্কেল বা বড় আকারের বাধাগুলো (scale constraints) পার হতে পারবে কি না তা যাচাই করার জন্য ব্যাক-অফ-দ্য-এনভেলপ ক্যালকুলেশন (back-of-the-envelope calculations) বা খসড়া হিসাব করুন। একটু শব্দ করে বা জোরে চিন্তা করুন (Think out loud - অর্থাৎ আপনি কী ভাবছেন তা ইন্টারভিউয়ারকে বলে বলে ভাবা)। সরাসরি খসড়া হিসাবে ডুব দেওয়ার আগে ইন্টারভিউয়ারের সাথে কথা বলে নিন যে এই হিসাবটি আদৌ প্রয়োজন কি না।
  • সম্ভব হলে, কয়েকটি নির্দিষ্ট ইউজ কেস (concrete use cases) নিয়ে আলোচনা করুন। এটি আপনাকে হাই-লেভেল ডিজাইনের রূপরেখা তৈরি করতে সাহায্য করবে। এমনও হতে পারে যে এই ইউজ কেসগুলোর মাধ্যমে আপনি এমন কিছু এজ কেস (edge cases - অস্বাভাবিক বা ব্যতিক্রমী পরিস্থিতি) আবিষ্কার করে ফেলবেন যা আপনি আগে চিন্তাই করেননি।
  • এখানে কি আমাদের এপিআই এন্ডপয়েন্ট (API endpoints) এবং ডেটাবেস স্কিমা (database schema) যুক্ত করা উচিত? এটি আসলে সমস্যার ওপর নির্ভর করে। “গুগল সার্চ ইঞ্জিন ডিজাইন করুন”-এর মতো বড় সিস্টেম ডিজাইনের সমস্যার ক্ষেত্রে এগুলো অনেক নিচু স্তরের (too low level) বিষয় হয়ে যায়। আবার মাল্টি-প্লেয়ার পোকার গেমের ব্যাকএন্ড ডিজাইন করার মতো সমস্যার ক্ষেত্রে এগুলো নিয়ে আলোচনা করাটা যৌক্তিক (fair game)। এই ব্যাপারে আপনার ইন্টারভিউয়ারের সাথে কথা বলে নিন।

উদাহরণ (Example)

হাই-লেভেল ডিজাইনের ক্ষেত্রে কীভাবে কাজ এগোতে হয় তা দেখানোর জন্য চলুন “একটি নিউজ ফিড সিস্টেম ডিজাইন করুন” (Design a news feed system) উদাহরণটি ব্যবহার করি। এখানে সিস্টেমটি বাস্তবে কীভাবে কাজ করে তা আপনার বোঝার দরকার নেই। বিস্তারিত সবকিছু “Design A News Feed System” অধ্যায়ে ব্যাখ্যা করা হবে।

হাই-লেভেলের দিক থেকে বিবেচনা করলে, এই ডিজাইনটি দুটি ফ্লো (flows) বা প্রবাহে বিভক্ত: ফিড পাবলিশিং (feed publishing) এবং নিউজ ফিড বিল্ডিং (news feed building)।

  • ফিড পাবলিশিং: যখন একজন ব্যবহারকারী একটি পোস্ট পাবলিশ করেন, তখন সংশ্লিষ্ট ডেটা ক্যাশ/ডেটাবেসে (cache/database) লেখা বা সেভ হয় এবং পোস্টটি তার বন্ধুদের নিউজ ফিডে যুক্ত (populated) হয়ে যায়।
  • নিউজ ফিড বিল্ডিং: বন্ধুদের পোস্টগুলো রিভার্স ক্রনোলজিক্যাল অর্ডারে (reverse chronological order - অর্থাৎ নতুন পোস্ট আগে) একত্রিত (aggregating) করে নিউজ ফিড তৈরি করা হয়।

চিত্র ১ (Figure 1) এবং চিত্র ২ (Figure 2)-এ যথাক্রমে ফিড পাবলিশিং এবং নিউজ ফিড বিল্ডিং ফ্লো-এর হাই-লেভেল ডিজাইনগুলো উপস্থাপন করা হয়েছে।

চিত্র ১ (Figure 1)