A számítógépes hálózatok terminológiájában a terheléselosztás vagy terheléselosztás ( angol. load balancing ) a feladatok több hálózati eszköz (például szerverek ) közötti elosztásának módszere az erőforrás-felhasználás optimalizálása, a lekérdezés szolgáltatási idejének csökkentése, a vízszintes fürtméretezés ( az eszközök dinamikus hozzáadása / eltávolítása), valamint a hibatűrés ( redundancia ) biztosítása.
A számítógépekben a terheléselosztás több számítási erőforrás, például számítógépek, számítógép- fürtök , hálózatok, CPU-k vagy lemezek között osztja el a terhelést. A terheléselosztás célja az erőforrás-felhasználás optimalizálása, az átviteli sebesség maximalizálása, a válaszidő javítása és az egyes erőforrások túlterhelésének megakadályozása. Több terheléselosztó komponens használata egyetlen komponens helyett a redundancia révén javíthatja a megbízhatóságot és a rendelkezésre állást . A terheléselosztás általában speciális szoftver vagy hardver, például többrétegű kapcsoló vagy tartománynévrendszer jelenlétét foglalja magában, mint szerverfolyamatot.
A terheléselosztás abban különbözik a fizikai kapcsolattól, hogy a terheléselosztás a hálózati interfészek közötti forgalmat hálózati socket (OSI 4. rétegmodell) alapján osztja fel, míg a linkkapcsolat a forgalom alacsonyabb szintű fizikai interfészek közötti felosztását vagy csomagra (OSI) osztja. 3. modellréteg) vagy kommunikációs csatornán (OSI 2. modellréteg) keresztül.
Példák azokra az eszközökre, amelyekre a kiegyensúlyozás alkalmazható:
A terheléselosztás használható egynél több szerverrel rendelkező kiszolgálófarmok felhatalmazására. Lehetővé teheti továbbá a munka folytatását olyan körülmények között is, amikor több végrehajtó eszköz (szerver) meghibásodott. Emiatt nő a hibatűrés, és lehetővé válik a használt számítási erőforrások dinamikus módosítása végrehajtó eszközök hozzáadásával / eltávolításával a fürtben .
Az egyik leggyakrabban használt terheléselosztó alkalmazás egyetlen internetes szolgáltatás létrehozása több szerverrel , más néven szerverfarmokkal . Jellemzően a terheléselosztó rendszerek közé tartoznak a népszerű webhelyek , a nagy online áruházak , a File Transfer Protocol (FTP) webhelyek, a tartománynévrendszer (DNS) és az adatbázisok.
Az interneten a terheléselosztó általában egy olyan program, amely azon a porton figyel, ahol a külső ügyfelek csatlakoznak a szolgáltatásokhoz. A terheléselosztó továbbítja a kéréseket a szerver egyik „szerveréhez”, amely általában válaszol a terheléselosztónak. Ez lehetővé teszi a terheléselosztó számára, hogy anélkül válaszoljon az ügyfélnek, hogy ismerné a problémák belső szétválasztását. Ezenkívül lehetővé teszi az ügyfelek számára, hogy közvetlenül kapcsolatba lépjenek a háttérkiszolgálókkal, amelyek biztonsági előnyökkel járhatnak, és elrejtik a belső hálózati struktúrát, és megakadályozzák a mag, a hálózati verem vagy a más portokon futó, nem kapcsolódó szolgáltatások elleni támadásokat.
Egyes terheléselosztók olyan mechanizmust biztosítanak, amellyel valami különlegeset lehet tenni abban az esetben, ha a teljes kiszolgáló háttérrendszere nem érhető el. Ez magában foglalhatja a tartalék kiegyenlítő rendszerre való átirányítást vagy a hibaüzenet megjelenítését.
Az is fontos, hogy a terheléselosztó ne váljon egyetlen hibaponttá. A terheléselosztókat általában magas rendelkezésre állásban valósítják meg , amelyek a perzisztencia munkameneteket is képesek replikálni, ha egy adott alkalmazáshoz szükséges. [egy]
A terheléselosztás egy alternatív módszere, amely nem feltétlenül igényel speciális gazdagép szoftvert vagy hardvert, az úgynevezett DNS robin round . Ennél a technikánál több IP-cím társítva ugyanahhoz a domain névhez ; az ügyfeleknek ki kell választaniuk egy szervert, amelyhez csatlakozni szeretnének. A dedikált terheléselosztó használatától eltérően ez a technika lehetővé teszi, hogy az ügyfelek több szerverrel rendelkezzenek. A technikának megvannak a maga előnyei és hátrányai, a DNS-kiszolgálók feletti vezérlés mértékétől és a szükséges terhelés részletességétől függően.
Egy másik, hatékonyabb módszer a DNS használatával történő terheléselosztáshoz a www.example.org aldomainként történő delegálása, amelyhez a zónát ugyanazok a kiszolgálók tartják karban, amelyek a webhelyet szolgálják ki. Ez a technika különösen jól működik ott, ahol az egyes szerverek földrajzilag szétszórva vannak az interneten. Például:
one.example.org A 192.0.2.1 two.example.org A 203.0.113.2 www.example.org NS one.example.org www.example.org NS two.example.orgA www.example.org zónafájlja azonban minden szerveren eltér, oly módon, hogy minden szerver eldönti, hogyan használja az IP-címet A-rekordként. Az egyzónás fájlkiszolgálón a www.example.org jelentésekhez:
@ egy 192.0.2.1A második szerveren ugyanaz a zónafájl tartalmazza:
@egy 203.0.113.2Így, amikor az első szerver leáll, a DNS nem válaszol, és a webszolgáltatás nem kap forgalmat. Ha az egyik kiszolgáló vonala túlterhelt, a megbízhatatlan DNS-szolgáltatás kevesebb http forgalmat biztosít a kiszolgáló eléréséhez. Ezenkívül a leggyorsabb DNS-válasz szinte mindig a legközelebbi szerver hálózatáról oldódik meg a földrajzilag érzékeny terheléselosztás miatt. A rövid TTL egy A-rekordhoz lehetővé teszi a forgalom gyors átirányítását, ha a szerver összeomlik. Figyelembe kell venni annak lehetőségét, hogy ez a technika azt eredményezheti, hogy az egyes kliensek egy munkamenet közepén válthatnak külön szerverek között.
A terheléselosztók sok ütemezési algoritmust használnak annak meghatározására, hogy melyik szerverre küldjön kérést. Az egyszerű algoritmusok közé tartozik a véletlenszerű kiválasztás vagy a körmérkőzés . A kifinomultabb terheléselosztók további tényezőket is figyelembe vehetnek, mint például, hogy melyik szerver jelentett terhelést, lassabb válaszidőket, fel/le állapotot (valamilyen lekérdezési megfigyeléssel meghatározva), aktív kapcsolatok számát, földrajzi elhelyezkedést, képességeket vagy mekkora forgalmat. nemrég nevezték ki.
A terheléselosztási szolgáltatás futtatásakor fontos kérdés, hogy hogyan kezeljük azokat az információkat, amelyeket egy felhasználói munkamenetben több kérés között kell tárolni. Ha ezeket az információkat helyileg egyetlen háttérkiszolgálón tárolják, akkor a különböző háttérkiszolgálóktól érkező további kérések nem fogják tudni megtalálni. Ez lehet a gyorsítótárban tárolt információ, amely újraszámítható, ebben az esetben egy másik háttérkiszolgálóhoz intézett terheléselosztási kérés megoldja a teljesítményproblémát.
Ideális esetben a terheléselosztó mögötti kiszolgálócsoportnak munkamenet-tudatosnak kell lennie, így ha egy kliens bármikor csatlakozik bármely kiszolgálóhoz, a felhasználó kommunikációjának előzményei egy adott szerverrel nem számítanak. Ez általában egy megosztott adatbázis vagy egy memórián belüli adatbázis-munkamenet, például a memcached segítségével érhető el .
A munkamenet-adat-probléma egyik alapvető megoldása az, hogy a felhasználói munkamenetben lévő összes kérést egymás után ugyanarra a szerverre küldjük. Ezt nevezik kitartásnak vagy ragadósságnak . Ennek a technológiának jelentős hátránya az automatikus feladatátvétel hiánya : ha a szerver leáll, a munkamenet-információk elérhetetlenné válnak, és minden munkamenet elveszik. Ugyanez a probléma általában a szerver központi adatbázisára is vonatkozik; még akkor is, ha a webszerverek "államtalanok" (államtalanok) és nem "tapadók" (ragadósak), a központi adatbázis (lásd alább).
A hozzárendelés egy adott szerverhez történhet a felhasználónéven, a kliens IP-címén , vagy lehet véletlenszerű is. Az ügyfél észlelt címének DHCP -ből , hálózati címfordításból és webproxyból eredő változásai miatt ez a módszer megbízhatatlan lehet. A terheléselosztónak emlékeznie kell a véletlenszerű munkákra, ami megterheli a tárolót. Ha a terheléselosztót kicserélik vagy leáll, ezek az információk elveszhetnek, és előfordulhat, hogy bizonyos idő elteltével vagy nagy terhelés esetén törölni kell a munkákat, hogy elkerülje a hozzárendelési táblázat számára rendelkezésre álló terület túllépését. A véletlenszerű hozzárendeléshez az is szükséges, hogy a kliensek támogassanak bizonyos beállításokat, ami problémát jelenthet, például ha a webböngésző letiltotta a cookie-k tárolását. A komplex terheléselosztók több perzisztencia módszert alkalmaznak, hogy elkerüljék bármelyik módszer hátrányait.
Egy másik megoldás a munkamenetadatok tárolása egy adatbázisban . Általánosságban elmondható, hogy ez rossz a teljesítmény szempontjából, mivel növeli az adatbázis terhelését: az adatbázis jobban használható olyan információk tárolására, amelyek kevésbé ingadozóak, mint a munkamenetadatok. Annak megelőzése érdekében, hogy az adatbázis egyetlen hibaponttá váljon, és a méretezhetőség javítása érdekében az adatbázisokat gyakran több gépen replikálják, és a terheléselosztást használják a terhelési index elosztására ezeken a replikákon. A Microsoft ASP.net State Server technológia egy példa az adatbázis-munkamenetre. A webfarm összes kiszolgálója munkamenetadatokat tárol a Master State Server kiszolgálón, és a farm bármely kiszolgálója lekérheti az adatokat.
Nagyon gyakori esetekben, amikor a kliens egy webböngésző, egyszerű, de hatékony módszer a munkamenetadatok tárolása magában a böngészőben. Ennek egyik módja a böngésző cookie -k , titkosított időbélyegek használata. Egy másik módszer az URL átírása. Általában a munkamenetadatok kliensen való tárolása az előnyben részesített megoldás: a terheléselosztó ezután szabadon választhat bármely szervert a kérés feldolgozására. Az állapotadatok feldolgozásának ez a módszere azonban nem megfelelő néhány összetett üzleti logikai forgatókönyv esetén, ahol a munkamenet állapota nagy rakomány, és nem lehetséges újraolvasni azt minden, a kiszolgálóhoz intézett kéréssel. Az URL-ek átírása komoly biztonsági problémákkal jár, mert a végfelhasználó könnyen módosíthatja a beküldött URL-eket, és így módosíthatja a munkamenet-folyamokat.
A perzisztens adatok tárolásának másik megoldása az, hogy minden adatblokkhoz egy nevet rendelünk, egy elosztott hash-táblázat segítségével pszeudo-véletlenszerűen hozzárendelünk egy nevet az elérhető kiszolgálók egyikéhez, majd tároljuk az adatblokkot a kijelölt szerveren.
A hardveres és szoftveres terheléselosztók különböző speciális jellemzőkkel rendelkezhetnek. A terheléselosztó fő jellemzője, hogy a bejövő kéréseket egy ütemezési algoritmus szerint képes elosztani több szerver között egy fürtben . Az alább felsorolt szállítóspecifikus tulajdonságok többsége:
A terheléselosztás hasznos lehet redundáns linkalkalmazásokban. Például egy vállalatnak több internetkapcsolata is lehet, amely hozzáférést biztosít a hálózathoz, ha az egyik kapcsolat nem működik. Hibabiztos rendszerekben ez azt jelentené, hogy az egyik hivatkozás normál használatra szolgál, a másik pedig csak akkor használatos, ha a fő hivatkozás meghibásodik .
A terheléselosztás használatával mindkét kapcsolat folyamatosan foglalt lehet. Az eszköz vagy program ellenőrzi az összes hivatkozás jelenlétét, és kiválasztja a csomagok küldésének útvonalát. Több hivatkozás egyidejű használata növeli a rendelkezésre álló sávszélességet.
Az IEEE szabvány, amely 2012 májusában hagyta jóvá az IEEE 802.1 rr szabványt [2] , a legtöbb könyvben a legrövidebb út (SCP) néven is ismert és dokumentálva. A KPC lehetővé teszi, hogy minden kapcsolat aktív legyen több azonos fontosságú útvonalon, gyorsabb konvergenciát biztosít, csökkentve az állásidőt, és megkönnyíti a terheléselosztás használatát mesh hálózatban (részben és/vagy teljesen csatlakoztatva), lehetővé téve a forgalom terheléselosztását az összes hálózati útvonalon. . [3] [4] A PPC-t úgy tervezték, hogy gyakorlatilag kiküszöbölje az emberi hibákat a beállítási folyamat során, és megőrzi a plug-and-play jellegét, amely az Ethernetet de facto protokollként hozza létre a második rétegben. [5]
Sok távközlési vállalat több útvonalat is használ a hálózatán vagy a külső hálózatokon keresztül. Összetett terheléseket használnak a forgalom egyik útvonalról a másikra való átváltására, hogy elkerüljék a hálózati torlódást egy adott kapcsolaton, és néha minimalizálják a külső hálózatokon keresztüli átvitel költségeit vagy javítsák a hálózat megbízhatóságát.
A hálózati terheléselosztás használatának másik módja a tevékenységfigyelés. A terheléselosztók segítségével hatalmas adatfolyamokat oszthatnak fel több alfolyamra, és több hálózati elemzőt használhatnak, ahol mindegyik kiolvassa az eredeti adatok egy részét. Ez nagyon hasznos a gyors hálózatok, például a 10 GB-os vagy az STM64 portok figyeléséhez, ahol a bonyolult adatfeldolgozás vezetéksebességgel nem lehetséges.
A terheléselosztást gyakran használják a hibatűrés megvalósítására - a szolgáltatás folytatása egy vagy több összetevőjének meghibásodása után. Az összetevőket folyamatosan felügyelik (például a webszervereket ismert oldalak mintavételezésével lehet vezérelni), és amikor az egyik nem válaszol, a terheléselosztó értesítést kap, és többé nem küld forgalmat az adott szerverre. Amikor az összetevő újra online állapotba kerül, a terheléselosztó újra elkezdi irányítani a forgalmat. Ahhoz, hogy ez működjön, legalább egy komponensnek meg kell haladnia a szolgáltatás kapacitását (N+1 foglalás). Ez sokkal olcsóbb és rugalmasabb, mint a feladatátvételi megközelítések, amelyekben minden élő komponens egyetlen komponensű biztonsági másolattal párosul, amely meghibásodás esetén átveszi az irányítást (kettős moduláris redundancia). Egyes RAID - rendszerek forró tartalékként is használhatók hasonló hatás elérése érdekében.