it-swarm-eu.dev

Co dělá aplikaci škálovatelnou?

V pracovních pozicích neustále sleduji, že žadatel musí mít zkušenosti s vytvářením „škálovatelných“ žádostí. Proč je aplikace škálovatelná a jak vím, že se můj kód může přizpůsobit milionům uživatelů?


Myslím, že lepší způsob formulace této otázky je: Jak mohu napsat svůj kód s ohledem na škálovatelnost? Aby byl kód škálovatelný od začátku, na rozdíl od dodatečného myšlení. Existují určité metodiky návrhu? Nebo je to prostě otázka výběru správných algoritmů pro danou práci?

38
jnevelson

Existují dva směry škálovatelnosti:

  • vertikální (a.k.a. zvětšení): rychlejší CPU, více RAM, více místa na disku;
  • horizontální (a.k.a. škálování): více jader v procesoru, více procesorů, více serverů;

Pro první z nich se musíte postarat o to, že nemáte žádná svévolná omezení. To buď z důvodu příliš malých celých velikostí nebo struktur s pevnou/omezenou délkou. Tyto struktury mohou souviset s podkladovým OS. Pokud se například pokusíte zvětšit pomocí více vláken nebo procesů, v určitém okamžiku dosáhnete limitů operačního systému. To je důvod, proč v současné době servery sestavené pro vysokou škálovatelnost dělají souběžnost na základě asynchronních událostí. Tento problém je popsán ve slavném C10K dokument .

Druhý je těžší. Vyžaduje programování s ohledem na dvě věci: data budou zpracovávána paralelně a data mohou být fyzicky distribuována. Komunikace mezi uzly by měla být omezená. V praxi to obvykle znamená obětování některých částí ACID (je prokázáno, že nemůžete mít plné ACID a schopnost škálovat). Nejznámějším řešením pro ukládání dat v tomto paradigmatu jsou řešení NoSQL . Sáhnou od velmi jednoduchých obchodů s hodnotou klíče až po systémy podobné RDBMS, jen zbavené schopnosti provádět spojení. obchody klíč-hodnota jsou velmi škálovatelné, ale to přichází jako cena. V zásadě můžete dotazovat pouze na primární klíč. Existuje však řešení, že je to zmenšení mapy . Může se to zdát velmi suboptimální, pokud se podíváte na kumulativní hledisko složitosti, ale musíte mít na paměti, že běží masivně paralelně.

Pokud si chcete přečíst více o škálovatelnosti s příklady ze skutečného života, podívejte se na HighScalability.com blog .

24
vartec

Škálovatelnost je měřena z hlediska propustnosti na základě určité proměnné. Například počet žádostí za sekundu s uživateli X . Nejjednodušší způsob popisu škálovatelnosti je:

Míra účinnost při zvyšování zátěže.

První věc, kterou musíte pochopit při navrhování škálovatelnosti, je to, jaké měření je pro vaši aplikaci nejdůležitější? Existuje několik způsobů měření účinnost, což je klíčová součást škálovatelnosti:

  • Souběžné požadavky za sekundu
  • Průměrná doba odezvy na požadavek
  • Počet záznamů zpracovaných za sekundu/minutu

Existuje více měření účinnosti, které lze použít, ale tato měření jsou běžná pro webové systémy nebo systémy dávkového zpracování.

Dalším aspektem škálovatelnosti je měření toho, co se stane s vaší účinností při zvyšování zátěže. Běžné způsoby zvyšování zatížení jsou:

  • Více uživatelů zasáhne server (tj. Větší webový provoz)
  • Další data v databázi (tj. Dotazy trvají déle nebo zpracování trvá déle)
  • Selhání pevného disku v RAID (je ovlivněn výkon/spolehlivost úložiště)
  • Nasycení sítě

Cílem škálovatelné aplikace je buď udržovat, nebo zlepšovat efektivitu při řešení problému se zátěží. Zkrátka, pokud doba odezvy trvá příliš dlouho, můžeme přidat další server pro rovnoměrné rozložení zátěže? Tento přístup snižuje množství práce, kterou musí jeden server dělat, a udržuje provoz serverů v tomto „sladkém místě“ z hlediska efektivity.

Vaše aplikace bude muset být navržena speciálně v měřítku. To znamená, že musíte být opatrní s daty relací, směrováním požadavků na správný server, snižováním úzkých míst, která omezují schopnost aplikace škálovat.

14
Berin Loritsch

V zásadě se chcete vyhnout problémovým místům výkonu, když zvětšujete počet uživatelů a/nebo zpracováváte větší sadu dat a/nebo nabízíte své rozhraní ve více jazycích atd.

V zásadě se podíváte na své databázové schéma, své algoritmy a proces vývoje softwaru a pokusíte se předpovídat budoucí problémy. Chcete také nastavit sledování výkonu tak, aby bylo možné identifikovat problémy, když se začnou stavět.

Tyto tipy jsem si vyzvedl, když jsem četl Vytváření škálovatelných webových stránek (odkaz na Amazon).

Snad to pomůže!

5
louisgab

Jediným způsobem, jak mohou být aplikace skutečně škálovatelné, je to, že neexistují žádná omezení, která nelze předat (nebo jen velmi nákladně).

Typickým příkladem je to, co se stane, když vám dojdou dostupné cykly CPU? Pokud je váš program mnohonásobný, můžete běžet na krabici s více jádry, ale co se stane, když už nemůžete koupit větší krabici? Vaše aplikace jednoduše nemůže dále růst, a proto není škálovatelná.

Jakákoli skutečně škálovatelná aplikace musí být schopna se transparentním způsobem šířit na více počítačů a to bez viditelných nárazů. To není snadné a je to jeden z důvodů, proč byla společnost Google tak úspěšná.

3
user1249

S podporou rozsáhlých aplikací přicházejí jedinečné problémy. Uchazeč o zaměstnání hledá uchazeče, kteří pracovali v tomto prostředí a museli takové problémy řešit.

Z aplikací na vysoké úrovni jsou škálovatelné neustálým kladením otázek, co by se stalo, kdyby tento kus kódu byl požadován ke spuštění tisícekrát ve velmi malém období. To znamená, že spravujete své paměťové stopy, využívají mezipaměti součtů a dat, využívají zdroje dat, které jsou samy škálovatelné atd.

1
jzd

Pokud jste vytvářeli funkci vyhledávání, která fungovala dobře, když má 100 řádků v databázi pro vyhledávání a 10 uživatelů ji používá současně. Jak dobře by to fungovalo, když by jej používalo 100 uživatelů současně a bylo by třeba vyhledat 100 000 řádků.

Pokud vykonává totéž bez ohledu na to, co je jeho velmi dobré. pokud provádí úměrně množství uživatelů/dat (což znamená 10x více dat = 10x déle na zpracování), je dobré. Pokud má mnohem nižší výkon, tím více dat má (zpracování 10x dat = = 10x ^ 10 déle), pak se měřítko nezmění.

Moje příklady by měly být skutečně zobrazeny v zápisu Big O, ale v současné době nevím dost dobře, abych tyto příklady napsal ve hře Big O.

Můžete simulovat více dat ukládáním falešných dat do své databáze a existují nástroje pro simulaci více uživatelů, jako je Apache AB.

1
JD Isaacks