সিস্টেম ডিজাইনের উপর সম্ভাব্য ইন্টারভিউ প্রশ্নের জন্য যেভাবে প্রিপারেশন নিতে পারেন

সিস্টেম ডিজাইনের উপর সম্ভাব্য ইন্টারভিউ প্রশ্নের জন্য যেভাবে প্রিপারেশন নিতে পারেন
১৪ এপ্রিল, শুক্রবার, ২০১৭

সাইফুল ভাই লোকটা খুবই মজার, হাসিখুশি আর হেল্পফুল। বুয়েট থেকে পাস্ করে পরে ইউনিভার্সিটি অফ টেক্সাস এট ডালাস (UTD) থেকে পিএইচডি শেষ করে এখন গুগলে কাজ করছেন। প্রথমে মাইক্রোসফটে কাজ করতেন। সেখানে থাকতেই অন্য বড় বড় কোম্পানিতে ইন্টারভিউ দিয়েছেন। ফেসবুক, আমাজন, গুগল সব জায়গা থেকেই অফার পেয়ে শেষমেশ গুগলে জয়েন করেছেন!! এই সাইফুল ভাইয়ের কাছ থেকেই প্রথম ইন্টারভিউ প্রিপারেশনের উপর InterviewBit নামের এই ওয়েবসাইটের কথা জানতে পারি।

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

কিছু টার্মিনোলোজি:
  • রেপ্লিকেশন (Replication)  - এক মেশিনের ডাটা অন্য মেশিনে কপি করে রাখাকে রেপ্লিকেশন বলে। রেপ্লিকেশন করা থাকলে সুবিধা হচ্ছে এক মেশিন কোনো কারণে নষ্ট হয়ে গেলেও ডাটা হারাবে না।  
  • কন্সিস্টেন্সি (Consistency) - একটা ক্লাস্টারে সব গুলো মেশিনে একই ডাটা থাকাকে কন্সিস্টেন্সি বলে।  রেপ্লিকেশনের মাঝামাঝি সময়ে, বা কোনো কারণে রেপ্লিকেশন ঠিকমতো না হলে ক্লাস্টারের মেশিন গুলোতে কন্সিস্টেন্সি থাকবে না। ইভেঞ্চুয়াল কন্সিস্টেন্সি (Eventual কন্সিস্টেন্সি) বলতে বোঝায় যদি ক্লাস্টারে এটা নিশ্চিত করা যায় কে এক সময় গিয়ে সব মেশিন গুলোতে একই ডাটা থাকবে। 
  • এভেইল্যাবিলিটি (Availability) - যেকোনো সার্ভিস পাওয়া যাচ্ছে কীনা, সেটাকে এভেইল্যাবিলিটি বলে।  ডাটাবেস ক্লাস্টারের বেলায়, কোনো নোড ডাউন থাকার পরও কোনো কোয়েরি -র (রিড অথবা রাইট) রেজাল্ট দেয়ার সক্ষমতাকেই এভেইল্যাবিলিটি বলে। 
  • পার্টিশন টলারেন্স (Partition Tolerance) - কোনো ক্লাস্টারে দুটো মেশিন যদি চালু থাকার পরও যোগাযোগ বা কমুনিকেট করতে না পারে, অর্থাৎ যদি একটা পার্টিশন তৈরী হয়, তখনও সার্ভিস চালু থাকলে বলতে হবে ওই সার্ভিস পার্টিশন টলারেন্ট।  
  • ভার্টিক্যাল স্কেলিং এবং হরাইজন্টাল স্কেলিং (Vertical and Horizontal Scaling) - কোনো ক্লাস্টারে মেশিন গুলোর ক্ষমতা বা শক্তি (RAM  বা CPU প্রসেসিং পাওয়ার) বাড়ানোকে  ভার্টিক্যাল স্কেলিং বলে।  আর ক্লাস্টারে নতুন নতুন নোড বা মেশিন যোগ করে ক্ষমতা বাড়ানোকে হরাইজন্টাল স্কেলিং বলে।  
  • শারডিং (Sharding)  - যখন ডাটা আর একটা মেশিনে বা ডাটাবেসে আটে না, তখন ডাটা ভাগ করে করে অনেকগুলো মেশিনে ছোট আকারে রাখাকে শারডিং বলে। 

