Terheléselosztás az Openstack-ban (2. rész)

A előző cikkben Beszéltünk a Watcher használatára tett kísérletekről, és bemutattuk a tesztelési jelentést. Az ilyen teszteket időről időre elvégezzük a nagyvállalati vagy szolgáltatói felhő kritikus funkcióinak egyensúlyozására.

A megoldandó feladat magas bonyolultsága miatt valószínűleg több cikkre lesz szükség a projektünk leírásához. Ma közzétesszük a ciklus második cikkét, amely a felhőben lévő virtuális gépek egyensúlyozásának szentel.

Néhány terminológia

A VmWare bevezette a DRS (Distributed Resource Scheduler) eszközt a virtuális környezetükben a terhelés egyensúlyozására.

Ahogy írja searchvmware.techtarget.com/definition/VMware-DRS
„A VMware DRS (Elosztott erőforrás-tervező) egy olyan eszköz, amely a számítási terheket a rendelkezésre álló erőforrásokkal egyensúlyozza a virtuális környezetben. Ez az eszköz része a VMware Infrastructure nevű virtualizációs csomagnak.

A VMware DRS segítségével a felhasználók meghatározzák a fizikai erőforrások elosztásának szabályait a virtuális gépek (VM) között. Az eszköz manuális vagy automatikus vezérlésre állítható be. A VMware erőforrásai könnyen hozzáadhatók, eltávolíthatók vagy átszervezhetők. Ha szükséges, az erőforrás-poolok elkülöníthetők különböző üzleti egységek között. Ha a terhelés egy vagy több virtuális gépen hirtelen változik, a VMware DRS újraelosztja a virtuális gépeket a fizikai szerverek között. Ha az összes terhelés csökken, egyes fizikai szerverek ideiglenesen leállíthatók, és a terhelés konszolidálható.

Miért szükséges az egyensúlyozás?


Véleményünk szerint a DRS kötelező funkció a felhőben, bár ez nem jelenti azt, hogy a DRS-t mindig és mindenhol használni kell. A felhő céljától és igényeitől függően különböző követelmények lehetnek a DRS-re és az egyensúlyozási módszerekre. Lehet, hogy vannak olyan helyzetek, amikor az egyensúlyozás egyáltalán nem szükséges. Vagy akár káros is lehet.

Ahhoz, hogy jobban érthető legyen, hogy hol és milyen ügyfeleknek van szüksége DRS-re, nézzük meg a céljaikat és feladataikat. A felhők nyilvános és magánfelhőkre oszthatók. Íme a legfőbb különbségek e felhők és az ügyfelek céljai között.

Magánfelhők / Nagyvállalati ügyfelek
Nyilvános felhők / Közép- és kisvállalkozások, magánszemélyek

Az üzemeltető fő kritériuma és célja
Megbízható szolgáltatás vagy termék biztosítása
A szolgáltatások költségeinek csökkentése a versenyképes piacon

A szolgáltatás követelményei
Megbízhatóság minden szinten és a rendszer minden elemében

Garantált teljesítmény

A virtuális gépek prioritása több kategóriára 

Adatok informatikai és fizikai biztonsága

SLA és 24 órás támogatás
A szolgáltatás megszerzésének maximális egyszerűsége

Viszonylag egyszerű szolgáltatások

Az adatokért a kliens felelős

A virtuális gépek prioritása nem szükséges

Informatikai biztonság az alapvető szolgáltatások szintjén, a felelősség a klienst terheli

Lehetnek leállások

Nincs SLA, a minőség nem garantált

Támogatás e-mailben

A biztonsági mentés nem kötelező

Az ügyfél sajátosságai
Nagyon széles spektrumú alkalmazások.

Örökölt alkalmazások a cégen belül.

Bonyolult, testreszabott architektúrák minden egyes ügyfél számára.

Affinitás szabályok.

A szoftver folyamatos működése 7x24 módban. 

Azonnali biztonsági mentési eszközök.

Előrejelezhető ciklikus terhelés a kliens részéről.
Alapvető alkalmazások – hálózat egyensúlyozás, Apache, WEB, VPN, SQL

Az alkalmazás bizonyos időre leállítható

A virtuális gépek szabad elosztása a felhőben engedélyezett

A biztonsági mentés a kliens feladata

Előrejelezhető átlagos terhelés nagy számú ügyfél esetén.

Következmények az architektúrára
Geoklaszterezés

Központosított vagy elosztott tárolórendszer

Fenntartható SRK
Helyi adatraktározás a számítógépes csomópontokon

Az egyensúlyozás céljai
Terhelés egyenletes elosztása

Maximális alkalmazás-reakcióidő 

Minimális késlekedés az egyensúlyozás során

Csak nyilvánvaló szükségesség esetén történik az egyensúlyozás

Egyes eszközök kivonása karbantartásra
A szolgáltatás és az üzemeltető költségeinek csökkentése 

Egyes erőforrások leállítása alacsony terheltség esetén

Villamosenergia-megtakarítás

A személyzet költségeinek csökkentése

A következő következtetéseket vonjuk le magunk számára:

Privát felhők esetén, amelyeket nagy vállalati megrendelőknek kínálnak, a DRS alkalmazható a következő korlátozások figyelembevételével:

  • informatikai biztonság és az affinitás szabályainak figyelembe vétele az egyensúlyozás során;
  • elbírálva, hogy elég erőforrás álljon rendelkezésre vészhelyzet esetén;
  • a virtuális gépek adatai egy központosított vagy elosztott tárolórendszerben találhatók;
  • az adminisztrációs, biztonsági mentési és terheléselosztási eljárások időbeli eltolása;
  • terheléselosztás csak a kliens gazdagépeinek aggregátumán belül;
  • terheléselosztás csak jelentős terheléseltolódás esetén, a legbiztonságosabb és leghatékonyabb virtuális gépek migrációja (a migráció akár kudarcot is vallhat);
  • terheléselosztás a 'nyugodt' virtuális gépek figyelembevételével (a 'zajos' virtuális gépek migrációja nagyon hosszú ideig tarthat);
  • terheléselosztás a 'költség' figyelembevételével - terhelés a tárolórendszeren és a hálózaton (nagy ügyfelek egyedi architektúrái esetén);
  • terheléselosztás a virtuális gépek egyedi viselkedési jellemzői figyelembevételével;
  • terheléselosztás lehetőleg munkaidőn kívül (éjjel, hétvégén, ünnepeken).

Nyilvános felhők esetén, amelyek kis megrendelőknek nyújtanak szolgáltatásokat, a DRS sokkal gyakrabban alkalmazható, kibővített lehetőségekkel:

  • az információbiztonsági és affinitási szabályok hiánya;
  • terheléselosztás a felhőn belül;
  • terheléselosztás bármilyen ésszerű időben;
  • terheléselosztás bármely virtuális gépre;
  • terheléselosztás a 'zajos' virtuális gépek esetén (hogy ne zavarja a többieket);
  • a virtuális gépek adatai gyakran helyi lemezeken találhatóak;
  • a tárolórendszer és a hálózat átlagos teljesítményének figyelembevételével (a felhő architektúrája egységes);
  • terheléselosztás általános szabályok és a folyamatközpontú statisztikák alapján.

A probléma összetettsége

A terheléselosztás összetettsége abban rejlik, hogy a DRS-nek sok bizonytalan tényezővel kell foglalkoznia:

  • az ügyfelek informatikai rendszereinek felhasználói viselkedése;
  • az informatikai rendszerek szervereinek működési algoritmusai;
  • az adatbázis-kezelő szerverek viselkedése;
  • a számítási erőforrásokra, tárolórendszerekre és hálózatra vonatkozó terhelések;
  • a szerverek közötti kölcsönhatás a felhő erőforrásaiért folytatott verseny során.

A virtuális alkalmazásszerverek és adatbázisok nagy számú terhelése az erőforrásokra időben terjed, a következmények előre nem látható módon jelentkezhetnek és egymásra rakódhatnak, kiszámíthatatlan hatással, kiszámíthatatlan időn belül. Még a viszonylag egyszerű folyamatok (például egy motor, vagy a ház vízmelegítő rendszerének irányítása) kezeléséhez is összetett proporcionális-integráló-differenciáló visszajelzési algoritmusokat kell alkalmazni.

Terheléselosztás az Openstack-ban (2. rész)

Feladatunk sokkal bonyolultabb, és fennáll a kockázata, hogy a rendszer ésszerű időn belül nem tudja a terheléselosztást a stabil értékekre végezni, még akkor sem, ha nincsenek külső hatások a felhasználók részéről.

Terheléselosztás az Openstack-ban (2. rész)

Fejlesztéseink története

A probléma megoldása érdekében úgy döntöttünk, hogy nem kezdünk mindent elölről, hanem a meglévő tapasztalatokra támaszkodva működünk együtt a területen tapasztalattal rendelkező szakemberekkel. Szerencsére a probléma megértése teljes mértékben egybeesett velünk.

1. lépés

Olyan rendszert használtunk, amely a neurális hálózatok technológiáján alapul, és próbáltuk optimalizálni erőforrásainkat ezzel.

A szakasz érdekessége az új technológia kipróbálásában rejlett, míg fontossága abban, hogy nem szokványos megközelítést alkalmaztunk a probléma megoldására, ahol egyébként a standard megközelítések szinte kimerültek.

Elindítottuk a rendszert, és tényleg működésbe lépett a terheléselosztás. A felhőnk mérete nem tette lehetővé, hogy optimista eredményeket érjünk el, amiket a fejlesztők ígértek, de látható volt, hogy a terheléselosztás működik.

Ebben a folyamatban voltak komoly korlátaink:

  • A neurális háló tanítása érdekében a virtuális gépeknek jelentős változtatások nélkül kell működniük hetekig vagy hónapokig.
  • Az algoritmus az korábbi "történeti" adatokra épülő optimalizálásra van tervezve.
  • A neurális háló tanulásához elegendő mennyiségű adat és számítási erőforrás szükséges.
  • Az optimalizálás és terheléselosztás viszonylag ritkán – néhány óránként végezhető, ami nyilvánvalóan nem elegendő.

