Mitől skálázható az alkalmazás?

Az álláshirdetéseken folyamatosan azt látom, hogy a pályázónak rendelkeznie kell tapasztalattal a “skálázható” pályázatok írásakor. Mi teszi az alkalmazást skálázhatóvá, és honnan tudom, hogy a kódom több millió felhasználóra képes?


Gondolom, a kérdés megfogalmazásának jobb módja: Hogyan írhatom meg a skálázható kódomat gondolatban? Annak érdekében, hogy a kód az indulástól kezdve méretezhető legyen, ellentétben egy utólagos gondolattal. Vannak bizonyos tervezési módszertanok? Vagy egyszerűen csak a megfelelő algoritmusok kiválasztásáról van szó?

Válasz

A méretezhetőségnek két iránya van:

  • függőleges (más néven nagyítás): gyorsabb CPU, több RAM, több lemezterület;
  • vízszintes (más néven méretezés): több mag a CPU-ban, több CPU, több szerver ;

Az elsőnél csak arra kell ügyelnie, hogy ne legyenek önkényes korlátai. Ezek vagy a túl kicsi egész méret vagy a rögzített / korlátozott hosszúságú struktúrák miatt. Ezek a struktúrák kapcsolódhatnak az alapul szolgáló operációs rendszerhez. Például, ha több szál vagy folyamat használatával próbál nagyobb méreteket felvenni, akkor valamikor elérni fogja az operációs rendszer határait. Ezért a kiszolgálók jelenleg a nagy skálázhatóság érdekében építenek aszinkron események alapján történő párhuzamosságra. Ezt a problémát a híres C10K ismerteti. dokumentum .

A második nehezebb. Két dolgot szem előtt tartva kell programozni: az adatok párhuzamosan kerülnek feldolgozásra, és az adatok fizikailag legyen elosztva. A csomópontok közötti kommunikációnak korlátozottnak kell lennie. A gyakorlatban ez általában az ACID egyes részeinek feláldozását jelenti (bebizonyosodott, hogy nem lehet teljes ACID és nem képes egyszerre méretezni). Az ebben a paradigmában tárolt tárhelyek NoSQL megoldások. Nagyon egyszerű kulcsérték-tárolóktól kezdve az RDBMS-szerű rendszerekig terjednek, csak a képességek vannak elvonva. A kulcsérték-tárolók rendkívül méretezhetők, de ennek ára van. Alapvetően csak az elsődleges kulcson lehet lekérdezni. Van azonban megoldás ezt “s lekicsinyíti . Nagyon szuboptimálisnak tűnhet, ha a kumulatív bonyolultsági szempontokat nézzük, de szem előtt kell tartanunk, hogy ez nagymértékben párhuzamosan fut.

Ha többet szeretne megtudni a méretezhetőségről a valós élet példáival , nézd meg a HighScalability.com blogot .

Megjegyzések

  • +1 a méretarány megemlítéséhez. További források hozzáadása nagyon gyors és vonzó a döntéshozók számára (vásároljon néhány hatmagot és duplázza meg a memóriát! ). De ha az alkalmazás nem tud ‘ nyomást gyakorolni rájuk, akkor nagyobb problémája van.

Válasz

A

A méretezhetőséget az átviteli sebességgel mérik valamilyen változó alapján. Például a kérelmek száma másodpercenként az X felhasználókkal. A méretezhetőség leírásának legegyszerűbb módja:

A hatékonyság mértéke a terhelés növekedésével.

Az első dolog, amit meg kell értenie a méretezhetőség megtervezésekor, hogy melyik mérés a legfontosabb az alkalmazásához? A méretezhetőség egyik kulcseleme a hatékonyság mérésének számos módja van:

  • Egyidejű kérelmek másodpercenként
  • átlagos válaszidő kérelemenként
  • A másodpercenként / percben feldolgozott rekordok száma

Több hatékonyságmérés is használható, de ezek gyakoriak a webalapú rendszerek vagy a kötegelt feldolgozó rendszerek esetében.

A méretezhetőség következő szempontja annak mérése, hogy mi történik a hatékonyságával a terhelés növekedésével. A terhelés növekedésének leggyakoribb módjai:

  • Több felhasználó éri el a szervert (azaz nagyobb az internetes forgalom)
  • Több adat található az adatbázisban (azaz a lekérdezések hosszabb ideig tartanak, vagy a feldolgozás elhúzódik) hosszabb)
  • Merevlemez meghibásodása RAID-ben (a tárolási teljesítmény / megbízhatóság befolyásolva van)
  • Hálózati telítettség

A skálázható alkalmazás célja: vagy fenntartani vagy javítani a hatékonyságot, amikor a terhelési problémával foglalkozunk. Röviden, ha a válaszidő túl hosszú, tudunk-e hozzáadni egy másik szervert a terhelés egyenletes elosztásához? Ez a megközelítés csökkenti az egy szerver által elvégzendő munka mennyiségét, és a hatékonyság érdekében a kiszolgálókat abban az “édes helyen” tartja.

Az alkalmazást kifejezetten méretarányosan kell megtervezni. Ez azt jelenti, hogy Ön körültekintőnek kell lennie a munkamenetadatokkal, a kérelmek megfelelő szerverre történő átirányításával, csökkentve az alkalmazás méretezését korlátozó szűk keresztmetszeteket.

Válasz

Alapvetően el akarja kerülni a teljesítmény szűk keresztmetszeteit, amikor növeli a felhasználók számát, és / vagy nagyobb adatkészletet dolgoz fel. , és / vagy több nyelven kínálja a kezelőfelületet, stb.

Alapvetően megnézi az adatbázis sémáját, az algoritmusokat és a szoftverfejlesztési folyamatot, és megpróbálja megjósolni a jövőbeni problémákat. Be kell állítania a teljesítményfigyelést is, hogy azonosítsa a problémákat, amikor azok felépülnek.

Ezeket a tippeket akkor vettem át, amikor elolvastam a Méretezhető webhelyek építése (link amazonra).

Remélem, hogy ez segít!

Válasz

Az alkalmazások egyetlen módja valóban skálázható lehet, az, hogy nincsenek olyan korlátozásai, amelyeket nem lehet átadni (vagy csak nagyon drágán).

Tipikus példa arra, hogy mi történik, ha elfogynak a rendelkezésre álló cpu-ciklusok? Ha a program több lépcsős, futhat több maggal rendelkező dobozon, de mi történik, ha már nem vásárolhat nagyobb dobozt? Az alkalmazásod egyszerűen nem tud tovább növekedni, és ezért nem méretezhető.

Bármely valóban skálázható alkalmazásnak képesnek kell lennie arra, hogy átlátszó módon elterjedjen több számítógépen, és ezt észrevehető ütközések nélkül kell megtennie. Ez nem könnyű, és ez az egyik oka annak, hogy a Google ilyen sikeres volt.

Válasz

Vannak egyedi problémák amelyek nagy méretű alkalmazások támogatásával járnak. Az álláshirdetés olyan jelentkezőket keres, akik ebben a környezetben dolgoztak és ilyen problémákat kellett megoldaniuk.

A magas szintű alkalmazásokból skálázhatóvá válnak azáltal, hogy folyamatosan felteszik a kérdést, mi történne, ha ezt a kóddarabot nagyon sokszor több ezer alkalommal futtatnák egy nagyon kis időszak alatt. Ez azt jelenti, hogy kezeljük a memória lábnyomait , az összesítések és az adatok gyorsítótárának felhasználásával, maguk is méretezhető adatforrások felhasználásával stb.

Válasz

Ha olyan keresési funkció kiépítése, amely jól teljesített, ha a DB-ben 100 sor van a kereséshez, és egyszerre 10 felhasználó használja. Mennyire teljesítene, ha 100 felhasználó használná egyszerre, és 100 ezer sor van keresésre.

Ha ugyanolyan teljesítményt nyújt, függetlenül attól, hogy mi az, akkor nagyon jó. ha a felhasználók / adatok mennyiségével arányosan teljesít (vagyis 10x több adat == 10x hosszabb a feldolgozáshoz), akkor jó. Ha sokat teljesít alacsonyabb minél több adata van (10x módú adatok == 10x ^ 10 hosszabb feldolgozásra), akkor nem skálázódik jól.

A példáimat valóban Big O jelöléssel kell bemutatni, de én nem tudja elég jól, hogy kiírja a példákat a Big O-ba.

Több adatot is szimulálhat, ha dummy adatokat dob a DB-be, és vannak olyan eszközök, amelyek több felhasználót szimulálnak, például az Apache AB.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük