> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/availability/load-balancing.md).

# Load Balancing

আমরা যখন কোনো ওয়েবসাইটে প্রবেশ করি বা কোনো অ্যাপে লগইন করি, তখন এর পেছনে কাজ করে বিশাল এক সিস্টেম। একসাথে হাজার, লক্ষ, এমনকি কোটি কোটি ব্যবহারকারী যখন কোনো সার্ভারে রিকোয়েস্ট পাঠায়, তখন যদি সঠিকভাবে ট্রাফিক ম্যানেজ না করা হয়, তাহলে সার্ভার সহজেই Crash করতে পারে। এই সমস্যা সমাধানে Load Balancing একটি অপরিহার্য Technique

***

### **Load Balancing কী?**

Load Balancing হলো এমন একটি Technique, যা একাধিক সার্ভারের মধ্যে ট্রাফিক সঠিকভাবে ভাগ করে দিয়ে সার্ভারের উপর চাপ কমায়। সহজ ভাষায়, এটি হলো এক প্রকার Traffic Controller, যা দেখে নেয় কোন সার্ভার ব্যস্ত এবং কোনটি ফাঁকা আছে, তারপর রিকোয়েস্ট সেই অনুযায়ী বন্টন করে।

ধরুন, আপনি একটি জনপ্রিয় ফুড ডেলিভারি অ্যাপে ঢুকেছেন, যেখানে একসাথে হাজার হাজার মানুষ খাবার অর্ডার দিচ্ছে। এখন যদি সব রিকোয়েস্ট একটি মাত্র সার্ভারে পাঠানো হয়, তাহলে সার্ভার Slow হয়ে যাবে বা একসময় Crash করবে। তাই এখানে Load Balancer ব্যবহার করা হয়, যা বিভিন্ন সার্ভারের মধ্যে ট্রাফিক ভাগ করে দেয়, ফলে প্রতিটি সার্ভারের উপর চাপ কমে যায় এবং ব্যবহারকারীরা দ্রুত সেবা পায়।

***

### **Load Balancing কেন প্রয়োজন?**

Load Balancing ব্যবহারের পেছনে কিছু গুরুত্বপূর্ণ কারণ রয়েছে:

1. **High Availability & Reliability**: সার্ভারের কোনো সমস্যা হলে Load Balancer অন্য সার্ভারে রিকোয়েস্ট পাঠিয়ে দেয়, ফলে সার্ভিস বন্ধ হয় না।
2. **Scalability**: যখন ব্যবহারকারীর সংখ্যা বেড়ে যায়, Load Balancer নতুন সার্ভারের সাথে স্বয়ংক্রিয়ভাবে ট্রাফিক বন্টন করতে পারে।
3. **Performance Improvement**: প্রতিটি রিকোয়েস্টকে কম লোড থাকা সার্ভারে পাঠিয়ে দ্রুততার সাথে কাজ সম্পন্ন করা যায়।
4. **Failure Handling**: কোনো সার্ভার যদি ডাউন হয়ে যায়, Load Balancer স্বয়ংক্রিয়ভাবে অন্য সার্ভারে রিকোয়েস্ট পাঠিয়ে দেয়।
5. **Security Enhancement**: কিছু Load Balancer DDoS Attack Mitigation-এও সাহায্য করে, কারণ এটি সার্ভারের সামনে একটি Gateway হিসেবে কাজ করে।

***

### **Load Balancing কীভাবে কাজ করে?**

Load Balancer মূলত Reverse Proxy এর মতো কাজ করে। এটি ব্যবহারকারীর রিকোয়েস্ট প্রথমে গ্রহণ করে এবং তারপর বিভিন্ন সার্ভারের মধ্যে বন্টন করে।

Load Balancer সাধারণত দুটি জায়গায় বসানো হয়:

1. **Global Load Balancing** - এটি বিভিন্ন Data Center বা Regions-এর মধ্যে ট্রাফিক ভাগ করে।
2. **Local Load Balancing** - এটি নির্দিষ্ট একটি Data Center-এর মধ্যে বিভিন্ন সার্ভারের মধ্যে ট্রাফিক বন্টন করে।

***

### **Load Balancing এর জনপ্রিয় আলগোরিদম সমূহ**

Load Balancer বিভিন্ন পদ্ধতিতে ট্রাফিক বন্টন করতে পারে। নিচে কয়েকটি জনপ্রিয় Load Balancing Algorithm দেওয়া হলো:

