Load balancer nima va nima uchun kerak? Turlari va algoritmlari
Assalamu Alaykum bugunload balancer nima uchun kerakligi bizga qanday foyda berishi va unining qanday turlari borligini bilib olamiz.
Ushbu maqolalarni bu maqoladan oldin o'qishni tavsiya qilaman:
Load balancer qanday ishlaydi ?
Load balancer serverlar oldida turib so'rovlarni foydalanuvchilardan qabul qiladi va undagi algoritmga qarab qaysi server bunga javob berishini aniqlaydi va shu serverga so'rovni jo'natadi va javobni olib foydalanuvchiga qaytaradi.
Load balancer doim server ishlayotganini tekshirib turadi va agar birortasi o'chib qolganini bilsa trafikni boshqa serverlarga yo'naltiradi.
Load balancer foydalanuvchi uchun server haqida ma'lumotlarni yashirib mavhumlashtiradi.

Load balancing nima o'zi va nega kerak ?
Odatda load balancer sizning dasturingiz mashhur bo'lganda ishlatiladi chunki u paytda serverlarhorizontal scaling bo'ladi va trafik taqsimlash load balancerga topshiriladi.
Ba'zi holatlarda reverse proxy bo'lib ham ishlab beradi.
Load balancer yordam bizga ushbu ishlarda yoram beradi:
High availability. Sistema yuqori trafikdayam ishlab turishiga kafolat beradi.
Trafikni serverlar orasida teng taqsimlaydi . Bu esa bir serverda bosim (overload) ko'payib ketmasligini ta'minlaydi.
Performanceni yaxshilaydi. Latencynikamaytiradi va javob berish vaqtini qisqartiradi.
Xatolikni bilib boshqa serverga so'rovlarni yo'naltiradi.
Keyinchalik kengayishni qo'llab quvvatlaydi.
Reliabilitynioshiradi chunki server o'chib qolganda ham boshqa serverlar so'rovga javob beradi. Bu fault tolarentlikni ham deyiladi.
Load balancer turlari
Oldin bu maqolani o'qishni tavsiya qilaman to'liqroq tushunish uchun :
Network yoki OSI model qismlari .
OSI Layerga bog'liq turlari :
Layer 4 (Transport layer) UDP/TCP darajasida routingni amala oshiradi va odatda IP addresslarga qarab serverni tanlaydi.
Layer 4 load balancer so'rov ichidagi ma'lumotlarni ko'ra olmaydi va shuning uchun IP adress bo'yicha ishlaydi faqatgina IP adress bilan trafikni taqsimlash yaxshi samara bermasligi mumkin.
Layer 4 load balancer 2 xil uslubda ishlatish mumkin pass through (o'tkazib yuboradi) yoki proxy(ushlab qolib qayta yo'naltiradi)
Pass through mode
Bu holatda load balancer foydalanuvchi bilan bo'g'langan aloqani uzmasdan router sifatida kelgan paketlarni kerakli serverga yo'naltiradi , foydalanuvchi bilan server o'rtasida bitta aloqa kanali bo'ladi.
Jarayon quyidagicha bo'ladi foydalanuvchi TCP aloqani load balancer IP addressiga yuboradi va load balancer bu paketlarni serve IP addressiga qayta yozadi ammo foydalanuvchi load balancer bilan gaplashayapman deb o'ylaydi . Bunda shu aloqa kanalidan kelgan hamma TCP segmentlar bitta serverga jo'natiladi.
Bu NAT deyiladi ko'proq bilish uchun ushbu maqolani o'qing.

Proxy mode
Bu uslubda load balancer foydalanuvchu bilan aloqani o'zida ushlab qolib server bilan aloqani o'zi yangidan yaratadi. LB kelayotgan TCP handshakelarnio'zi amalga oshirib va keyin server bilan aloqa o'rnatadi (oldindan o'rnatilgan pool ishlatilishi ham mumkin) . Server foydalanuvchi bilan to'g'rida to'g'ri gaplashmaydi .
LB har bir aloqani o'zi boshqargani uchun aqlliroq algoritmlar ishlatish mumkin, serverdagi aloqa kanallari soniga qarab , latency yoki server ishlayotganiga qarab va dinamik routingga kirib ketadi.
Layer 4 LB bilan proxyishlatish ushbu holatlarda tavsiya qilinadi :
O'zgaruvchan yo'naltirish mantig'i(advanced)
aloqa darajasida kuzatish (TCP xatoliklar)
rate limiting , TCP darajasida qayta urinishlar
Layer 4 LB so'rov ichini ko'rmaganaligi uchun tez ishlaydi, xavfsizlik yuqori, protocol tanlamaydi , bitta aloqa kanali ishlatish mumkin, ammo, aqlli load balancing qilish qiyin, caching yoq va aloqani boshqa foydalanuvchi ishlatolmaydi (pass through modeda).
L4 LB uchun misollar : AWS NLB, HAProxy (TCP mode)

Layer 7 (Application layer) . Bu HTTP/HTTPS bilan ishlaydi va qarorlarni so'rov ichidagi ma'lumotga asoslanib qilishi mumkin chunki unda bu ma'lumotlarga ruxsat bo'ladi.
Layer 7 doim proxymodeda ishlaydi foydalanuvchidan so'rovni olib o'zi server bilan aloqa o'rnatadi va 2 ta aloqa kanali bo'ladi (foydalanuvchidan LBga va LBdan serverga). Bundan tashqari u har bir so'rovni tushunishi kerak aks holda uni o'tkazmaydi.Layer 7 LB serverlardan SSL encryption ochish ishini ham o'ziga olishi mumkin ._Layer 7 load balancer foydali tomonlari trafikni aqlli yo'naltirish , caching chunki endi hamma narsa ko'rib turamiz, API gateway logikasini qo'shishimiz mumkin va Authni ham shuyerda qilishimiz mumkin. Yomon tomonlari qimmat, 2 ta aloqa kanali yaratish kerak, protokolni tushunishi kerak ,TLS_sertifikatni LB bilan bo'lishishingiz kerak.
L7 LB misollar: NGINX, Envoy, AWS ALB, HAProxy HTTP mode
Yuklash uslubiga qarab turlari :
Hardware load balancer. Maxsus qurilmalar (Citrix)
Software load balancer. Load balancer dasturlar (Ngnix, HAproxy)
Cloud load balancers . Cloud o'zi beradigan load balancerlar (AWS Elastic load balancer, GCP load balancer )
Load balancing strategiyalari (algoritmlari) :
Static load balancing ular server holatini hisobga olmaydi shunchaki so'rovni yo'naltiradi (bu qachonki trafik taxmin qilinishi mumkin bo'lsa yaxshi ishlaydi) :
Round robin: So'rovlarni serverlarga ketma-ket ravishda taqsimlaydi.Ammo hamma katta so'rovlarni bir serverga yuborib undagi bosimni oshirishi mumkin.
Sticky round robin. Bu ham xuddi round robin ammo bir foydalanuvchini doim bir serverga jo'natadi va shu serverda foydalanuvchi ma'lumotlarini saqlash orqali performance oshirish mumkin bu statefull dastur deyiladi. Bu ham yangi kelgan userlarni bir serverga uzatish orqali bir serverga bosim berishi mumkin.
Least connection : So'rovni eng kam aloqa kanali bo'lgan serverga yo'naltiradi (L4 LB TCP darajasida)
IP hashing: IP address hashlangan qiymatga qarab server tanlaydi . Agarda to'g'ri hash funksiya tanlansa teng taqsimlanadi lekin buni qilish qiyin .
Dynamic load balancinguslublari serverdagi performance ma'lumotlarini hisobga holgan holda so'rovlarni yo'naltiradi :
Least connection : So'rovni eng kam aloqa kanali bo'lgan serverga yo'naltiradi va bu serverlardagi aloqa kanallari sonini doim tekshirib turadi (L7 LB)
Least response time. So'rovni tez javob berayotgan serverga yo'naltiradi av performance oshiradi.
Moslangan load balancing. Qarorlar real vaqtdagi monitoringa asoslanib qabul qilinadi.
Weighted (round robin) load balancing. Ba'zi serverlar ko'p resurs borligiga qarab ko'p so'rovni shu serverga jo'natish (qo'lda o'zgartirish kerak bo'ladi)

Round robin sotuv dasturlari uchun juda yaxshi ishlaydi dinamik algoritnlar odatda katta va murakkab dasturlarda ishlatilinadi.
Odatda ko'p load balancerlar round robin algoritmi bilan ishlaydi , ideal holatda biz aqlli load balancingdan foydalanishimiz kerak ammo uni yo'lga qo'yish ancha murakkab.
Load balancer qo'shimcha vazifalari
Load balancerlar trafikni taqsimlashdan tashqari boshqa narsalarni monitoring qilishga yordam berishi mumkin, masalan:
Trafik ma'lumotlari: So'rovlar soni , Umumiy aloqa kanallari soni
Performance ma'lumotlari : Javob vaqti, latency , Throughput
Server ma'lumotlari:Serverlar ishlayotgani nazorat qilish
Xatoliklar: HTTP kodlari bo'yicha xatoliklar soni
Load balancer yomon tomonlari
Load balancer to'g'ri konfiguratsiya qilinmasa yoki yetarli resurs bo'lmasa dasturdagi eng muammoli nuqtaga(performance bottleneck) aylanishi mumkin
Load balancing qo'shish single point of failureni oldini oladi ammo murakkablik qo'shadi . Single point of failure(SPOF)
Bitta load balanncer qo'shish bu SPOF bo'ladi , shuning uchun hech bo'lmaganda active-passive uslubida qo'shimcha load balancer bo'lishi kerak (asosiy o'chganda o'rniga kelish uchun).
Fail-over va fault tolerance maqolasi.
Xulosa
Dastur kattalashgandan keyin eng katta muammo bu to'g'ri load balancer va to'g'ri algoritm tanlash . Masalan Layer 4 LB tez va kam resurs yeydi ammo o'zgaruvchan emas, Layer 7 esa sekin ammo aqlli algorimtlar ishlatish mumkin.
To'g'ri algoritm tanlash esa sizning dastur xarakteristikasiga , talablarga va sidagi resurslarga bog'liq bo'ladi lekin odatda Round robin sizga yetarli bo'ladi .