Obsah[Skrýt][Ukázat]
- 1. Co rozumíte pod pojmem návrh systému?
- 2. Jaké jsou nejdůležitější vlastnosti projektanta systému?
- 3. Co přesně je věta CAP?
- 4. Co rozumíte pod pojmem load balancing?
- 5. Jaký je rozdíl mezi asynchronním programováním a paralelním programováním?
- 6. Jaký je rozdíl mezi horizontálním a vertikálním měřítkem?
- 7. Co přesně máte na mysli pod pojmem latence, propustnost a dostupnost systému?
- 8. Jaké jsou vlastnosti ACID?
- 9. Co je to vlastně sharding?
- 10. Co je CDN?
- 11. Proč používat CDN?
- 12. Jaký je rozdíl mezi sharding a partitioning?
- 13. Co přesně je ukládání do mezipaměti?
- 14. Co jsou servery CDN edge?
- 15. Jaké jsou různé vzory konzistence pro návrh systému?
- 16. Co myslíš tím optimistickým zamykáním?
- 17. Co přesně máte na mysli pod pojmem „volba vůdce“?
- 18. Jaký je váš přístup k navrhování služby zkracování URL podobné TinyURL?
- 19. Jaký je váš přístup k navrhování twitteru?
- 20. Vytvořte systém newsfeed pro Facebook
- 21. Co je vlastnost BASE systému?
- 22. Co je to vyvažování zátěže pomocí techniky afinity IP adres?
- 23. Co přesně jsou algoritmy pro výměnu mezipaměti (neboli zásady pro vyklizení)?
- 24. Co přesně máte na mysli pod pojmem distribuovaná transakce?
- 25. Co je to vlastně hladovění?
- Proč investovat do čističky vzduchu?
Než začnete, doporučujeme přečíst si naše úvodní příručka o návrhu systému osvěžit své základní znalosti.
Při pohovoru na pozici, která vyžaduje znalosti návrhu systému, máte možnost hovořit o své minulosti a prokázat svou schopnost vyvíjet složité systémy.
Když mluvíte s potenciálním zaměstnavatelem, způsob, jakým vyjadřujete své odborné znalosti, vám může pomoci prokázat, že jste kompetentním kandidátem na danou pozici.
Na pracovní pohovor se můžete připravit tím, že se naučíte základní koncepty designu a přemýšlíte o tom, jak budete reagovat na dotazy týkající se nich. V tomto příspěvku si projdeme některé typické otázky a odpovědi na pohovor ohledně návrhu systému, které vám pomohou připravit se na další pohovor.
1. Co rozumíte pod pojmem návrh systému?
Proces stanovení systémových charakteristik včetně modulů, architektury, komponent a jejich rozhraní a dat na základě předem stanovených kritérií se nazývá návrh systému.
Je to proces definování, vytváření a navrhování systémů, které splňují specifické cíle a záměry společnosti nebo organizace. Návrh systému je více o analýze systému, architektonických vzorech, API, návrhových vzorech a jejich slepení dohromady než o kódování.
2. Jaké jsou nejdůležitější vlastnosti projektanta systému?
- Interakce uživatele
- Externí volání API
- Offline procesy
3. Co přesně je věta CAP?
Podle teorému CAP (Consistency-Availability-Partition Tolerance) distribuovaný systém nemůže zajistit C, A a P všechny současně. Může poskytnout maximálně dvě ze tří ujištění. Použijme distribuovaný databázový systém, který nám pomůže toto pochopit.
- Konzistence: Určuje, že data musí zůstat konzistentní po dokončení databázové transakce. Například po aktualizaci databáze by všechny dotazy měly vracet stejnou odpověď.
- Dostupnost: Databáze musí být vždy dostupné a musí reagovat.
- Tolerance oddílů: I když se komunikace stane problematickou, databázový systém by měl nadále fungovat.
4. Co rozumíte pod pojmem load balancing?
Vyrovnávání zatížení je proces efektivního rozptýlení příchozího provozu mezi sadu backendových serverů. Ty se označují jako serverové fondy. Moderní webové stránky jsou stavěny tak, aby zvládly miliony dotazů od zákazníků a reagovaly na ně rychle a spolehlivě. Ke zpracování těchto požadavků bude potřeba více serverů.
V tomto případě je důležité efektivně rozdělit provoz požadavků mezi jednotlivé servery, aby nedošlo k jejich přetížení. Nástroj pro vyrovnávání zátěže funguje jako dopravní policista, zachycuje požadavky a směruje je mezi dostupnými servery, takže žádný server není přetěžován, což potenciálně snižuje výkon aplikací.
5. Jaký je rozdíl mezi asynchronním programováním a paralelním programováním?
Když něco spustíte asynchronně, znamená to, že nemusíte čekat, až to skončí, než budete moci přejít k něčemu jinému. Paralelismus se týká současného provádění mnoha úkolů.
Když můžete rozdělit úlohy na různé části práce, paralelismus funguje efektivně. Async a Callbacks jsou prostředkem (nástrojem nebo mechanismem) k reprezentaci souběžnosti, tedy skupiny entit, které by mohly komunikovat a sdílet zdroje.
6. Jaký je rozdíl mezi horizontálním a vertikálním měřítkem?
Přidání nového výpočetního zařízení do sítě, která rozloží požadavky na zpracování a paměť napříč rozptýlenou sítí zařízení, se nazývá horizontální škálování. Jednoduše řečeno, do aktuálního fondu jsou přidány nové instance serveru a zatížení provozu je efektivně rozloženo mezi tato zařízení.
Vertikální škálování se vztahuje k myšlence rozšíření kapacity zdrojů jednoho počítače přidáním paměti RAM, efektivních CPU nebo migrací na nový počítač s vyšší kapacitou. Funkčnost serveru lze rozšířit bez nutnosti jakýchkoli změn v programování.
7. Co přesně máte na mysli pod pojmem latence, propustnost a dostupnost systému?
Výkon je základním aspektem návrhu systému, protože přispívá k rychlosti a spolehlivosti našich služeb. Tři nejdůležitější měřítka výkonu jsou následující:
- Doba potřebná k doručení jedné zprávy v milisekundách se nazývá latence.
- Množství dat úspěšně přenesených systémem v určitém časovém období se nazývá propustnost. K jeho měření se používají bity za sekundu.
- Doba, po kterou je systém k dispozici pro reakci na dotazy, je definována jeho dostupností. Doba provozu systému / (Doba provozu systému+Doba výpadku) je vzorec pro její výpočet.
8. Jaké jsou vlastnosti ACID?
- Atomicita: Zajišťuje, že změny databáze jsou buď všechny, nebo žádné.
- Konzistence: Hodnoty dat v databázi jsou konzistentní.
- Izolace: Vztahuje se k oddělení dvou transakcí.
- Trvanlivost: Data jsou zachována, i když server selže.
9. Co je to vlastně sharding?
Sharding je technika rozdělení obrovské logické datové sady do mnoha databází. Týká se také horizontálního rozdělení dat, protože data budou uložena na několika počítačích. Výsledkem je, že sdílená databáze zvládne více dotazů než jeden obrovský počítač.
10. Co je CDN?
Síť pro doručování obsahu je celosvětová síť počítačů, které spolupracují na rychlém poskytování internetových informací. Umožňuje rychlé dodání prvků, jako jsou stránky HTML, soubory JavaScript, šablony stylů, obrázky a videa, které jsou nezbytné k načtení internetového obsahu.
11. Proč používat CDN?
- Vzhledem k tomu, že statické zdroje tvoří přibližně 80 % webu, přijetí CDN výrazně snižuje zátěž na původní server.
- Vzhledem k tomu, že existuje menší vzdálenost k cestování, informace budou poskytovány rychleji majitelům webových stránek, kteří mají návštěvníky z mnoha geografických oblastí.
- Uživatelé CDN také těží z kapacity pro rychlé škálování nahoru a dolů v reakci na nárůst provozu.
12. Jaký je rozdíl mezi sharding a partitioning?
Sdílení databáze – Sdílení databáze je metoda rozdělení jedné datové sady do mnoha databází, aby mohla být uložena na různých pracovních stanicích. Větší datové sady lze rozdělit na menší části a uložit do několika datových uzlů, čímž se zvýší celková úložná kapacita systému.
Rozložením dat na mnoho počítačů může sdílená databáze zpracovat více dotazů než jeden systém.
Database Partitioning je proces rozdělování uložených databázových objektů (tabulek, indexů a pohledů) na samostatné části. Pro zvýšení ovladatelnosti, výkonu a dostupnosti jsou velké databázové objekty rozděleny na oddíly.
V některých případech může rozdělení zvýšit rychlost při přístupu k rozděleným datům. Dělení na oddíly může snížit velikost indexu a zvýšit šanci na nalezení nejpotřebnějších indexů v paměti tím, že funguje jako úvodní sloupec v indexech.
13. Co přesně je ukládání do mezipaměti?
Ukládání do mezipaměti je technika uchovávání kopií souborů v dočasné úložné oblasti známé jako mezipaměť, která urychluje přístup k datům a snižuje latenci webu. Do mezipaměti lze uložit pouze určité množství dat.
V důsledku toho je rozhodující určit techniky aktualizace mezipaměti, které jsou nejvhodnější pro obchodní cíle.
14. Co jsou servery CDN edge?
Servery CDN, které ukládají do mezipaměti materiál získaný z vašeho původního serveru nebo klastru úložiště, se nazývají okrajové servery. Bod přítomnosti je termín, který se často používá k popisu okrajových serverů (POP).
Okrajové servery jsou fyzicky umístěny na POP. V tomto POP mohou být informace ukládány do mezipaměti mnoha okrajovými servery.
Možnost poskytovat části webu z několika míst snižuje vzdálenost mezi návštěvníkem a webovým serverem, což má za následek nižší latenci. Servery CDN edge dosahují tohoto přesného cíle.
15. Jaké jsou různé vzory konzistence pro návrh systému?
Každý požadavek na čtení by měl podle teorému CAP získat nejnovější zapsaná data. Když je k dispozici mnoho kopií dat, je obtížné je synchronizovat tak, aby zákazníci dostávali neustále čerstvá data. Možné vzory konzistence jsou následující:
- Slabá konzistence: Po zápisu dat může nebo nemusí být požadavek na čtení schopen získat aktualizovaná data. Tato úroveň stability je ideální pro aplikace v reálném čase, jako je VoIP, videochat a hraní pro více hráčů.
- Případná konzistence: Čtení nakonec zobrazí nejnovější data během milisekund po zapsání dat. Data jsou v tomto případě duplikována asynchronně. DNS a e-mailové systémy jsou toho příkladem. To funguje efektivně v systémech s vysokou dostupností.
- Silná konzistence: Po zápisu dat budoucí čtenáři uvidí nejnovější data. Data se v tomto případě kopírují synchronně. To lze pozorovat u RDBMS a souborových systémů, které jsou vhodné pro datové přenosy.
16. Co myslíš tím optimistickým zamykáním?
Optimistické zamykání je mechanismus, ve kterém si přečtete záznam, poznamenáte si číslo verze (alternativní způsoby zahrnují data, časová razítka nebo kontrolní součty/hash) a poté dvakrát zkontrolujete, že se verze nezměnila, než ji zapíšete zpět.
Když záznam zapíšete zpět, použijete verzi k filtrování aktualizace, abyste zajistili, že je atomická. (tj. mezi kontrolou verze a zápisem záznamu na disk nebyl změněn) a aktualizujte jej všechny najednou.
17. Co přesně máte na mysli pod pojmem „volba vůdce“?
V distribuovaném systému s mnoha servery přispívajícími k dostupnosti aplikace mohou nastat situace, kdy je za aktualizaci rozhraní API třetích stran zodpovědný pouze jeden server, protože více serverů může způsobovat problémy při používání rozhraní API.
Tento server je známý jako primární server a postup pro jeho výběr se nazývá volba vůdce. Když hlavní server selže v distribuovaném systému, servery si musí selhání všimnout a vybrat nového vedoucího. Při použití techniky konsensu je tento přístup nejvhodnější pro aplikace s vysokou dostupností a silnou konzistencí.
18. Jaký je váš přístup k navrhování služby zkracování URL podobné TinyURL?
TinyURL transformuje dlouhou URL na jedinou, jedinečnou krátkou URL. Tyto technologie mohou také přijmout krátkou adresu URL a vrátit úplnou adresu URL.
Jaké jsou některé z klíčových vlastností?
- Vytvořte adresu URL, která je kratší než původní.
- Ponechte delší adresu URL a nahraďte ji kratší.
- Povolit přesměrování v krátkých URL.
- Jsou podporovány krátké adresy URL s vlastními názvy.
- Vyřiďte několik dotazů najednou.
Jaké jsou nejčastější problémy?
- Jak máte přehled o úložišti databáze?
- Co se stane, pokud zatížení uživatele překročí očekávání?
- Co když dvě osoby používají stejnou vlastní adresu URL?
Zvažte následující návrhy:
- Hašování je pojem, který lze použít ke spojení starých a nových adres URL.
- REST API lze použít ke zvládnutí front-end komunikace a vyvážení velkého zatížení.
- Multithreading je pojem, který vám umožňuje zpracovávat několik požadavků najednou.
- Původní adresy URL jsou uloženy v databázích NoSQL.
19. Jaký je váš přístup k navrhování twitteru?
Dané požadavky:
- Odesílání tweetů
- Sledování ostatních uživatelů
- Tweet feed/newsfeed
- Systém je škálovatelný
- Načítá se rychle
- Systém je spolehlivý
Když si stanovíte kritéria, můžete začít vymýšlet svůj návrh Twitter API. Takto by to vypadalo:
Pro začátek si načrtneme klíčové koncové body API. Zde je několik příkladů:
- odeslat tweet (zprávu)
- sledovat uživatele (ID uživatele)
- unfollowUser(userID)
- getFeed (stránka)
Poté lze načrtnout architekturu, která tyto vlastnosti umožní. Můžeme začít uživatelem, který odešle serverový požadavek. Můžeme nainstalovat další servery API za nástroj pro vyrovnávání zatížení, který pomáhá směrovat větší úrovně provozu, aby byla splněna potřeba škálovatelnosti. Nyní budeme muset přidat databázi pro ukládání našich tweetů.
Je důležité si uvědomit, že námi poskytované API by mělo být škálovatelné. Aby byla tato služba škálovatelná, můžeme nechat jeden z našich serverů API číst ze samostatné mezipaměti pro náš informační kanál. Přitom bychom také měli používat poskytovatele zdrojů, abychom udržovali naši mezipaměť zdrojů aktuální.
20. Vytvořte systém newsfeed pro Facebook
Newsfeed na Facebooku umožňuje uživatelům vidět, co se děje v kruzích jejich přátel, oblíbených stránkách a organizacích, které sledovali.
Jaké jsou některé základní vlastnosti?
- Vytvořte newsfeed na základě příspěvků od jiných systémových entit, které uživatel sleduje.
- V příspěvcích Newsfeed lze použít text, obrázky, zvuk a video.
- V reálném čase přidávejte nový obsah do kanálu novinek uživatele.
Jaké jsou některé z nejčastějších problémů?
- Co když trvá dlouho, než se nový příspěvek objeví ve zdroji zpráv?
- Dokáže algoritmus zvládnout nárůst aktivity uživatelů?
- Jaké příspěvky by se měly zobrazovat jako první v informačním kanálu?
Zvažte následující návrhy:
- Prozkoumejte mechanismus fanout pro distribuci příspěvků sledujícím.
- Prozkoumejte, jak lze sharding využít k efektivnímu zvládnutí vysoké uživatelské zátěže.
- Data zdroje uživatele by neměla být duplikována na mnoha serverech. Místo toho lze sdílení provést na základě ID uživatelů.
21. Co je vlastnost BASE systému?
Funkce BASE jsou všudypřítomné v databázích NoSQL, které se nedávno objevily. BASE systém neposkytuje konzistenci podle teorému CAP. Toto je vymyšlená zkratka, která odpovídá následující vlastnosti systému podle teorému CAP:
- Pojem „základně dostupný“ znamená, že systém bude neustále dostupný.
- Měkký stav znamená, že stav systému se může v průběhu času měnit, i když není poskytnut žádný vstup. To je způsobeno především konečnou konzistencí modelu.
- Vzhledem k tomu, že systém během tohoto období neobdrží vstupy, případná konzistence znamená, že se systém časem stane konzistentním.
22. Co je to vyvažování zátěže pomocí techniky afinity IP adres?
Další prominentní metodou vyvažování zátěže je afinita IP adres. Při této metodě je IP adresa klienta spojena se serverovým uzlem. Jeden serverový uzel zpracovává všechny požadavky z klientské IP adresy.
Implementace této metody je jednoduchá, protože IP adresa je vždy dostupná v hlavičce HTTP požadavku a není potřeba žádná další nastavení. Pokud mají vaši klienti pravděpodobně deaktivované soubory cookie, může být tato forma vyrovnávání zátěže výhodná.
23. Co přesně jsou algoritmy pro výměnu mezipaměti (neboli zásady pro vyklizení)?
Algoritmy mezipaměti (také známé jako algoritmy náhrady mezipaměti, zásady nahrazení mezipaměti nebo zásady vyřazení mezipaměti) jsou optimalizační pokyny nebo algoritmy, které může počítačový program nebo struktura spravovaná hardwarem použít ke správě mezipaměti dat uložených v počítači.
Ukládání do mezipaměti zvyšuje rychlost ukládáním nedávno používaných nebo často používaných dat v paměťových oblastech, které jsou rychlejší nebo levnější než tradiční úložiště paměti. Když je mezipaměť plná, musí se algoritmus rozhodnout, které položky odstranit, aby bylo možné vytvořit místo pro nové.
24. Co přesně máte na mysli pod pojmem distribuovaná transakce?
Distribuovaná transakce je jakákoliv okolnost, kdy jediná událost způsobí změnu dvou nebo více odlišných zdrojů dat, které nelze provést atomicky.
Ve světě mikroslužeb se to stává mnohem komplikovanějším, protože každá služba je jednotkou práce a většinu času musí mnoho služeb spolupracovat, aby byl podnik úspěšný.
25. Co je to vlastně hladovění?
Když vlákno není schopno získat pravidelný přístup ke sdíleným zdrojům, říká se, že hladoví. K tomu dochází, když „nenasytná“ vlákna nebo vlákna s vyšší „prioritou“ způsobí, že sdílené zdroje budou na dlouhou dobu nedostupné.
Zvažte objekt, který poskytuje synchronizovanou metodu, která se často vrací pozdě. Pokud jedno vlákno opakovaně volá tuto metodu, ostatní vlákna, která vyžadují častý synchronizovaný přístup ke stejnému objektu, budou často zablokována.
Proč investovat do čističky vzduchu?
Brainstorming je vše, co rozhovor o návrhu systému obnáší. V tomto příspěvku jsme se zabývali nejběžnějšími otázkami pohovoru o návrhu systému.
Komplexní pochopení metody, kterou používáte při vytváření konkrétního systému, je rozhodující pro absolvování pohovoru o návrhu systému.
Napsat komentář