Obsah[Skryť][Šou]
- 1. Čo rozumiete pod pojmom návrh systému?
- 2. Aké sú najdôležitejšie vlastnosti projektanta systému?
- 3. Čo je to vlastne veta CAP?
- 4. Čo rozumiete pod pojmom load balancing?
- 5. Aký je rozdiel medzi asynchrónnym programovaním a paralelným programovaním?
- 6. Aký je rozdiel medzi horizontálnym a vertikálnym škálovaním?
- 7. Čo presne máte na mysli pod pojmom latencia, priepustnosť a dostupnosť systému?
- 8. Aké sú vlastnosti ACID?
- 9. Čo je to vlastne sharding?
- 10. Čo je CDN?
- 11. Prečo používať CDN?
- 12. Aký je rozdiel medzi sharding a partitioning?
- 13. Čo je to vlastne ukladanie do vyrovnávacej pamäte?
- 14. Čo sú servery CDN edge?
- 15. Aké sú rôzne vzory konzistencie pre návrh systému?
- 16. Čo myslíš pod pojmom optimistické zamykanie?
- 17. Čo presne máte na mysli pod pojmom „voľba lídra“?
- 18. Aký je váš prístup k navrhovaniu služby skracovania URL podobnej TinyURL?
- 19. Aký je váš prístup k navrhovaniu twitteru?
- 20. Vytvorte newsfeed systém pre Facebook
- 21. Čo je to vlastnosť BASE systému?
- 22. Čo je to vyvažovanie záťaže pomocou techniky afinity adries IP?
- 23. Čo presne sú algoritmy nahradenia vyrovnávacej pamäte (alebo politiky vysťahovania)?
- 24. Čo presne máte na mysli pod pojmom distribuovaná transakcia?
- 25. Čo je to vlastne hladovanie?
- záver
Skôr ako začnete, odporúčame vám prečítať si naše úvodná príručka o návrhu systému osviežiť si základné vedomosti.
Pri pohovore na pozíciu, ktorá si vyžaduje znalosti návrhu systému, máte možnosť porozprávať sa o svojom pozadí a preukázať svoju schopnosť vyvíjať komplikované systémy.
Keď hovoríte s potenciálnym zamestnávateľom, spôsob, akým vyjadrujete svoju odbornosť, vám môže pomôcť preukázať, že ste kompetentným kandidátom na danú pozíciu.
Na pracovný pohovor sa môžete pripraviť tak, že sa naučíte základné koncepty dizajnu a premýšľate o tom, ako budete reagovať na otázky týkajúce sa nich. V tomto príspevku si prejdeme niekoľko typických otázok a odpovedí na pohovor o návrhu systému, ktoré vám pomôžu pripraviť sa na ďalší pohovor.
1. Čo rozumiete pod pojmom návrh systému?
Proces vytvárania charakteristík systému vrátane modulov, architektúry, komponentov a ich rozhraní a údajov na základe vopred stanovených kritérií je známy ako návrh systému.
Je to proces definovania, vytvárania a navrhovania systémov na splnenie špecifických cieľov a zámerov spoločnosti alebo organizácie. Návrh systému je viac o systémovej analýze, architektonických vzoroch, rozhraniach API, návrhových vzoroch a ich spájaní dohromady ako o kódovaní.
2. Aké sú najdôležitejšie vlastnosti projektanta systému?
- Interakcia používateľa
- Externé volanie API
- Offline procesy
3. Čo je to vlastne veta CAP?
Podľa vety CAP (Consistency-Availability-Partition Tolerance) distribuovaný systém nemôže zabezpečiť všetky C, A a P súčasne. Môže poskytnúť maximálne dve z troch záruk. Využime distribuovaný databázový systém, ktorý nám to pomôže pochopiť.
- Konzistencia: Špecifikuje, že údaje musia zostať konzistentné po dokončení databázovej transakcie. Napríklad po aktualizácii databázy by všetky dotazy mali vrátiť rovnakú odpoveď.
- Dostupnosť: Databázy musia byť vždy dostupné a musia reagovať.
- Tolerancia oddielov: Aj keď sa komunikácia stane problematickou, databázový systém by mal naďalej fungovať.
4. Čo rozumiete pod pojmom load balancing?
Rozdelenie výkonu je proces efektívneho rozdeľovania prichádzajúcej prevádzky medzi množinu backendových serverov. Tieto sa označujú ako serverové oblasti. Moderné webové stránky sú vytvorené tak, aby zvládli milióny dopytov od zákazníkov a rýchlo a spoľahlivo na ne odpovedali. Na zvládnutie týchto požiadaviek bude potrebných viac serverov.
V tomto prípade je dôležité efektívne rozdeliť prevádzku požiadaviek medzi každý server, aby sa predišlo ich nadmernému zaťaženiu. Nástroj na vyrovnávanie záťaže funguje ako dopravný policajt, ktorý zachytáva požiadavky a smeruje ich medzi dostupné servery, takže žiadny server nie je preťažený, čo potenciálne znižuje výkon aplikácie.
5. Aký je rozdiel medzi asynchrónnym programovaním a paralelným programovaním?
Keď spustíte čokoľvek asynchrónne, znamená to, že nemusíte čakať na dokončenie, kým budete môcť pokračovať v niečom inom. Paralelizmus sa vzťahuje na súčasné vykonávanie mnohých úloh.
Keď môžete rozdeliť úlohy na rôzne časti práce, paralelizmus funguje efektívne. Async a Callbacks sú prostriedkom (nástrojom alebo mechanizmom) na reprezentáciu súbežnosti, teda skupiny subjektov, ktoré by mohli komunikovať a zdieľať zdroje.
6. Aký je rozdiel medzi horizontálnym a vertikálnym škálovaním?
Pridanie nového výpočtového zariadenia do siete, ktorá rozloží požiadavky na spracovanie a pamäť cez rozptýlenú sieť zariadení, sa nazýva horizontálne škálovanie. Jednoducho povedané, do aktuálneho fondu sa pridávajú nové inštancie servera a prevádzkové zaťaženie sa efektívne rozdeľuje medzi tieto zariadenia.
Vertikálne škálovanie sa vzťahuje na myšlienku rozšírenia kapacity prostriedkov jedného počítača pridaním pamäte RAM, efektívnych CPU alebo migráciou na nový počítač s vyššou kapacitou. Funkcionalitu servera je možné zvýšiť bez potreby akýchkoľvek programových zmien.
7. Čo presne máte na mysli pod pojmom latencia, priepustnosť a dostupnosť systému?
Výkon je základným aspektom návrhu systému, pretože prispieva k rýchlosti a spoľahlivosti našich služieb. Tri najdôležitejšie ukazovatele výkonnosti sú nasledovné:
- Čas potrebný na doručenie jednej správy v milisekundách sa nazýva latencia.
- Množstvo údajov úspešne prenesených systémom v určitom časovom období sa označuje ako priepustnosť. Na meranie sa používajú bity za sekundu.
- Čas, počas ktorého je systém k dispozícii na reakciu na otázky, je definovaný jeho dostupnosťou. Doba prevádzkyschopnosti systému / (Doba prevádzky systému + Doba odstávky) je vzorec na jej výpočet.
8. Aké sú vlastnosti ACID?
- Atomicita: Zabezpečuje, že zmeny databázy sú buď všetky, alebo žiadne.
- Konzistencia: Hodnoty údajov v databáze sú konzistentné.
- Izolácia: Vzťahuje sa na oddelenie dvoch transakcií.
- Trvanlivosť: Údaje sa zachovajú aj v prípade zlyhania servera.
9. Čo je to vlastne sharding?
Sharding je technika rozdelenia obrovského logického súboru údajov do mnohých databáz. Vzťahuje sa to aj na horizontálne rozdelenie údajov, pretože údaje budú uložené na niekoľkých počítačoch. Výsledkom je, že zdieľaná databáza dokáže spracovať viac dotazov ako jeden obrovský počítač.
10. Čo je CDN?
Sieť na doručovanie obsahu je celosvetová sieť počítačov, ktoré spolupracujú na rýchlom poskytovaní internetových informácií. Umožňuje rýchle doručenie prvkov, ako sú stránky HTML, súbory JavaScript, šablóny so štýlmi, obrázky a videá, ktoré sú potrebné na načítanie internetového obsahu.
11. Prečo používať CDN?
- Vzhľadom na to, že statické zdroje tvoria približne 80 % webovej stránky, prijatie CDN výrazne znižuje zaťaženie pôvodného servera.
- Keďže cesta je menšia, informácie budú rýchlejšie poskytnuté vlastníkom webových stránok, ktorí majú návštevníkov z mnohých geografických oblastí.
- Používatelia sietí CDN tiež ťažia z kapacity rýchleho zvyšovania a znižovania v reakcii na nárast prevádzky.
12. Aký je rozdiel medzi sharding a partitioning?
Zdieľanie databáz – Zdieľanie databázy je metóda rozdelenia jednej množiny údajov do mnohých databáz, aby sa dala uložiť na rôznych pracovných staniciach. Väčšie množiny údajov možno rozdeliť na menšie časti a uložiť do niekoľkých údajových uzlov, čím sa zvýši celková úložná kapacita systému.
Vďaka šíreniu údajov medzi mnohými počítačmi môže zdieľaná databáza spracovať viac dopytov ako jeden systém.
Rozdelenie databázy je proces rozdelenia uložených databázových objektov (tabuľky, indexy a zobrazenia) na samostatné časti. Na zvýšenie ovládateľnosti, výkonu a dostupnosti sú veľké databázové objekty rozdelené na oddiely.
V niektorých prípadoch môže rozdelenie zvýšiť rýchlosť pri prístupe k údajom s oddielmi. Rozdelenie na oddiely môže zmenšiť veľkosť indexu a zvýšiť šancu na nájdenie najpotrebnejších indexov v pamäti tým, že funguje ako vedúci stĺpec v indexoch.
13. Čo je to vlastne ukladanie do vyrovnávacej pamäte?
Ukladanie do vyrovnávacej pamäte je technika uchovávania kópií súborov v dočasnom ukladacom priestore známom ako vyrovnávacia pamäť, čo zrýchľuje prístup k údajom a znižuje latenciu lokality. Do vyrovnávacej pamäte je možné uložiť iba určité množstvo údajov.
V dôsledku toho je rozhodujúce určiť techniky aktualizácie vyrovnávacej pamäte, ktoré sú najvhodnejšie pre obchodné ciele.
14. Čo sú to servery CDN edge?
Servery CDN, ktoré ukladajú do vyrovnávacej pamäte materiál získaný z vášho pôvodného servera alebo úložného klastra, sú známe ako okrajové servery. Bod prítomnosti je termín, ktorý sa často používa na opis okrajových serverov (POP).
Okrajové servery sú fyzicky umiestnené na POP. Pri tomto POP môžu byť informácie uložené do vyrovnávacej pamäte mnohými okrajovými servermi.
Možnosť poskytovať sekcie webovej stránky z viacerých miest znižuje vzdialenosť medzi návštevníkom a webovým serverom, čo vedie k nižšej latencii. Servery CDN edge dosahujú tento presný cieľ.
15. Aké sú rôzne vzory konzistencie pre návrh systému?
Každá požiadavka na čítanie by mala získať najnovšie zapísané údaje podľa vety CAP. Keď je k dispozícii veľa kópií údajov, ich synchronizácia tak, aby zákazníci dostávali neustále čerstvé údaje, sa stáva problémom. Nasledujú možné vzory konzistencie:
- Slabá konzistencia: Po zápise údajov môže alebo nemusí byť požiadavka na čítanie schopná získať aktualizované údaje. Táto úroveň stability je ideálna pre aplikácie v reálnom čase, ako je VoIP, videorozhovor a hranie hier pre viacerých hráčov.
- Prípadná konzistencia: Čítania nakoniec zobrazia najnovšie údaje v priebehu milisekúnd po zapísaní údajov. Údaje sú v tomto prípade duplikované asynchrónne. DNS a e-mailové systémy sú toho príkladom. Toto funguje efektívne v systémoch s vysokou dostupnosťou.
- Silná konzistencia: Po zápise údajov budú budúci čitatelia zobrazovať najnovšie údaje. Údaje sa v tomto prípade skopírujú synchrónne. To možno pozorovať v RDBMS a súborových systémoch, ktoré sú vhodné na prenosy údajov.
16. Čo myslíš pod pojmom optimistické zamykanie?
Optimistické uzamykanie je mechanizmus, v ktorom si prečítate záznam, zaznamenáte si číslo verzie (alternatívne spôsoby zahŕňajú dátumy, časové pečiatky alebo kontrolné súčty/hash) a potom dvakrát skontrolujete, či sa verzia nezmenila predtým, ako ju zapíšete späť.
Keď záznam zapíšete späť, použijete verziu na filtrovanie aktualizácie, aby ste sa uistili, že je atómová. (tj medzi skontrolovaním verzie a zápisom záznamu na disk sa nezmenil) a aktualizujte ho naraz.
17. Čo presne máte na mysli pod pojmom „voľba lídra“?
V distribuovanom systéme s mnohými servermi, ktoré prispievajú k dostupnosti aplikácie, môžu nastať situácie, keď je za aktualizáciu API tretích strán zodpovedný iba jeden server, pretože viaceré servery môžu spôsobiť problémy pri používaní API.
Tento server je známy ako primárny server a postup jeho výberu je známy ako voľba lídra. Keď vedúci server zlyhá v distribuovanom systéme, servery si musia zlyhanie všimnúť a vybrať nového vedúceho. Pomocou techniky konsenzu je tento prístup najvhodnejší pre aplikácie s vysokou dostupnosťou a silnou konzistenciou.
18. Aký je váš prístup k navrhovaniu služby skracovania URL podobnej TinyURL?
TinyURL transformuje dlhú URL na jedinú, jedinečnú krátku URL. Tieto technológie môžu tiež akceptovať krátku adresu URL a vrátiť úplnú adresu URL.
Aké sú niektoré z kľúčových vlastností?
- Vytvorte webovú adresu, ktorá je kratšia ako originál.
- Ponechajte dlhšiu adresu URL a nahraďte ju kratšou.
- Povoliť presmerovanie v krátkych adresách URL.
- Krátke adresy URL s vlastnými názvami sú podporované.
- Vybavte niekoľko otázok naraz.
Aké sú najčastejšie problémy?
- Ako máte prehľad o úložisku databázy?
- Čo sa stane, ak zaťaženie používateľa prekročí očakávania?
- Čo ak dve osoby používajú rovnakú vlastnú adresu URL?
Zvážte nasledujúce návrhy:
- Hašovanie je pojem, ktorý možno použiť na prepojenie starých a nových adries URL.
- REST API možno použiť na zvládnutie front-endovej komunikácie a vyváženie veľkého zaťaženia.
- Multithreading je pojem, ktorý vám umožňuje spracovať niekoľko požiadaviek naraz.
- Pôvodné adresy URL sú uložené v databázach NoSQL.
19. Aký je váš prístup k navrhovaniu twitteru?
Dané požiadavky:
- Odosielanie tweetov
- Sledovanie ostatných používateľov
- Tweet feed/newsfeed
- Systém je škálovateľný
- Načítava sa rýchlo
- Systém je spoľahlivý
Keď si stanovíte kritériá, môžete začať vymýšľať svoj návrh rozhrania Twitter API. Takto by to vyzeralo:
Na začiatok si načrtneme kľúčové koncové body API. Tu je niekoľko príkladov:
- odoslaťTweet (správa)
- followUser(userID)
- unfollowUser(userID)
- getFeed (stránka)
Potom je možné načrtnúť architektúru, ktorá umožní tieto vlastnosti. Môžeme začať s používateľom, ktorý odošle požiadavku na server. Môžeme nainštalovať ďalšie servery API za vyrovnávač zaťaženia, aby sme pomohli smerovať väčšie úrovne prevádzky, aby sa splnila potreba škálovateľnosti. Teraz budeme musieť pridať databázu na ukladanie našich tweetov.
Je dôležité mať na pamäti, že API, ktoré poskytujeme, by malo byť škálovateľné. Aby bola táto služba škálovateľná, môžeme nechať čítať jeden z našich serverov API zo samostatnej vyrovnávacej pamäte pre náš informačný kanál. Pritom by sme mali používať aj poskytovateľa informačných kanálov, aby bola naša vyrovnávacia pamäť informačných kanálov aktualizovaná.
20. Vytvorte newsfeed systém pre Facebook
Newsfeed na Facebooku umožňuje používateľom vidieť, čo sa deje v kruhoch ich priateľov, obľúbených stránkach a organizáciách, ktoré sledujú.
Aké sú niektoré zo základných charakteristík?
- Vytvorte newsfeed na základe príspevkov od iných systémových subjektov, ktoré používateľ sleduje.
- Text, obrázky, zvuk a video je možné použiť v príspevkoch Newsfeed.
- V reálnom čase pridajte nový obsah do informačného kanála používateľa.
Aké sú niektoré z najbežnejších problémov?
- Čo ak sa nový príspevok zobrazí v informačnom kanáli dlho?
- Dokáže algoritmus zvládnuť prudký nárast aktivity používateľov?
- Aké príspevky by sa mali zobraziť ako prvé v informačnom kanáli?
Zvážte nasledujúce návrhy:
- Preskúmajte mechanizmus fanout na distribúciu príspevkov sledovateľom.
- Preskúmajte, ako možno použiť sharding na efektívne zvládnutie vysokého používateľského zaťaženia.
- Údaje informačného kanála používateľa by sa nemali duplikovať na mnohých serveroch. Zdieľanie je možné namiesto toho vykonať na základe ID používateľov.
21. Čo je to vlastnosť BASE systému?
Funkcie BASE sú všadeprítomné v databázach NoSQL, ktoré sa nedávno objavili. BASE systém neposkytuje konzistentnosť podľa vety CAP. Toto je vymyslená skratka, ktorá zodpovedá nasledujúcej vlastnosti systému podľa vety CAP:
- Pojem „v zásade dostupný“ znamená, že systém bude dostupný kedykoľvek.
- Mäkký stav znamená, že stav systému sa môže v priebehu času meniť, aj keď nie je poskytnutý žiadny vstup. Je to spôsobené najmä prípadnou konzistentnosťou modelu.
- Vzhľadom na to, že systém počas tohto obdobia nedostáva vstupy, prípadná konzistentnosť znamená, že systém sa časom stane konzistentným.
22. Čo je to vyvažovanie záťaže pomocou techniky afinity adries IP?
Ďalšou prominentnou metódou vyrovnávania záťaže je afinita IP adries. Pri tejto metóde je IP adresa klienta spojená so serverovým uzlom. Jeden serverový uzol spracováva všetky požiadavky z klientskej IP adresy.
Táto metóda je jednoduchá na implementáciu, pretože IP adresa je vždy dostupná v hlavičke HTTP požiadavky a nie sú potrebné žiadne ďalšie nastavenia. Ak je pravdepodobné, že vaši klienti budú mať súbory cookie deaktivované, táto forma vyrovnávania záťaže môže byť výhodná.
23. Čo presne sú algoritmy nahradenia vyrovnávacej pamäte (alebo politiky vysťahovania)?
Algoritmy vyrovnávacej pamäte (známe aj ako algoritmy nahradenia vyrovnávacej pamäte, zásady nahradenia vyrovnávacej pamäte alebo zásady vymazania vyrovnávacej pamäte) sú optimalizačné pokyny alebo algoritmy, ktoré môže počítačový program alebo hardvérom udržiavaná štruktúra použiť na správu vyrovnávacej pamäte údajov uložených v počítači.
Ukladanie do vyrovnávacej pamäte zvyšuje rýchlosť ukladaním nedávno používaných alebo často používaných údajov v pamäťových oblastiach, ku ktorým je prístup rýchlejší alebo lacnejší ako tradičné ukladanie pamäte. Keď je vyrovnávacia pamäť plná, algoritmus sa musí rozhodnúť, ktoré položky odstrániť, aby sa vytvorilo miesto pre nové.
24. Čo presne máte na mysli pod pojmom distribuovaná transakcia?
Distribuovaná transakcia je akákoľvek okolnosť, pri ktorej jedna udalosť spôsobí zmenu dvoch alebo viacerých odlišných zdrojov údajov, ktoré nemožno vykonať atómovo.
Vo svete mikroslužieb sa to stáva oveľa komplikovanejším, pretože každá služba je jednotkou práce a väčšinou musia mnohé služby spolupracovať, aby bol podnik úspešný.
25. Čo je to vlastne hladovanie?
Keď vlákno nie je schopné získať pravidelný prístup k zdieľaným zdrojom, hovorí sa, že hladuje. K tomu dochádza, keď „nenásytné“ vlákna alebo vlákna s vyššou „prioritou“ spôsobia, že zdieľané zdroje budú na dlhé časové obdobia nedostupné.
Zvážte objekt, ktorý poskytuje synchronizovanú metódu, ktorá sa často vracia neskoro. Ak jedno vlákno opakovane volá túto metódu, ostatné vlákna, ktoré vyžadujú častý synchronizovaný prístup k rovnakému objektu, budú často zablokované.
záver
Brainstorming je všetko, čo rozhovor o návrhu systému zahŕňa. V tomto príspevku sme sa zaoberali najbežnejšími otázkami v rámci rozhovorov o návrhu systému.
Komplexné pochopenie metódy, ktorú používate pri vytváraní špecifického systému, je rozhodujúce pre absolvovanie pohovoru System Design.
Nechaj odpoveď