Vad gör en applikation skalbar?

Jag ser hela tiden i jobbinlägg att sökanden måste ha erfarenhet av att skriva ”skalbara” applikationer. Vad gör en applikation skalbar och hur vet jag att min kod kan skalas till miljoner användare?


Jag antar att ett bättre sätt att formulera den här frågan är: Hur kan jag skriva min kod med skalbarhet i åtanke? Så att koden är skalbar från början till skillnad från en eftertanke. Finns det vissa designmetoder? Eller handlar det helt enkelt om att välja rätt algoritmer för jobbet?

Svar

Det finns två riktningar för skalbarhet:

  • vertikalt (aka skalning upp): snabbare CPU, mer RAM, mer diskutrymme;
  • horisontellt (aka skalning ut): fler kärnor i CPU, fler CPU: er, fler servrar ;

För det första måste du bara se till att du inte har några godtyckliga begränsningar. Dessa antingen på grund av för små heltalstorlekar eller strukturer med fast / begränsad längd. Dessa strukturer kan vara relaterade till underliggande operativsystem. Till exempel om du försöker skala upp med fler trådar eller processer, kommer du någon gång att nå OS-gränserna. Det är därför som för närvarande servrar bygger för hög skalbarhet gör samtidighet baserat på asynkrona händelser. Detta problem beskrivs i kända C10K dokument .

Den andra är svårare. Det kräver programmering med två saker i åtanke: data bearbetas parallellt och data kan distribueras fysiskt. Kommunikationen mellan noderna bör vara begränsad. I praktiken betyder det vanligtvis att man offrar vissa delar av ACID (det är bevisat att man inte kan ha full ACID och förmåga att skala ut samtidigt). Den mest kända lösningen för data lagring i detta paradigm är NoSQL -lösningar. De sträcker sig från mycket enkla nyckel-värdebutiker, till system RDBMS-liknande, bara borttagna från förmågan att göra sammanfogningar. div id = ”73fab16cf2”>

nyckel-värdebutiker är ultra-skalbara, men det kommer som ett pris. Du kan i princip bara fråga efter primärnyckel. Det finns dock en lösning på det, det ”s karta minskar . Det kan verka väldigt suboptimalt om du tittar på den kumulativa komplexitetssynpunkten, men du måste komma ihåg att den går massivt parallellt.

Om du vill läsa mer om skalbarhet med verkliga exempel , kolla in HighScalability.com blogg .

Kommentarer

  • +1 för att nämna skala ut. Att lägga till fler resurser är väldigt snabbt och attraktivt för beslutsfattare (köp några hex-kärnor och fördubblar minnet! Men om applikationen inte kan ’ inte sätta press på dem har du ett större problem.

Svar

Skalbarhet mäts i genomströmning baserat på någon variabel. Till exempel antal förfrågningar / sekund med X användare. Det enklaste sättet att beskriva skalbarhet är:

Ett mått på effektivitet när belastningen ökar.

Det första du behöver förstå för att utforma för skalbarhet är vilken mätning som är viktigast för din applikation? Det finns flera sätt att mäta effektivitet vilket är en nyckelkomponent för skalbarhet:

  • Samtidiga begäranden per sekund
  • Genomsnittlig svarstid per begäran
  • Antal poster som behandlas per sekund / minut

Det finns fler effektivitetsmätningar som kan användas, men dessa är vanliga för webbaserade system eller batchbearbetningssystem.

Nästa aspekt av skalbarhet är att mäta vad som händer med din effektivitet när belastningen ökar. Vanliga sätt att öka belastningen är:

  • Fler användare som slår på servern (dvs. mer webbtrafik)
  • Mer data i databasen (dvs. frågor tar längre tid eller bearbetning tar längre)
  • Hårddiskfel i ett RAID (lagringsprestanda / tillförlitlighet påverkas)
  • Nätverksmättnad

Målet för en skalbar applikation är för att antingen bibehålla eller förbättra effektiviteten när vi hanterar lastproblemet. Kort sagt, om svarstiden tar för lång tid, kan vi lägga till en annan server för att fördela belastningen jämnt? Detta tillvägagångssätt minskar mängden arbete för en server och gör att servrarna arbetar i den ”söta fläcken” för effektivitet.

Din applikation måste utformas specifikt för skalning. Det betyder att du måste vara försiktig med sessionsdata, dirigera förfrågningar till rätt server, minska flaskhalsar som begränsar möjligheten för applikationen att skala.

Svar

Du vill i princip undvika flaskhalsar när du ökar antalet användare och / eller bearbetar en större datamängd , och / eller erbjuda ditt gränssnitt på fler språk osv.

Du tittar i princip på ditt databasschema, dina algoritmer och din programutvecklingsprocess och försöker förutsäga framtida problem. Du vill också ställa in prestandaövervakning för att identifiera problem när de börjar byggas upp.

Jag plockade upp dessa tips när jag läste Bygga skalbara webbplatser (länk till amazon).

Hoppas det hjälper!

Svar

Det enda sättet som applikationer kan vara riktigt skalbar, är genom att inte ha några begränsningar som inte kan passeras (eller bara mycket dyrt).

Ett typiskt exempel är vad som händer när du har slut på tillgängliga cpu-cykler? Om ditt program är flertrådat kan du köra på en låda med flera kärnor men vad händer när du inte kan köpa en större låda längre? Din applikation kan helt enkelt inte växa längre och är därför inte skalbar.

Alla verkligt skalbara applikationer måste kunna spridas över flera datorer på ett transparent sätt och göra det utan märkbara stötar. DET är inte lätt och det är en av anledningarna till att Google har varit så framgångsrik.

Svar

Det finns unika problem som kommer med stöd för storskaliga applikationer. Anställningen söker sökande som har arbetat i den miljön och var tvungna att lösa sådana problem.

Från en hög nivå görs applikationer skalbara genom att ständigt ställa frågan vad som skulle hända om denna kod skulle begäras köras tusentals gånger under en mycket liten period. Detta innebär att du hanterar dina minnesfotavtryck , använder cachning av totalsummor och data, använder datakällor som själva är skalbara osv.

Svar

Om du var bygga en sökfunktion som fungerade bra när den har 100 rader i DB för att söka och 10 användare som använder den åt gången. Hur bra skulle den prestera när 100 användare använde den samtidigt och det finns 100 000 rader att slå upp.

Om det utför samma oavsett vad är det mycket bra. det om det presterar proportionellt mot mängden användare / data (vilket betyder 10 gånger mer data == 10 gånger längre att bearbeta) det är bra. Om det utför mycket sänk ju mer data den har (10x lägesdata == 10x ^ 10 längre att bearbeta) då skalas den inte bra.

Mina exempel ska verkligen visas i Big O-notering men jag cu vet inte det tillräckligt bra för att skriva ut exemplen i Big O.

Du kan simulera mer data genom att dumpa dummydata i din DB, och det finns verktyg för att simulera fler användare som Apache AB.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *