Mikä tekee sovelluksesta skaalautuvan?

Näen jatkuvasti työpaikkailmoituksissa, että hakijalla on oltava kokemusta skaalautuvien hakemusten kirjoittamisesta. Mikä tekee sovelluksesta skaalautuvan, ja mistä tiedän, että koodini voi skaalata miljoonille käyttäjille?


Luulen, että parempi tapa muotoilla tämä kysymys on: Kuinka voin kirjoittaa koodini skaalautuvasti mielessä? Joten koodi on skaalautuva aloituspisteestä toisin kuin jälkikäteen. Onko olemassa tiettyjä suunnittelumenetelmiä? Vai onko kyse vain tehtävän oikeiden algoritmien valitsemisesta?

Vastaus

Skaalautuvuutta on kaksi suuntaa:

  • pystysuora (eli suurentaminen): nopeampi suoritin, enemmän RAM-muistia, enemmän levytilaa;
  • vaakasuora (eli skaalaus pois): enemmän ytimiä suorittimessa, enemmän suorittimia, enemmän palvelimia ;

Ensimmäisessä sinun on vain huolehdittava siitä, että sinulla ei ole mielivaltaisia rajoituksia. Nämä joko liian pienten kokonaislukujen tai kiinteän / rajoitetun pituisen rakenteen vuoksi. Nämä rakenteet saattavat liittyä käyttöjärjestelmään. Esimerkiksi jos yrität laajentaa useampia ketjuja tai prosesseja, jossain vaiheessa olet saavuttamassa käyttöjärjestelmän rajat. Siksi tällä hetkellä palvelimet, jotka rakentavat suurta skaalautuvuutta varten, tekevät samanaikaisuuden asynkronisten tapahtumien perusteella. Tämä ongelma on kuvattu tunnetuissa C10K asiakirja .

Toinen on vaikeampaa. Se vaatii ohjelmoinnin kahdella tavalla: tietoja käsitellään samanaikaisesti ja tietoja saattaa olla solmujen välisen viestinnän tulisi olla rajoitettua. Käytännössä tämä tarkoittaa yleensä joidenkin ACID-osien uhraamista (on todistettu, että sinulla ei voi olla täyttä happoa ja kykyä skaalata samanaikaisesti). Tässä paradigmassa olevat tallennustilat ovat NoSQL -ratkaisuja. Ne vaihtelevat hyvin yksinkertaisista avainarvomyymälöistä järjestelmiin, RDBMS-tyyppisiin, vain kyky tehdä. div id = ”73fab16cf2”>

avainarvomyymälät ovat erittäin skaalautuvia, mutta se tulee hintana. Voit tehdä kyselyjä vain ensisijaisella avaimella. Siihen on kuitenkin ratkaisu että se ”s pienentää karttaa . Se voi tuntua hyvin epäoptimaalilta, jos tarkastelet kumulatiivista monimutkaisuutta, mutta sinun on pidettävä mielessä, että se kulkee massiivisesti rinnakkain.

Jos haluat lukea lisää skaalautuvuudesta tosielämän esimerkeillä , tutustu HighScalability.com -blogiin .

Kommentit

  • +1 mittakaavan mainitsemiseksi. Lisää resursseja on nopeaa ja houkuttelevaa päätöksentekijöille (osta heksasydämiä ja kaksinkertaista muisti! ). Mutta jos sovellus ei voi ’ t painostaa heitä, sinulla on suurempi ongelma.

Vastaa

Skaalautuvuutta mitataan joidenkin muuttujien perusteella. Esimerkiksi pyyntöjen määrä sekunnissa X -käyttäjien kanssa. Yksinkertaisin tapa kuvailla skaalautuvuutta on:

Mitta tehokkuudesta kuormituksen kasvaessa.

Ensimmäinen asia, joka sinun on ymmärrettävä skaalautuvuutta suunniteltaessa, on mikä mittaus on tärkeintä sovelluksellesi? Skaalautuvuuden avainkomponentin tehokkuuden mittaamiseen on useita tapoja:

  • Samanaikaiset pyynnöt sekunnissa
  • Keskimääräinen vasteaika per pyyntö
  • Käsiteltyjen tietueiden määrä sekunnissa / minuutissa

Tehokkuuden mittauksia voidaan käyttää enemmän, mutta ne ovat yleisiä verkkopohjaisissa järjestelmissä tai eräkäsittelyjärjestelmissä.

Seuraava skaalautuvuuden näkökohta on mitata, mitä tapahtuu tehokkuuksellesi kuormituksen kasvaessa. Yleisiä tapoja lisätä kuormitusta ovat:

  • Enemmän käyttäjiä osuu palvelimelle (eli enemmän verkkoliikennettä)
  • Enemmän tietoa tietokannassa (ts. Kyselyt vievät kauemmin tai käsittely vie pidempi)
  • RAID-kiintolevyvika (tallennustilan suorituskykyyn / luotettavuuteen vaikuttaa)
  • verkon kylläisyys

Skaalautuvan sovelluksen tavoite on joko ylläpitää tai parantaa tehokkuutta, kun käsittelemme kuormitusongelmaa. Lyhyesti sanottuna, jos vasteaika kestää liian kauan, voimmeko lisätä toisen palvelimen jakamaan kuorman tasaisesti? Tämä lähestymistapa vähentää yhden palvelimen tehtävämäärää ja pitää palvelimet toiminnassa ”makealla” tehokkuuden takaamiseksi.

Sinun on suunniteltava sovelluksesi nimenomaan mittakaavassa. Tämä tarkoittaa sinua on oltava varovainen istuntodatan kanssa, reitittämällä pyynnöt oikealle palvelimelle vähentämällä pullonkauloja, jotka rajoittavat sovelluksen kykyä skaalata.

vastaus

Haluat periaatteessa välttää suorituskyvyn pullonkauloja, kun lisäät käyttäjien määrää ja / tai käsittelet suurempaa tietojoukkoa ja / tai tarjoa käyttöliittymääsi useammalla kielellä jne.

Tarkastat periaatteessa tietokantamallisi, algoritmejasi ja ohjelmistokehitysprosessiasi ja yrität ennakoida tulevia ongelmia. Haluat myös määrittää suorituskyvyn seurannan ongelmien tunnistamiseksi, kun ne alkavat muodostua.

Otin nämä vinkit lukiessani Skaalautuvien verkkosivustojen rakentaminen (linkki Amazoniin).

Toivottavasti tämä auttaa!

Vastaa

Ainoa tapa, jolla sovellukset voi olla todella skaalautuva, onko sillä, ettei sillä ole rajoituksia, joita ei voida siirtää (tai vain hyvin kalliisti).

Tyypillinen esimerkki on, mitä tapahtuu, kun käytettävissä olevat prosessorisyklit loppuvat? Jos ohjelmasi on monipintainen, voit käyttää useita ytimiä sisältävää laatikkoa, mutta mitä tapahtuu, kun et voi enää ostaa isompaa laatikkoa? Sovelluksesi ei yksinkertaisesti voi enää kasvaa, joten sitä ei voi skaalata.

Kaikkien todella skaalautuvien sovellusten on kyettävä levittämään useille tietokoneille avoimella tavalla ja tekemään niin ilman havaittavia kolhuja. Tämä ei ole helppoa, ja se on yksi syy siihen, miksi Google on ollut niin menestyvä.

Vastaa

On ainutlaatuisia ongelmia jotka tulevat suurten skaalattujen sovellusten tukemiseen. Työpaikkailmoituksessa etsitään hakijoita, jotka ovat työskennelleet ympäristössä ja joutuneet ratkaisemaan tällaiset ongelmat.

Korkean tason sovelluksista tehdään skaalautuvia esittämällä jatkuvasti kysymys, mitä tapahtuisi, jos tätä koodikappaletta pyydettäisiin suorittamaan tuhansia kertoja hyvin pienessä ajassa. Tämä tarkoittaa muistijalanjälkien hallintaa , käyttämällä kokonaismäärien ja tietojen välimuistia, käyttämällä itse skaalautuvia tietolähteitä.

Vastaa

Jos olisit rakentaa hakuominaisuus, joka toimi hyvin, kun sillä on 100 riviä DB: ssä hakemiseen ja sitä käyttäviä käyttäjiä kerralla 10. Kuinka hyvin se toimisi, kun 100 käyttäjää käyttäisi sitä samanaikaisesti ja 100K riviä olisi etsittävissä.

Jos se toimii samalla tavalla riippumatta siitä, mikä on sen erittäin hyvä. se, jos se toimii suhteessa käyttäjien / tietojen määrään (eli 10x enemmän tietoja == 10x pidempi käsittelyyn), on hyvä. Jos se toimii paljon alhaisempi, mitä enemmän tietoja sillä on (10x-tiladata == 10x ^ 10 pidempi käsittely), niin se ei skaalaa hyvin.

Esimerkkini pitäisi todella näyttää isossa O-merkinnässä, mutta I cu En tiedä sitä riittävän hyvin kirjoittamalla esimerkkejä isoon O: han.

Voit simuloida enemmän tietoja polkumyyntitietoja DB: hen, ja on työkaluja simuloida useampia käyttäjiä, kuten Apache AB.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *