V pracovních nabídkách stále vidím, že uchazeč musí mít zkušenosti s psaním „škálovatelných“ aplikací. Co dělá aplikaci škálovatelnou a jak zjistím, že můj kód lze škálovat na miliony uživatelů?
Myslím, že lepší způsob formulování této otázky je: Jak mohu napsat svůj kód se škálovatelností na mysli? Takže kód je škálovatelný od začátku, na rozdíl od dodatečného myšlení. Existují určité metodiky návrhu? Nebo jde jen o výběr správných algoritmů pro danou úlohu?
Odpověď
Existují dva směry škálovatelnosti:
- vertikální (aka škálování): rychlejší CPU, více RAM, více místa na disku;
- horizontální (aka škálování): více jader v CPU, více CPU, více serverů ;
U prvního se musíte postarat o to, abyste neměli svévolná omezení. Jsou to buď kvůli příliš malým celočíselným velikostem nebo strukturám pevné / omezené délky. Tyto struktury mohou souviset se základním OS. Například pokud se pokusíte zvětšit pomocí více vláken nebo procesů, v určitém okamžiku „dosáhnete limitů OS“. Proto v současné době servery vytvářející vysokou škálovatelnost provádějí souběžnost na základě asynchronních událostí. Tento problém je popsán ve slavné C10K dokument .
Druhý je složitější. Vyžaduje programování se dvěma věcmi: data budou zpracována paralelně a data mohou být být fyzicky distribuován. Komunikace mezi uzly by měla být omezena. V praxi to obvykle znamená obětovat některé části ACID (je prokázáno, že nemůžete mít plnou ACID a schopnost škálovat současně). Nejznámější řešení pro data úložiště v tomto paradigmatu jsou NoSQL řešení. Pohybují se od velmi jednoduchých úložišť klíč-hodnota až po systémy podobné RDBMS, pouze zbavené možnosti provádět spojení. div id = „73fab16cf2″>
obchody klíč-hodnota jsou velmi škálovatelné, ale to je cena. V zásadě můžete vyhledávat pouze na primárním klíči. Existuje však řešení že je to mapa zmenšena . Může se to zdát velmi neoptimální, pokud se podíváte na kumulativní složitost, ale musíte si uvědomit, že to běží masivně paralelně.
Pokud si chcete přečíst více o škálovatelnosti pomocí příkladů z reálného života , podívejte se na HighScalability.com blog .
Komentáře
- +1 pro zmínku o škálování. Přidání dalších zdrojů je pro osoby s rozhodovací pravomocí velmi rychlé a atraktivní (kupte si hexadecimální jádra a zdvojnásobte paměť! ). Pokud ale aplikace na ně ' nemůže vyvíjet tlak, máte větší problém.
Odpovědět
Škálovatelnost se měří z hlediska propustnosti na základě nějaké proměnné. Například počet požadavků za sekundu u uživatelů X . Škálovatelnost lze popsat nejjednodušším způsobem:
Míra efektivity s rostoucí zátěží.
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í efektivity , která je klíčovou 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 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ší efektivitou při zvyšování zátěže. Běžné způsoby, jak zvýšit zatížení, jsou:
- Více uživatelů narážejících na server (tj. Větší provoz na webu)
- Více dat v databázi (tj. Dotazy trvají déle nebo zpracování trvá delší)
- Selhání pevného disku v poli RAID (ovlivněn výkon / spolehlivost úložiště)
- Sytost sítě
Cílem škálovatelné aplikace je buď udržovat nebo zlepšovat efektivitu při řešení problému se zátěží. Stručně řečeno, pokud doba odezvy trvá příliš dlouho, můžeme přidat další server k rovnoměrnému rozložení zátěže? Tento přístup snižuje množství práce, kterou musí jeden server vykonat, a udržuje servery v efektivním „sladkém místě“.
Vaše aplikace bude muset být navržena konkrétně v měřítku. musíte být opatrní s daty relace, směrováním požadavků na správný server a snižováním úzkých míst, která omezují schopnost aplikace škálovat.
Odpověď
V zásadě se chcete vyhnout problémovým místům s výkonem, když zvýšíte počet uživatelů a / nebo zpracujete větší soubor dat a / nebo nabízet své rozhraní ve více jazycích atd.
V zásadě se podíváte na své databázové schéma, vaše algoritmy a proces vývoje softwaru a pokusíte se předvídat budoucí problémy. Chcete také nastavit monitorování výkonu, abyste identifikovali problémy, když se začnou hromadit.
Tyto tipy jsem získal, když jsem četl Vytváření škálovatelných webových stránek (link to amazon).
Doufám, že to pomůže!
Odpověď
Jediný způsob, jakým aplikace může být skutečně škálovatelný, je tím, že nemá žádná omezení, která nelze předat (nebo jen velmi nákladně).
Typickým příkladem je to, co se stane, když vám dojde dostupné cykly CPU? Pokud je váš program multi-treaded, můžete běžet na boxu s více jádry, ale co se stane, když si už nemůžete koupit větší box? Vaše aplikace už prostě nemůže růst, a proto není škálovatelná.
Jakákoli skutečně škálovatelná aplikace musí být schopna transparentního rozložení na více počítačů a bez viditelných nerovností. To není snadné a je to jeden z důvodů, proč byl Google tak úspěšný.
Odpověď
Existují jedinečné problémy které přicházejí s podporou rozsáhlých aplikací. Pracovní pozice hledá uchazeče, kteří v tomto prostředí pracovali a museli takové problémy řešit.
Z aplikací na vysoké úrovni jsou škálovatelné neustálým pokládáním otázek, co by se stalo, kdyby byl tento kus kódu spuštěn tisíckrát ve velmi malém období. To znamená spravovat své paměťové stopy , využití mezipaměti součtů a dat, použití datových zdrojů, které jsou samy škálovatelné atd.
Odpověď
Pokud jste byli budování vyhledávací funkce, která fungovala dobře, když má v DB 100 řádků k prohledávání a 10 uživatelů, kteří ji používají najednou. Jak dobře by to fungovalo, kdyby ji používalo současně 100 uživatelů a je třeba vyhledat 100 000 řádků.
Pokud funguje stejně bez ohledu na to, pak je velmi dobrý. Pokud funguje úměrně s množstvím uživatelů / dat (tj. 10x více dat == 10x déle ke zpracování), je to dobré. Pokud funguje hodně čím nižší má více dat (10x režim data == 10x ^ 10 delší na zpracování), pak se nemění dobře.
Moje příklady by měly být skutečně zobrazeny v Big O notaci, ale já cu rrently to nevím dost dobře na to, abych napsal příklady v Big O.
Můžete simulovat více dat tím, že do své databáze vložíte fiktivní data, a existují nástroje pro simulaci více uživatelů, jako je Apache AB.