Hogyan teljesítenek a felhős szerverek terhelés alatt?

Címkék

Egy ideje már fut a https://sparecores.com oldal, amelyen a felhős erőforrásokat (compute, storage, network) próbáljuk egységes formában, összehasonlíthatóan begyűjteni, illetve lekérdezhetővé tenni. Jelenleg az AWS, Azure, GCP és a Hetzner (cloud) adatai szerepelnek az oldalon.

Az adatbázis nem csak API-okon lekérdezhető adatokból áll, hanem ténylegesen el is indítjuk a gépeket, így azokról olyan információkat is ki tudunk nyerni, amelyeket máshonnan nem lehet beszerezni.

Az adatgyűjtés mellett különféle teljesítményméréseket is végzünk, amelyek szintén bekerülnek a publikált adatok közé, ezeket API-on, adatbázisból, illetve a weben is meg lehet találni.

Nemrég végigmértük a gépek többmagos teljesítményét, illetve azok változását is a terhelés függvényében. Ennek kapcsán született egy cikk, amely azt próbálja körbejárni, hogy milyen hatásokkal kell megküzdenünk, amikor azt szeretnénk tudni, hogyan változik a bérelt erőforrásunk teljesítménye a (többmagos) terhelés függvényében.

A cikk itt érhető el: https://sparecores.com/article/multi-core-scalability

Hozzászólások

Izé... eddigi tapasztalataim szerint az a helyzet, hogy a GCP, AWS vagy Azure között úgyis az ökoszisztéma és a cloud engineer szava dönt, a Hetzner meg teljesen más ligában focizik.

Hozzátenném, hogy a Hetzner egy ideig jó volt, de az utóbbi fél évben VPS kapcsán kicsit elkurvultak, amikor csinálsz egy új instance, akkor minden fasza, kiszalad a világból, aztán ~ egy-két hét után azt látod, hogy picsalassú lesz, ilyenkor kérsz másik plan, akkor ismét jó egy jó darabig, aztán megint belassul, szóval az, hogy frissen mit tud, az sajnos jelenleg nem sokat számít... :/

Jó az irány, de a Hetzner mellé kellene leginkább a többi olcsó, mint Vultr, DO, Hostinger, és társai.

Izé... eddigi tapasztalataim szerint az a helyzet, hogy a GCP, AWS vagy Azure között úgyis az ökoszisztéma és a cloud engineer szava dönt, a Hetzner meg teljesen más ligában focizik.

Nekem pár hete (hónapja?) már szembe jött, szeretem.

Abban általánosságban véve igazad van, hogy a "nagyok", illetve a "kicsik" közt jellemzően nem úgy döntesz, hogy hol olcsóbb, vagy jobb az ár/teljesítmény (bár pld. nekünk volt egy projektünk, ahol az volt az elvárás, hogy egy queue-ba beledobálhassanak "darálós" jobokat, és azt lehetőleg minél hatékonyabban futtassuk, mindegy, hol), hanem általában már adott, és/vagy az egyéb szolgáltatások/kiépült infra/tudás döntik el.

De ami ebben igazán fasza, az az, hogy ha AWS-only vagy, ott is össze tudod hasonlítani a gépeket. Az egyik ügyfelünknél (AWS) pld. azt látjuk, hogy amikor instance-ot kell választaniuk, megnézik a vCPU/memóriát (nekik kb. ez számít), és mivel mindig is azt használták, beállítják a c/m5-öt, miközben az adott terhelésre (memória/CPU load) bőven lenne jobb instance is.
A cloudban is megvannak a "maradiak", akik TF-mal felhúzzák az infrát, aztán ott rohad évekig a pazarló instance, nagyívben tesznek rá, hogy túllőttek a méretezésnél, vagy feleslegesen drágát raktak be. 

Sokszor a cikkben előhozott dolgokkal sincsenek tisztában, és halál komolyan képesek azt mondani ott dolgozó arcok, hogy ha 16 vCPU-d van, akkor 16 CPU-d van.

Na nekik be lehet dobni egy ilyen oldalt, és el lehet magyarázni, hogy mit is látnak:

https://sparecores.com/compare?instances=W3sidmVuZG9yIjoiYXdzIiwic2Vydm…

Szerintem kurva hasznos.

