System design — সিস্টেম ডিজাইন
Content :
- Database sharding
- Scalability
- Microservice
- Distributed System
- Load Balancing & Decoupling
- High level design vs Low level design
Database sharding :
Database sharding হচ্ছে ডাটাবেইজ কে ভেঙ্গে ছোটো ছোটো অংশে ভাগ করা যেখানে কোনো particular অংশের ডাটাগুলো একসাথে থাকে। যেমন ধরাযাক নিউইয়র্কের ডাটা গুলো একসাথে থাকবে, ইউরোপের ডাটা গুলো একসাথে থাকবে। যদি আমরা ডাটাবেইজ এ কোয়েরি করি যে নিউইয়র্কের ১৩ বছরের বাচ্চাগুলো খুঁজে নিয়ে আসো তখন নিউইয়র্ক কি এর অধিনে ডাটাবেইজ এর অংশে খুজবে অন্য অংশে খুজবে না। সাধারণত হিউজ পরিমান ডাটার জন্য Database sharding করা হয়।
Scalability :
Scalability ২ ধরনের হয় --
- Vertical scaling
- Horizontal scaling
ধরা যাক ক্লাউডে আমাদের একটি ওয়েবসাইট আছে । সময়ের পরিবর্তনের সাথে সাথে রিকোয়েস্ট আসার পরিমাণ অনেক বাড়তে থাকলো । এখন আমাদের কেপাসিটি বাড়ানোর জন্য ২ টি কাজ করা যেতে পারে ।
- BUY BIGGER MACHINE — এটাকে বলে VERTICAL SCALING
- BUY MORE MACHINE — এটাকে বলে HORIZONTAL SCALING
- load balancing মানে হচ্ছে রিকোয়েস্ট কোন মেশিনে ট্রান্সফার হবে সেটা বোঝায় ।
- vertical scaling এ যেকোনো একটা পয়েন্টে ফেইলুর হলে পুরো সিস্টেম ফেইল হয় । অপরদিকে horizontal scaling ডিস্ট্রিবিউটেড সিস্টেমে কাজ করে ।
- ইন্টার প্রসেস কমিউনিকেশন ফাস্ট কিন্তু নেটওয়ার্ক কল স্লো ।
- vertical scaling এ ডাটা consistency তে কোন সমস্যা হয় না কারণ একটা মেশিনের মধ্যেই সকল ডাটা থাকে অপরদিকে horizontal scaling এ ডাটা consistency তে সমস্যা হয় কারণ ডাটা আনার জন্য নেটওয়ার্ক কলের প্রয়োজন হয়, এতে অসাম্যজ্জসশতা দেখা দেয় ।
Microservices
ধরা যাক, একটি রেস্টুরেন্টে পিজ্জা সেকশন আলাদা, Garlic bread সেকশন আলাদা । কোন কাস্টমার যখন পিজ্জা অর্ডার করবে তখন সেই অর্ডারটি পিজ্জা সেফের কাছে চলে যাবে আবার যখন কেউ Garlic bread অর্ডার করবে তখন সেই অর্ডারটি Garlic bread সেফের কাছে চলে যাবে । এটাই মাইক্রোসার্ভিসের কনসেপ্ট ।
Distributed system
ধরা যাক, আমাদের রেস্টুরেন্টে প্রচুর অর্ডার আসলো অথবা কারেন্টের কারণে সারাদিন কোন কাজ করা যাবে না অথবা যেকোনো বিপর্যয়য়ের কারণে রেস্টুরেন্টে কাজ না করা গেলে সেক্ষেত্রে একটি ব্যাকআপ স্টোরের প্রয়োজন পরে । অথবা আসে পাশের বিভিন্ন জায়গা থেকে অর্ডার আসে সেজন্য লোকাল স্টোরের দরকার হয় এটাই distributed system এর কনসেপ্ট । যাতে ফল্ট টলারেন্ট ও কম হয় এবং তাড়াতাড়ি রিস্পন্স করা যায় ।
Load Balancing & Decoupling
load balancing হচ্ছে কোন রিকোয়েস্ট আসলে সেটা কোথায় পাঠাতে হবে অথবা কোন সার্ভারে রিকোয়েস্ট নেওয়ার লিমিট শেষ হয়ে গেলে নতুন একটি কপি বানিয়ে সেটাতে রিকোয়েস্ট ট্রান্সফার করবে ।
decoupling হচ্ছে আলাদা আলাদা মডিউলে ভাগ করে ফেলা ।
High level design vs Low level design
উপড়ে যে ট্রপিক গুলো নিয়ে আলোচনা করা হলো সেগুলা হচ্ছে high level system design অর্থাৎ সার্ভারে ডেপলয় করা, সিস্টেম কনফিগার করা ।
অপরদিকে low level design হচ্ছে ক্লাস তৈরি করা, অব্জেক্টি তৈরি করা অর্থাৎ development সেকসন।