2. lépés

Mivel az állapotunk nem volt kielégítő, úgy döntöttünk, hogy módosítjuk a rendszert, és ehhez meg kell válaszolnunk a fő kérdést – kinek készítjük ezt?

Elsődlegesen – vállalati ügyfeleknek. Tehát olyan rendszerre van szükségünk, amely gyorsan működik, azokkal a vállalati korlátokkal, amelyek csak megkönnyítik a megvalósítást.

A második kérdés – mit értsünk „gyorsan” alatt? Rövid viták után úgy döntöttünk, hogy a 5-10 perces válaszidővel érdemes kiindulni, hogy a rövid távú ugrások ne indítsák el a rendszert rezonanciába.

Harmadik kérdés – milyen méretű szerverek kiegyenlítendő mennyiségét válasszuk ki?
Ez a kérdés magától megoldódott. Általában a kliensek nem teszik túl nagyra a szerveraggregátumokat, és ez összhangban van a cikk ajánlásaival, miszerint 30-40 szerverre érdemes korlátozni az aggregátumokat.

Ezenkívül a szerverek tömbjének szegmentálásával egyszerűsítjük a terheléselosztó algoritmus feladatát.

Negyedik kérdés – mennyire alkalmas számunkra a neurális hálózat a hosszú tanulási folyamatával és a ritka egyensúlyozásokkal? Döntöttünk arról, hogy lemondunk róla, és egyszerűbb operatív algoritmusok mellett tettük le a voksunkat, hogy másodpercek alatt eredményt kapjunk.

Terheléselosztás az Openstack-ban (2. rész)

A rendszerről, amely ilyen algoritmusokat használ, és az azokkal kapcsolatos hátrányokról itt tájékozódhat. itt

Megvalósítottuk és elindítottuk ezt a rendszert, és biztató eredményeket kaptunk – most rendszeresen elemzi a felhő terhelését, és javaslatokat ad a virtuális gépek áthelyezésére, amelyek nagyrészt helyesek. Még most is látszik, hogy 10-15%-os erőforrás-kibocsátást érhetünk el új virtuális gépek számára, miközben javul a meglévők teljesítménye.

Terheléselosztás az Openstack-ban (2. rész)

A RAM vagy CPU egyensúlytalanságának észlelésekor a rendszer parancsokat ad a Tionix ütemezőnek a szükséges virtuális gépek élő migrációjának végrehajtására. A megfigyelőrendszerből látható, hogy a virtuális gép egyik (felső) gazdagépről a másikra (alsó) költözött, és felszabadította a memóriát a felső gazdagépen (sárga körökkel kiemelve), miközben azt az alsó gazdagépen foglalta el (fehér körökkel kiemelve).

Jelenleg arra törekszünk, hogy pontosabban felmérjük a folyamatban lévő algoritmus hatékonyságát, és megpróbáljuk megtalálni benne a lehetséges hibákat.

3. lépés

Úgy tűnik, ezen lehetne pihenni, várni a bizonyított hatékonyságra, és lezárni a témát.
De a következő nyilvánvaló optimalizálási lehetőségek arra ösztönöznek minket, hogy új szakaszra lépjünk.

  1. A statisztika például itt és itt azt mutatja, hogy a kétrészes és négy részes rendszerek teljesítménye lényegesen alacsonyabb az egyrészesekénél. Ezért minden felhasználó sokkal kisebb teljesítményt kap a többszörös rendszerekben vásárolt CPU, RAM, SSD, LAN, FC eszközöktől, összehasonlítva az egyrészesekkel.
  2. Maguk az erőforrás-ütemezők súlyos hibákkal dolgozhatnak, ez pedig az egyik cikk erről a témáról.
  3. Az Intel és az AMD által ajánlott RAM- és cache-monitoring technológiák lehetővé teszik a virtuális gépek viselkedésének tanulmányozását és elhelyezésüket úgy, hogy a 'zajos' szomszédok ne zavarják a 'csendes' virtuális gépeket.
  4. A paraméterek halmazának bővítése (hálózat, tárolórendszer, virtuális gép prioritása, migrációs költség, a migrációra való felkészültsége).

Összesen

Munkánk eredményeként a terheléselosztó algoritmusok tökéletesítésében egyértelmű következtetést vontunk le: a modern algoritmusok jelentős optimalizációt (25-30%) érhetnek el az adatközpontok erőforrásaiban és egyúttal javíthatják a szolgáltatás minőségét.

A neurális hálózatokon alapuló algoritmus kétségtelenül érdekes, de további fejlesztést igénylő megoldás, és a meglévő korlátok miatt nem alkalmas az ilyen feladatok megoldására a magánfelhők jellegzetes volumenein. Ugyanakkor a jelentős méretű nyilvános felhőkben az algoritmus jónak bizonyult.

Részletesebben a processzorok, ütemezők és magas szintű terheléselosztás lehetőségeiről a következő cikkekben fogunk beszélni.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster