Load balancer সহজ ভাষায়: Layer 4 বনাম Layer 7 ও health check
Load balancer কয়েকটি server-এ traffic ছড়ায় এবং নষ্টগুলো সরিয়ে রাখে। গুরুত্বপূর্ণ ধরন, algorithm ও সেটিং শিখুন।

Load balancer কয়েকটি server-এর সামনে বসে আসা request তাদের মধ্যে ছড়ায়। এটি বেশি ক্ষমতা, ভালো প্রাপ্যতা (একটি server মরলে traffic অন্যদের কাছে যায়) এবং server একটি একটি করে হালনাগাদের স্বাধীনতা দেয়।
Layer 4 বনাম Layer 7
সংখ্যাগুলো network মডেলের স্তর বোঝায়।
Layer 4 (transport): IP address ও port (TCP বা UDP) দেখে সিদ্ধান্ত নেয়। traffic-এর ভেতরে দেখে না।
- খুব দ্রুত ও সহজ।
- যেকোনো TCP বা UDP protocol-এ কাজ করে (database, game server, mail)।
- URL বা header দিয়ে route করতে পারে না।
Layer 7 (application): HTTP বোঝে।
- Host নাম, path, header বা cookie দিয়ে route করে (যেমন
/apiএক দলে,/imagesঅন্য দলে)। - TLS terminate, compress, cache, rewrite ও redirect করতে পারে।
- Rate limit বা web application firewall প্রয়োগ করতে পারে।
- Layer 4-এর চেয়ে একটু বেশি CPU লাগে।
অনেক cloud provider দুটিই দেয়, যেমন network ও application load balancer।
Balancing algorithm
- Round robin: পালাক্রমে প্রতিটি server। সহজ, একই রকম server ও request-এ ঠিক।
- Weighted round robin: শক্তিশালী server বেশি traffic পায়।
- Least connections: সবচেয়ে কম সক্রিয় সংযোগের server। request-এর সময় অসম হলে ভালো।
- IP hash: একই client IP একই server-এ যায়।
- Consistent hashing: একটি key (যেমন user বা cache key)-কে server-এ ম্যাপ করে, server বদলালে ওলটপালট সীমিত রেখে।
Health check
Balancer নিয়মিত প্রতিটি server যাচাই করে এবং অসুস্থগুলোতে traffic পাঠানো বন্ধ করে।
- TCP check শুধু দেখে port সংযোগ নিচ্ছে কি না।
- HTTP check
/health-এর মতো path চায় ও 200 আশা করে। - Health endpoint অর্থপূর্ণ কিন্তু সস্তা রাখুন। এটি দেখাবে অ্যাপ সত্যিই সেবা দিতে পারে (যেমন database-এ পৌঁছায়), অথচ এত ভারী নয় যে নিজেই load বানায়।
- বিরতি ও ব্যর্থতার সংখ্যা এমনভাবে ঠিক করুন যাতে ক্ষণিক ঝামেলায় server না সরে কিন্তু আসল ব্যর্থতা দ্রুত ধরা পড়ে।
Connection draining ব্যবহার করুন, যাতে সরানো server আগে চলমান request শেষ করে।
Session ও stickiness
Server যদি user session data নিজের memory-তে রাখে, অন্য server-এ গেলে user তা হারায়। বিকল্প:
- Sticky session (affinity): balancer cookie বা IP দিয়ে user-কে একই server-এ পাঠাতে থাকে। সহজ, কিন্তু load অসম এবং সেই server মরলে সমস্যা।
- ভালো: অ্যাপ stateless রাখুন এবং session Redis বা database-এর মতো ভাগ করা store-এ রাখুন, বা signed token ব্যবহার করুন। তখন যেকোনো server যেকোনো request সামলাতে পারে।
TLS termination
Layer 7 balancer TLS terminate করতে পারে: certificate সে রাখে, traffic decrypt করে server-এ পাঠায়, ফলে server-এর crypto কাজ কমে ও certificate এক জায়গায় সামলানো যায়। সংবেদনশীল data-র জন্য balancer ও server-এর মাঝের traffic-ও আবার এনক্রিপ্ট করুন।
আসল client IP পাঠাতে X-Forwarded-For-এর মতো header ব্যবহার করুন এবং এগুলো শুধু নিজের balancer থেকে বিশ্বাস করুন।
নতুন single point of failure বানাবেন না
একটি load balancer নিজেই ঝুঁকি। Cloud load balancer একাধিক zone জুড়ে redundant বানানো। নিজে চালালে (Nginx, HAProxy) floating IP বা DNS failover সহ দুই বা বেশি রাখুন এবং server কয়েকটি availability zone-এ ছড়ান।
অন্য রূপ
- DNS load balancing: কয়েকটি IP ফেরত দেয়। সহজ, কিন্তু cache হওয়া উত্তর ব্যর্থতায় ধীরে সাড়া দেয়।
- Global load balancing ও CDN: user-কে নিকটতম সুস্থ region-এ পাঠায়।
- Client-side balancing ও service mesh: service নিজেই backend বাছে।
ছোট Nginx উদাহরণ
upstream app {
least_conn;
server 10.0.1.11:3000;
server 10.0.1.12:3000;
server 10.0.1.13:3000 backup;
}
server {
location / { proxy_pass http://app; }
}
মূল কথা: load balancer ক্ষমতা ও সহনশীলতা বাড়ায়। গতি ও যেকোনো protocol-এর জন্য Layer 4, বুদ্ধিমান HTTP routing-এর জন্য Layer 7 ব্যবহার করুন, সততার সাথে health যাচাই করুন, server stateless রাখুন এবং balancer নিজেও redundant করুন।
Networking ও Cloud সিরিজ, পর্ব ১ (ইন্টারনেট কীভাবে চলে): 4 নম্বর (মোট 5)। আগের লেখা: HTTP, HTTPS ও TLS: ওয়েবসাইট খুললে কী ঘটে.


