Tartalomjegyzék[Elrejt][Előadás]
Soha nem vették olyan komolyan az alkalmazások elérhetőségét, mint manapság, amikor az alkalmazásokat nem pusztán kommunikációra használjuk, legyen az személyes vagy szakmai, és amikor az alkalmazások az üzlet.
Azok az alkalmazások, amelyek nincsenek folyamatosan online, vagy instabilok, elveszítik felhasználójukat és relevanciájukat, és végül elavulnak. Villámgyorsan történt. Mivel az internet soha nem alszik, és a nap 24 órájában, a hét 7 napján működik, ugyanezt az elképzelést kell alkalmazni az alkalmazásokra is.
A méretezhetőség kritikus fontosságú ehhez és az alkalmazások elérhetőségének biztosításához. A terheléselosztás a rendelkezésre állás biztosításának egyik legfontosabb összetevője. Sokan még mindig azt hiszik, hogy a terheléselosztás egyszerű szkripttel is megvalósítható.
Ez azonban nem így van. Egyedül hozzáférést biztosít a programokhoz a világ minden tájáról – bármikor és bármilyen eszközről.
Ebben a bejegyzésben részletesen megvizsgáljuk a terheléselosztást, annak algoritmusait és többek között a mikroszolgáltatásokhoz való viszonyát. Kezdjük!
Mi az a terheléselosztás?
Ahogy nő az igény egy webhely vagy üzleti alkalmazás iránt, hamarosan egyetlen szerver sem lesz képes kezelni a teljes terhelést. A szervezetek a munkaterhelést számos szerver között osztják el, hogy kielégítsék az igényeket. Ez a „terheléselosztás” néven ismert módszer megóvja egyetlen szervert a túlterheltségtől, ami lelassulhat, a kérések eldobásához vagy akár összeomláshoz vezethet.
A terheléselosztás egyenlően osztja el a hálózati forgalmat az erőforrás-túlterhelés miatti meghibásodás elkerülése érdekében. Az alkalmazások, webhelyek, adatbázisok és más számítógépes erőforrások jobban teljesítenek, és jobban elérhetők ezzel a módszerrel. Segíti a felhasználói kérések megfelelő és időben történő feldolgozását is.
A felhasználó szemszögéből a terheléselosztás láthatatlan közvetítőként szolgál egy kliens és egy szervercsoport között, biztosítva, hogy a csatlakozási kérések ne kerüljenek el. Az alkalmazások, webhelyek, adatbázisok és online szolgáltatások nagy valószínűséggel összeomlanának, ha a kereslet túl nagy lenne a terheléselosztás nélkül.
Egyszerre több százezer felhasználói kérés küldhető egyetlen nagy forgalmú webhelyre. Több szerverre van szükség ahhoz, hogy a weboldalakat megfelelően feltöltsék a kért tartalommal, például szöveggel, képekkel, videóval és hangfolyammal. A terheléselosztást általában nagy forgalmú webhely-kiszolgálófarmokban, valamint DNS-kiszolgálókban, adatbázisokban és fájlátviteli protokoll (FTP) webhelyeken alkalmazzák.
Ha egyetlen szerver túlterhelt, az rosszul működhet, vagy akár össze is omolhat. A terheléselosztók csökkentik az állásidő esélyét azáltal, hogy a felhasználói kéréseket egyenletesen osztják el a kiszolgálók között. Ha a csoport egyik kiszolgálója meghibásodik, a forgalom a csoport többi kiszolgálójára kerül átirányításra. A terheléselosztó automatikusan hozzáadja az új kiszolgálókat a forgalomelosztási folyamat során, amikor hozzáadják őket a kiszolgálókészlethez.
Hogyan működik a terheléselosztás?
A következőképpen működik:
- Amikor egy ügyfél kérést kap, például böngészőn vagy alkalmazáson keresztül, megpróbál csatlakozni a szerverhez.
- Amikor egy terheléselosztó kérést kap, az algoritmus (vagy farm) által megállapított minták alapján egy kiszolgálócsoport egyik kiszolgálójához irányítja.
- A szerver fogadja a csatlakozási kérelmet, és a terheléselosztón keresztül válaszol az ügyfélnek.
- Amikor a terheléselosztó megkapja a választ, az ügyfél IP-címét egyezteti a kiválasztott szerver IP-címével. Ezt követően a válasz a csomaggal együtt kerül továbbításra.
- Az SSL-letöltés az adatok visszafejtésének folyamata a Security Socket Layer titkosítási protokoll használatával, így a szervereknek nem kell ezt tenniük.
- Az eljárást addig ismételjük, amíg az ülés véget nem ér.
Terheléselosztási módszerek
Annak kiválasztásához, hogy a kiszolgálófarm kiszolgálói közül melyik kapja meg a következő kérést, minden terheléselosztási technika egy kritériumkészletet használ. Öt tipikus megközelítés létezik a terheléselosztáshoz:
- Round Robin: Ez az alapértelmezett megközelítés, és úgy működik, ahogy hangzik. A terheléselosztó a kéréseket rotációs mintában osztja el, kezdve a csoport első kiszolgálójával, és lefelé haladva az aljára, ahol ismét meghívásra vár. Ez a módszer biztosítja, hogy minden szerver nagyjából ugyanannyi kapcsolatot kezel.
- Súlyozott Round Robin: Ez a megközelítés minden szerverhez hozzárendel egy súlyt (vagy preferenciát), amely általában arányos a kapacitásával. Minél több kérést kap egy szerver, annál nagyobb a súlya. Például egy kettős súlyú kiszolgáló kétszer annyi kérést kap, mint egy egy súlyú kiszolgáló.
- Sticky Session: Ez a munkamenet-perzisztencia néven is ismert megközelítés bizonyos ügyfeleket és kiszolgálókat kapcsol össze egy munkamenet időtartama alatt. A kapcsolat létrehozásához a terheléselosztó cookie-t vagy a felhasználó IP-címét használja a felhasználói attribútum azonosítására. A kapcsolat létrejötte után a felhasználó kérései ugyanahhoz a szerverhez kerülnek a munkamenet végéig. Ez optimalizálja a hálózati erőforrásokat, miközben javítja a felhasználói élményt.
- Legkevesebb kapcsolatok: Ez a stratégia azt feltételezi, hogy minden kérés azonos szerverterhelést eredményez. Ennek eredményeként a legkevesebb kéréssel rendelkező szerver kapja meg a következő kérést.
- IP hash: Ez az algoritmus egyedi hash kulcsot hoz létre az ügyfél és a szerver forrás- és cél IP-címe alapján. A kulcs a kérés irányítására szolgál, és lehetővé teszi a megszakadt kapcsolat újraindítását ugyanazzal a szerverrel.
Hardver vs. Szoftver terheléselosztók
Hardveres terheléselosztó
A fizikai hardver, például egy készülék, hardveres terheléselosztókat alkot. Ezek olyan tényezőktől függően irányítják a forgalmat a szerverekre, mint a meglévő kapcsolatok száma, a processzorhasználat és a szerver teljesítménye. A hardveres terheléselosztók saját firmware-rel rendelkeznek, amelyet karban kell tartani és frissíteni kell, ha új verziók és biztonsági javítások válnak elérhetővé.
A hardveres terheléselosztók gyakran nagyobb teljesítményt és vezérlést biztosítanak, valamint a képességek szélesebb körét, például a Kerberos hitelesítést és az SSL hardveres gyorsítást, de bizonyos szintű felügyeleti és karbantartási szakértelmet igényelnek. Mivel a hardveres terheléselosztók kevésbé rugalmasak és skálázhatók, mint a szoftveres terheléselosztók, hajlamosak a hardveres terheléselosztók túlzott ellátására.
Szoftver Load Balancer
A szoftveres terheléselosztókat általában könnyebb beállítani, mint a hardveres társaikat. Költséghatékonyabbak és alkalmazkodóbbak is, és jól együttműködnek szoftverfejlesztő környezetekkel. A szoftveres módszer lehetővé teszi a terheléselosztó testreszabását a környezet pontos követelményeihez. A megnövekedett rugalmasság a terheléselosztó beállítására fordított további idő rovására mehet.
A szoftveres kiegyenlítők nagyobb rugalmasságot biztosítanak a módosítások és frissítések elvégzésében, mint a hardveresek, amelyek zártabb megközelítésűek. Az előre csomagolt virtuális gépek szoftveres terheléselosztóként (VM) használhatók. A virtuális gépek némi beállítási időt takarítanak meg, de előfordulhat, hogy nem rendelkeznek a hardveres társaikban elérhető összes funkcióval.
Egyszerű terheléselosztás
Ehhez a Spring Cloud könyvtárat fogjuk használni alkalmazásokat készíteni amelyek terheléselegyensúlyozott módon csatlakoznak más alkalmazásokhoz. A távoli szolgáltatási kérelmek feldolgozása során könnyedén elkészíthetjük a terheléselosztást, bármilyen technikával, amilyet csak akarunk. Tekintsük a következő kódot példaként. Kezdjük egy alapvető szerveralkalmazással.
A kiszolgálónak csak egy HTTP-végpontja lesz, és több esetben is működik. Ezután létrehozunk egy ügyfélalkalmazást, amely a Load Balancer segítségével osztja el a kéréseket több szerverpéldány között.
szerver
Egy alapelvvel kezdjük Tavaszi bakancs alkalmazás példaszerverünkhöz:
Kezdésként beillesztünk egy példányazonosító nevű, testreszabható változót. Ez segít megkülönböztetni számos működő példányt. Ezt követően egyetlen HTTP GET-végpontot hozunk létre, amely üzenetet és példányazonosítót ad vissza.
Az alapértelmezett 1-es azonosítójú példány a 8080-as porton fog működni. Csak néhány programparamétert kell hozzáadnunk egy második példány indításához:
Vásárló
Most nézzük meg az ügyfélkódot. Itt jön be a Load Balancer, tehát kezdjük azzal, hogy beépítjük az alkalmazásunkba:
Ezt követően kifejlesztjük a ServiceInstanceListSupplier megvalósítását. Ez az egyik legfontosabb interfész a Load Balancerben. Meghatározza, hogyan találjuk meg az elérhető szolgáltatáspéldányokat.
Példaszerverünk két különálló példányát a példaalkalmazásunkban kódoljuk. Ugyanazon a rendszeren futnak, de külön portokat használnak:
Hozzon létre egy LoadBalancerConfiguration osztályt most:
Ennek az osztálynak egyetlen célja van: létrehoz egy terheléselosztó webkliens-készítőt a távoli kérésekhez. Annotációnk a szolgáltatás fiktív elnevezését alkalmazza.
Ez annak a ténynek köszönhető, hogy valószínűleg nem fogjuk tudni előre a futtatott példányok pontos gazdagépneveit és portjait. Ennek eredményeként egy fiktív nevet használunk helyőrzőként, és a keretrendszer lecseréli a tényleges információkat, amikor kiválaszt egy futó példányt.
Ezután készítsünk egy konfigurációs osztályt, amelyet a szolgáltatáspéldány-kínálatunk példányosítására használunk. Vegye figyelembe, hogy ugyanazt az álnevet használjuk, mint korábban:
Most már elkészíthetjük a valódi kliens alkalmazást. Küldjünk 10 lekérdezést a mintaszervernek a korábbi WebClient komponens használatával:
A kimenetből láthatjuk, hogy terheléselosztást végezünk két különálló példány között:
Terheléselosztás a mikroszolgáltatásokban
A mikroszolgáltatási architektúrát számos vállalat, például a Netflix és az Amazon használja üzleti alkalmazások fejlesztésére, lazán összekapcsolt szolgáltatások halmazaként. A bonyolult alkalmazások túlméretezett és folyamatos szállítása csak két oka annak, hogy erre az elosztott, lazán összekapcsolt architektúrára váltsunk.
Ezek a vállalatok csapatai Agilis és DevOps stratégiákat vezettek be annak érdekében, hogy a hagyományos módszereknél gyorsabban és alacsonyabb meghibásodási arány mellett készítsenek alkalmazásokat. Meg kell azonban találnia az egyensúlyt az elosztott architektúra összetettsége és az alkalmazás igényei, méretezési követelményei és a piacra jutási idő korlátai között.
Az alkalmazáskézbesítés-vezérlők (ADC-k) oly sok éve kritikus szerepet játszottak a helyszíni vagy felhőben tárolt vállalati alkalmazások szolgáltatási szintű követelményeinek teljesítésében. A mikroszolgáltatás-alapú alkalmazást használó ügyfélnek nem kell tudnia az azt biztosító példányokról ahhoz, hogy az ügyfél és a mikroszolgáltatások egymástól függetlenül növekedhessen.
Pontosan ez a fordított proxy vagy terheléselosztó által biztosított szétválasztás. Ismét a terheléselosztás a megoldás annak biztosítására, hogy a mikroszolgáltatások kezelni tudják a keresletet, a biztonságot és a rendelkezésre állást.
Ha kombinálja a hagyományos észak-déli terheléselosztást a kliens- és mikroszolgáltatás-alapú alkalmazások között a kelet-nyugati telepítéssel a horizontális méretezhetőség érdekében, jelentős lökést kap. A cél az IT által megkívánt biztonságos és szabályozott környezet fenntartása anélkül, hogy a fejlesztési agilitás, ill DevOps automatizálás követelményeket.
Előnyök
A terheléselosztás különféle előnyökkel jár azáltal, hogy javítja az erőforrás-kihasználást, az adatszolgáltatást és a válaszidőt a nagy forgalmú webhelyek és alkalmazások, valamint a nagyszámú lekérdezést fogadó adatbázisok esetében. A terheléselosztás biztosítja a felhasználói kérések gyors és megfelelő teljesítését nagy forgalmú forgatókönyvek esetén.
Megkímélik a felhasználókat a lassú programokkal és erőforrásokkal való bánásmódtól. A terheléselosztás segít elkerülni az állásidőt és egyszerűsíteni a biztonságot, csökkentve a termelékenység és a bevétel elvesztésének kockázatát a vállalat számára.
- A terheléselosztás rugalmasságot biztosít a kiszolgálók igény szerint történő hozzáadásához és eltávolításához, amellett, hogy a forgalmat optimális hatékonysággal kezeli. Mivel a karbantartás során a forgalmat más szerverekre irányítják át, a szerver karbantartása is megvalósítható a felhasználók megzavarása nélkül.
- A terheléselosztás beépített redundanciát biztosít azáltal, hogy felosztja a forgalmat a kiszolgálók között. Ha valamelyik meghibásodik, azonnal átirányíthatja a terhelést más kiszolgálókra, így minimálisra csökkentheti a felhasználókra gyakorolt hatást.
- Ha egy alkalmazás vagy webhely használata növekszik, a megnövekedett forgalom ronthatja a teljesítményét, ha nem kezelik hatékonyan. A terheléselosztással valódi vagy virtuális szervert adhat hozzá a kereslet kielégítéséhez a szolgáltatás megszakítása nélkül. A terheléselosztó azonosítja az új szervereket, amint azok online állapotba kerülnek, és könnyedén beépíti őket a működésbe. Ez a módszer előnyösebb, ha egy webhelyet egy túlterhelt szerverről egy újra helyeznek át, ami gyakran jár némi leállással.
Következtetés
A terheléselosztás a modern, hibatűrő rendszerek kritikus eleme. Egyszerűen létrehozhatunk olyan alkalmazásokat, amelyek a kéréseket több szolgáltatáspéldányhoz osztják el, különféle terheléselosztási megközelítésekkel. A vállalkozásoknak támogatniuk kell a bonyolult informatikai rendszereket az alkalmazások biztonságos kiszolgálása érdekében.
A tartományok közötti mikroszolgáltatások konfigurálása, telepítése és karbantartása hibákra hajlamos, költséges és időigényes lehet. Az IT-nek olyan automatizálási, láthatósági, elemzési és hangszerelési bevált gyakorlatokat és technológiákat kell alkalmaznia, amelyek kompatibilisek az agilis és DevOps folyamataikkal, hogy megkönnyítsék ezeknek a mikroszolgáltatásoknak a beállítását és karbantartását.
Hagy egy Válaszol