ক্যাপ বা CAP থিওরেম: 
কোনো ডিস্ট্রিবিউটেড সিস্টেমে একইসাথে কন্সিস্টেন্সি (C), এভেইল্যাবিলিটি (A) এবং পার্টিশন টলারেন্স (P) নিশ্চিত করা সম্ভব না। বড়জোর যেকোনো ২ টা নিশ্চিত করা যাবে।  ভাবছেন কেন না?  চমৎকার, খুব সোজা ভাবে, গল্পের মতো করে লেখা  কৌশিক সাথুপাদির এই ব্লগ পোস্টটা পড়লেই উত্তরটা পেয়ে যাবেন।

এইসব সিস্টেম ডিজাইন প্রশ্নে অনেকসময় নাকি জিজ্ঞেস করে বসে, "আচ্ছা, গুগল সার্চ ডিজাইন করো তো", অথবা, "ইউ আর এল (URL) শর্টেনিং যেমন bitly ডিজাইন কী ভাবে করবে?"  - এইসব প্রশ্নের কারণ মূলত ওরা নাকি দেখতে চায় আপনি কিভাবে একটা বড় সিস্টেম ডিজাইন করার চিন্তা করছেন, সেটা। সঠিক বা ভুল বলে কোনো কথা নেই।  আর কখনো কখনো একটা বড়সড়ো সিস্টেম ডিজাইন করার সময় এর ইউসার কত, হিট রেট কি হতে পারে, স্টোরেজ ক্যাপাসিটি -ই বা কত দরকার, এইসব নিয়ে কথা বলার জন্য কিছু আইডিয়া আগেই  থাকার দরকার হয়। এইসব তথ্যের জন্য  ইন্টারনেটের লাইভ স্ট্যাটিসটিক্স -এর এই ওয়েবসাইটটা (http://www.internetlivestats.com/) বেশ ভালো।

সিস্টেম ডিজাইনের উপর পড়ালেখা বা প্রাকটিস করার জন্য আরেকটা ভালো ওয়েবসাইট হচ্ছে: HiredInTech.com.  এদের সিস্টেম ডিজাইনের কোর্সটার কথা আমাজন তাদের ইন্টারভিউ ক্যান্ডিডেটদেরকে আগেই জানিয়ে রাখে, দেখে আসতে বলে!! কোর্সটার একটা বড় অংশই হার্ভার্ড ইউনিভার্সিটির প্রফেসর ডেভিড মালানের স্ক্যাল্যাবিলিটির উপর দেয়া লেকচারের উপর তৈরি করা। ইউটিউবে থাকা তাঁর ১ঘন্টা ৪৫ মিনিটের এই লেকচারটা আমাদের সবার দেখা উচিত। সিস্টেম ডিজাইনের উপর ইন্ডাস্ট্রিতে চালু আছে এমন অনেক শব্দ বা টার্ম, কনসেপ্ট -এর উপর খুবই চমৎকার আলোচনা আছে। টপিক ভিত্তিক রেফারেন্সের জন্য কেউ কেউ আবার লেকচারটাকে ভাগ করেছেন। সাউইন নামের ইউটিউবের এমনি একজন কমেন্টকারীর করা ভাগগুলো আমি কপি করে এখানে বসিয়ে দিচ্ছি :


Horizontal scaling (13:00 - 21:00)
Load balancing & caching (21:00 29:00)
Shared session state (29:00 34:00)
RAID (36:00 40:00)
Shared storage tech (42:00)
Database replication (43:00)
Load balancing tech (44:00 45:00)
Session affinity (46:00 51:00)
In-memory caching (59:00 1:00:00)
Data replication – active:passive (1:11:00 - 1:14:00)  active:active (1:16:00 - 1:21:00)
Partitioning (1:21:00 1:34:00)
Data center redundancy (1:33:00 1:39:00)
Security (1:39:00 1:44:00)

হ্যাশিং যেকোনো ইন্টারভিউতে খুবই কমন একটা ব্যাপার, ২-১ টা প্রশ্ন আসবেই। সিস্টেম ডিজাইনেও এটা বাদ যায় না। ডিস্ট্রিবিউটেড সিস্টেমে হ্যাশিং কিভাবে কন্সিস্টেন্ট রাখা যায় তার উপর খুব ছোট এই দুইটা ভিডিও (Udacity ভিডিও, Cube Drone চ্যানেলের ভিডিও ) আমার মনে হয়েছে খুব ভালো, দেখতে পারেন।

সবাইকে বাংলা ১৪২৪ নববর্ষের শুভেচ্ছা! ধন্যবাদ।
--ইশতিয়াক।
  






POM or TAP design pattern for test automation using Selenium WebDriver

POM or TAP design pattern for test automation using Selenium WebDriver August 21, Monday, 2017 I've written the same topic in Bangl...