#### ১. **Round Robin**

এই পদ্ধতিতে প্রতিটি নতুন রিকোয়েস্ট পরপর বিভিন্ন সার্ভারে পাঠানো হয়। যেমন, প্রথম রিকোয়েস্ট **Server 1**, দ্বিতীয়টি **Server 2**, তৃতীয়টি **Server 3** এ পাঠানো হয়, এবং এভাবে চক্রাকারে চলতে থাকে।

**Example:**

* Request 1 → Server A
* Request 2 → Server B
* Request 3 → Server C
* Request 4 → Server A (Repeat)

**সুবিধা:** সহজ এবং কার্যকরী।\
**অসুবিধা:** সার্ভারের বর্তমান **Load** বিবেচনা করে না।

***

#### ২. **Least Connections**

এই পদ্ধতিতে যে সার্ভারের লোড সবচেয়ে কম (অর্থাৎ, যার সাথে সবচেয়ে কম **Active Connection** রয়েছে), সেখানে নতুন রিকোয়েস্ট পাঠানো হয়।

**Example:**

* Server A (10 connections)
* Server B (5 connections) → নতুন রিকোয়েস্ট এখানে যাবে

**সুবিধা:** ব্যস্ততা অনুযায়ী ট্রাফিক বন্টন হয়।\
**অসুবিধা:** সার্ভারের **Processing Power** বিবেচনা করে না।

***

#### ৩. **IP Hashing**

এই পদ্ধতিতে ব্যবহারকারীর **IP Address** অনুযায়ী নির্দিষ্ট সার্ভারে রিকোয়েস্ট পাঠানো হয়।

**Example:**

* IP: 192.168.1.10 → Server A
* IP: 192.168.1.11 → Server B

**সুবিধা:** নির্দিষ্ট ব্যবহারকারীর জন্য নির্দিষ্ট সার্ভার নির্ধারিত থাকে, যা **Session Consistency** বজায় রাখে।\
**অসুবিধা:** যদি নির্দিষ্ট সার্ভার ডাউন হয়ে যায়, তাহলে সমস্যা হতে পারে।

***

### **Load Balancer এর ধরন**

Load Balancer সাধারণত দুটি প্রধান ক্যাটাগরিতে বিভক্ত:

#### ১. **Hardware Load Balancer**

এটি বিশেষ হার্ডওয়্যার ডিভাইস যা উচ্চমাত্রার ট্রাফিক পরিচালনার জন্য ব্যবহৃত হয়।\
Examples: F5 Big-IP, Citrix NetScaler

#### ২. **Software Load Balancer**

এটি সফটওয়্যার ভিত্তিক সল্যুশন যা সার্ভারে ইনস্টল করে ব্যবহার করা হয়।\
**Examples:** Nginx, HAProxy, AWS ELB, Traefik

***

### **Load Balancer কীভাবে বাস্তবায়ন করবেন?**

আপনার System Design-এ Load Balancer ব্যবহারের জন্য নিচের ধাপগুলো অনুসরণ করতে পারেন:

1. Server Clustering করুন: একাধিক সার্ভার তৈরি করুন, যাতে Load Balancer ট্রাফিক ভাগ করে নিতে পারে।
2. Load Balancer Configure করুন: Nginx বা HAProxy এর মতো সফটওয়্যার সেটআপ করুন।
3. Algorithm নির্ধারণ করুন: আপনার সিস্টেমের জন্য Best Load Balancing Algorithm নির্বাচন করুন।
4. Health Check Enable করুন: সার্ভার ঠিকমতো কাজ করছে কি না তা মনিটরিং করুন।
5. Auto Scaling Enable করুন: ট্রাফিক বেড়ে গেলে স্বয়ংক্রিয়ভাবে নতুন সার্ভার যুক্ত করুন।

***

Load Balancing হলো আধুনিক System Design-এর একটি অপরিহার্য অংশ, যা সার্ভারের স্থায়িত্ব, পারফরম্যান্স এবং স্কেলিং নিশ্চিত করে। এটি সার্ভারের উপর চাপ কমিয়ে High Availability বজায় রাখে এবং System Failure কমাতে সাহায্য করে।

যদি আপনি Scalable এবং Reliable System ডিজাইন করতে চান, তাহলে Load Balancer ব্যবহার করাই বুদ্ধিমানের কাজ।