Ezeknek a "régi instance-on ragadásoknak" gyakori praktikus oka, hogy az újabb instance type nem minden régióban és AZ-ben érhető el. Kellemetlen, amikor a VPC-d fel van setupolva mondjuk régiónként 2-3 AZ-ra (nagyobb régiókban van összesen mondjuk 6 AZ), és abból 1 vagy 2-n hiányzik az újabb type. Ilyenkor agyrém tud lenni, hogy az IaC-ban megoldjad és karbantartsd a kivételeket. Másrészt az instance-onkénti teljesítmény így elég eltérő lehet, ami egy ALB mögött elég kellemetlen tud lenni. Vagy mondjuk az alkalmazásodat perf teszteled az újabb instance type-on, de 1-2 régióban még a régi van (vagy fordítva).

Nyilván az m5/c5-re ma már nincs mentség, de mondjuk pl ARM oldalon r7g/m7g/c7g még mindig nincs mindenütt, és közben már van m8g/r8g/c8g is 1-2 régióban.

Aztán persze úgymarad, mert nem nézegeted minden hónapban, hogy megjött-e már az új instance oda ahova kéne.

Régóta vágyok én, az androidok mezonkincsére már!

A Hetznernél shared gépnél tapasztalod ezt, vagy dedicatednél? Ha utóbbi, megosztanád melyiknél, esetleg melyik DC-ben?
A picsalassúról van valami kézzelfogható (mi, mennyire)?

Valóban általában egyszer futtatunk egy tesztet (hiszen pénzbe kerül), de amúgy gyűjtünk historikus adatokat is, és gondolkoztunk is hasonlón, de (még) nem jutottunk el idáig.

Napos (24 órás) méréseket már csináltunk, de ezek is egyszeriek voltak egyelőre:

shared x86:
https://github.com/SpareCores/sc-inspector-data/blob/main/data/hcloud/c…
https://github.com/SpareCores/sc-inspector-data/blob/main/data/hcloud/c…

shared arm:
https://github.com/SpareCores/sc-inspector-data/blob/main/data/hcloud/c…

dedicated x86:
https://github.com/SpareCores/sc-inspector-data/blob/main/data/hcloud/c…

Tervezünk még továbbiakat is hozzáadni, de először az AWS/Azure/GCP-t szerettük volna látni, mert mi is ezeket használjuk leginkább (eleve az ötlet egy belső projektből jött, ahol batch jobokra keressük meg mindig az épp akkor legolcsóbb/legjobb instance-ot).

A Hetznernél shared gépnél tapasztalod ezt, vagy dedicatednél?

Nyilván shared, dedicated esetén furcsa lenne vCPU overbooking.

A picsalassúról van valami kézzelfogható (mi, mennyire)?

Nagy általánosságban harmada-fele lesz a teljesítmény.

Tervezünk még továbbiakat is hozzáadni, de először az AWS/Azure/GCP-t szerettük volna látni, mert mi is ezeket használjuk leginkább (eleve az ötlet egy belső projektből jött, ahol batch jobokra keressük meg mindig az épp akkor legolcsóbb/legjobb instance-ot).

Az egy igen speciális use-case. :)

Grat a projecthez, nagyon jó ötlet.

Köszönjük! Szívesen vesszük az ötleteket!

Mint fent írtam, az eredeti problémánk az volt, hogy batch jobokra megtaláljuk a legjobb (a múltbéli futások alapján erőforrásban OK, lehetőleg a legolcsóbb) instance-okat (AWS), de nálunk is sűrűn felmerül, hogy "milyen instance is kellene erre a feladatra", remélhetőleg ebben is segít az oldal.

Mi -ahogy a cikkben is van- spot blocks-szal évekig használtuk, csak aztán megszűnt. :)

Egy ideig próbálkoztunk, de aztán feladtuk, sokszor nem hogy indítani nem tudunk (ezt mondjuk kezeljük, végigmegyünk a listán "jósági" sorrendben), de ha mégis, pár percen belül jön a termination notice, szóval gyakorlatilag használhatatlan.

Nekem is ez a tapasztalatom. 20 percet vársz pending-ben, aztán kapsz 5 perc futási időt. De mondjuk érdekes, hogy a cikketek szerint lehet találni olyan dugi AZ-ket ahol viszonylag nyugiban tud futni (persze amíg fel nem fedezik mások...).

Régóta vágyok én, az androidok mezonkincsére már!