System Design Basics (Scalable System)

Imran Hasan Hira
BSADD
Published in
3 min readJun 3, 2018

( টার্গেট অডিয়েন্স — লেভেল ২+ )

কিছুদিন আগে “এই ছবি দিয়ে কবি কি বুঝাতে চেয়েছেন?” টাইপ একটা পোষ্ট দিয়েছিলাম গ্রুপে। আমি ভাবলাম বেশ কঠিন এক প্রশ্ন করে একটু ভাব নিব। লেভেল ২/৩ তে যারা আছ, তাদেরকে নাকানি-চুবানি খাওয়াব ভাবছিলাম। কিন্তু বেশ কিছু ত্যাঁদড় পোলাপানের কারণে পর্যাপ্ত পরিমাণে সুবিধা করে উঠতে পারলাম না। প্রশ্ন করার আগেই উত্তর নিয়ে রেডি ছিল এরা। তাই এই পোস্টে সবাইকে ট্যাগ করে দিছি। অবশ্য যারা রেসপন্স করেছে, তাদের সবাইই বিভিন্ন সফটওয়ার কোম্পানিতে বেশ ভাল ভাল কাজ করতেছে।

যাই হোক, প্রথমে মাথায় আইডিয়া আসে একজন হবু ইঞ্জিনিয়ার কে Scalable System Design কিভাবে বুঝাব, এইটা থেকে। যারা অলরেডি C/C++/Java কোর্সগুলা করে ফেলছ, তারা এর মধ্যে মোটামুটি আইডিয়া পেয়ে গেছ যে কম্পিউটারে প্রোগ্রামগুলো কিভাবে বানানো হয়।

কিছু কিছু প্রোগ্রামে ইনপুট দেওয়া হয় কনসোল থেকে। কিছু কিছু প্রোগ্রামে সুন্দর User Interface থাকে। কিছু কিছু প্রোগ্রাম তোমাদের লোকাল মেশিনে চলে। যেমন ধর — Explorer, Games, Text Editors । আবার কিছু কিছু প্রোগ্রাম সার্ভার মেশিনে চলে, এবং তোমার ব্রাউজার থেকে HTTP দিয়ে ডাটা যায় আসে। এগুলোকে ওয়েব আপ্লিকেশন বলে। সাধারণত এই ধরনের ওয়েব আপ্লিকেশন বানানোর জন্য এখন অনেক ক্লাউড সার্ভিস পাওয়া যায়। তারপরও মনে হল স্ক্রাচ থেকে একটা প্রোজেক্ট ভেঙ্গে দেখালে ব্যাপারটা সবার কাছে পরিষ্কার হবে।

তো আমাদের আজকের প্রোজেক্টের নাম হল — National Identification Information Center for Bangladesh ( NIICB )। সত্যি কথা বলতে, এই নামের আসলে কিছু নাই, এইটা একটা বানানো নাম। যাই হোক, এই প্রজেক্টের কাজ হল, সারা দেশের গ্রামে গ্রামে NID registration সিস্টেমকে অটোমেট করে ফেলা। যেহেতু এইটা একটা বিশাল প্রোজেক্ট, আমাদের বকবকানির সুবিধার জন্য একটু ছোট পরিসরে চিন্তা করি।

আপাতত ধরে নেই, ফিচার হিসেবে কেবল দুইটা জিনিসই লাগবে।

ফিচার-১ঃ NID Registration ফরম সাবমিট করতে পারা।

ফিচার-২ঃ কোন ফর্ম সাবমিট হয়ে গেলে, পরবর্তীতে সেটার সর্বশেষ অবস্থা দেখতে পারা।

আসলে এইটা একটা ওয়েব আপ্লিকেশন হবে। ওয়েব সাইটে একটা ফর্ম থাকবে। নিজের নাম, বাপের নাম, মায়ের নাম, ঠিকানা আর ছবি দিয়ে ফরম এ আপ্লাই করবে। সাথে সাথে বিভিন্ন ডকুমেন্টও অ্যাটাচ করার অপশন থাকবে।

আচ্ছা, একটু বিস্তারিত চিন্তা করলে

** ফিচার ১ এর জন্য ইনপুট

  • পুরো নাম, নামের প্রথম অংশ, শেষ অংশ
  • বাবা মা এর নাম
  • ঠিকানা ( স্থায়ী + বর্তমান )
  • পাসপোর্ট সাইজের সুন্দর দেখে ফুটফুটে একটা ছবি
  • অন্যান্য ডকুমেন্ট ( PDF / Docx / JPEG )

** ফিচার ১ এর আউটপুট হবে

  • আপ্লিকেশন নাম্বার

** ফিচার ২ এর জন্য ইনপুট

  • আপ্লিকেশন নাম্বার

** ফিচার ২ এর আউটপুট হবে

  • আপ্লিকেশন সম্পর্কিত সব ধরনের তথ্য

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

এখন একটা মেশিন থেকে যখন দশটা মেশিন হয়ে গেল, তখনই ঝাঁমেলা বাড়ল। কারণ আগে তো HTTP রিকোয়েষ্ট প্রোসেসিং, ডাটাবেজ স্টোরেজ, ফাইল স্টোরেজ সবই এক মেশিনে হত। এখন কিভাবে কি হবে? আসলে, এইগুলার জন্য এখন আলাদা করে মেশিন লাগবে। তারপর সবগুলা যাতে একসাথে সুন্দর করে কাজ করে, সেজন্য তাদের মধ্যে পরিচয় করিয়ে দিতে হবে। এখন এই পরিচয় কিভাবে হবে — গান গেয়ে হবে ? নাকি লোড ব্যালান্সার দিয়ে হবে, সেটা বুঝানোর জন্য একটা ডায়াগ্রাম দেখালে, কিছুটা আইডিয়া হবে।

অনেক বকবক করে ফেলছি। কারও কোন প্রশ্ন থাকলে কমেন্টে করে ফেল। আর আমি একটা স্লাইড বানিয়েছি, সেটাও দেখতে পার।

Slide link — https://goo.gl/BJgcRd

--

--