1. System Design কী (Introduction to Large Scale System Design)
System Design বলতে বোঝায় — একটি বড় সফটওয়্যার সিস্টেমকে এমনভাবে পরিকল্পনা ও গঠন করা, যাতে সেটি নির্দিষ্ট কাজ ভালোভাবে, দ্রুত এবং নির্ভরযোগ্যভাবে সম্পন্ন করতে পারে।
সহজভাবে বললে, এটি হলো সফটওয়্যার সিস্টেমের নকশা বা স্থাপত্য (architecture) —
যেখানে আমরা ঠিক করি:
-
কীভাবে সিস্টেমটি কাজ করবে,
-
কোন কোন অংশ থাকবে (modules/components),
-
সেগুলোর মধ্যে যোগাযোগ কীভাবে হবে,
-
এবং সিস্টেম কীভাবে স্কেল (scale), পারফর্ম (perform) ও রিলায়েবল (reliable) থাকবে।
🎯 উদাহরণ:
ধরা যাক তুমি একটি E-Commerce System ডিজাইন করছো (যেমন Daraz)।
তাহলে system design-এর সময় ভাবতে হবে —
-
User কীভাবে লগইন করবে
-
Product ডেটা কোথায় সংরক্ষণ হবে
-
Payment সিস্টেম কীভাবে যুক্ত হবে
-
Load বাড়লে সার্ভার কীভাবে সামলাবে
-
ডেটা নিরাপত্তা (security) কীভাবে বজায় থাকবে
এই সব বিষয় পরিকল্পনা করাই হলো System Design।
🏗️ System Design-এর ধরণ (Types)
১. High-Level Design (HLD)
-
এখানে বড় কাঠামো বা আর্কিটেকচার ঠিক করা হয়।
-
যেমন: কোন কোন module থাকবে (User, Product, Order, Payment), ডাটাবেস কীভাবে সংযুক্ত হবে ইত্যাদি।
২. Low-Level Design (LLD)
-
এখানে প্রতিটি module-এর ভেতরের কোড স্তরে কাজের ধরণ নির্ধারণ করা হয়।
-
যেমন: কোন ক্লাস কী কাজ করবে, কী কী ফাংশন লাগবে ইত্যাদি।
⚙️ Architectural Drivers কী (Introduction to Architectural Drivers)
Architectural Drivers হলো সেই গুরুত্বপূর্ণ বিষয়গুলো, যেগুলো একটি সফটওয়্যারের আর্কিটেকচার (স্থাপত্য) গঠন করার সময় সরাসরি প্রভাব ফেলে।
অর্থাৎ — এই বিষয়গুলোই ঠিক করে দেয় সিস্টেমের গঠন কেমন হবে।
🔑 প্রধান Architectural Drivers:
১. Functional Requirements (কার্যকরী চাহিদা)
এগুলো হলো সিস্টেমের মূল কাজ —
যেমন,
-
একজন ব্যবহারকারী লগইন করতে পারবে
-
প্রোডাক্ট সার্চ করা যাবে
-
অর্ডার প্লেস করা যাবে
👉 এই কাজগুলো সিস্টেমের মূল উদ্দেশ্য নির্ধারণ করে।
২. Quality Attributes (সিস্টেমের গুণগত বৈশিষ্ট্য)
এগুলো হলো সিস্টেমের “কেমনভাবে” কাজ করবে সেই বিষয়।
যেমন —
-
Performance: সিস্টেম কত দ্রুত কাজ করবে
-
Scalability: ব্যবহারকারী বাড়লে সিস্টেম টিকবে কিনা
-
Availability: সার্ভার সবসময় চালু থাকবে কিনা
-
Security: ডেটা নিরাপদ কিনা
-
Maintainability: ভবিষ্যতে পরিবর্তন করা কত সহজ
👉 এইগুলোই সবচেয়ে বেশি আর্কিটেকচারকে প্রভাবিত করে।
৩. Constraints (সীমাবদ্ধতা)
এগুলো হলো সেই নিয়ম বা সীমা যেগুলো তোমাকে মানতে হবে।
যেমন —
-
শুধু Azure Cloud ব্যবহার করা যাবে
-
নির্দিষ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজ (যেমন C# বা Java) ব্যবহার করতে হবে
-
বাজেট বা সময় সীমিত
👉 Constraints মানতে গিয়ে অনেক সময় আর্কিটেকচারে পরিবর্তন আনতে হয়।
৪. Business Goals (ব্যবসায়িক লক্ষ্য)
এগুলো হলো সেই কারণ, যার জন্য সিস্টেম তৈরি করা হচ্ছে।
যেমন —
-
বিক্রয় বাড়ানো
-
ব্যবহারকারী ধরে রাখা
-
গ্রাহক সন্তুষ্টি বৃদ্ধি
👉 ব্যবসার লক্ষ্য অনুযায়ী প্রযুক্তিগত সিদ্ধান্ত নিতে হয়।
🧠 সহজ উদাহরণ:
তুমি যদি একটা Online Exam System বানাও,
তাহলে Architectural Drivers হবে —
| Driver Type | Example |
|---|---|
| Functional | ব্যবহারকারী লগইন করতে পারবে, প্রশ্ন দেখতে পারবে, উত্তর দিতে পারবে |
| Quality Attribute | একসাথে ১০,০০০ ছাত্র পরীক্ষা দিতে পারবে (Scalability) |
| Constraint | শুধুমাত্র .NET এবং SQL Server ব্যবহার করতে হবে |
| Business Goal | একটি দ্রুত ও নির্ভরযোগ্য অনলাইন পরীক্ষা সিস্টেম তৈরি করা |
🔍 সংক্ষেপে বললে
| বিষয় | অর্থ |
|---|---|
| System Design | সফটওয়্যার সিস্টেমের কাঠামো, কম্পোনেন্ট ও যোগাযোগের পরিকল্পনা |
| Architectural Drivers | সেই মূল বিষয়গুলো যা সিস্টেমের আর্কিটেকচারের ওপর সরাসরি প্রভাব ফেলে — যেমন Functional চাহিদা, Quality Attributes, Constraints, ও Business Goals |