Sadržaj[Sakrij][Prikaži]
- 1. Šta mislite pod dizajnom sistema?
- 2. Koje su najvažnije karakteristike dizajnera sistema?
- 3. Šta je tačno CAP teorema?
- 4. Šta podrazumijevate pod balansiranjem opterećenja?
- 5. Koja je razlika između asinhronog programiranja i paralelnog programiranja?
- 6. Koja je razlika između horizontalnog i vertikalnog skaliranja?
- 7. Šta tačno mislite pod kašnjenjem, propusnošću i dostupnošću sistema?
- 8. Koja su svojstva ACID?
- 9. Šta je zapravo sharding?
- 10. Šta je CDN?
- 11. Zašto koristiti CDN?
- 12. Koja je razlika između dijeljenja i particioniranja?
- 13. Šta je tačno keširanje?
- 14. Šta su CDN rubni serveri?
- 15. Koji su različiti obrasci konzistentnosti za dizajn sistema?
- 16. Šta mislite pod optimističnim zaključavanjem?
- 17. Šta tačno mislite pod „izborom lidera“?
- 18. Kakav je vaš pristup dizajniranju usluge skraćivanja URL-a nalik TinyURL-u?
- 19. Kakav je vaš pristup dizajniranju twittera?
- 20. Kreirajte newsfeed sistem za Facebook
- 21. Šta je BASE svojstvo sistema?
- 22. Šta je balansiranje opterećenja sa tehnikom afiniteta IP adresa?
- 23. Šta su zapravo algoritmi zamjene keša (ili politike izbacivanja)?
- 24. Šta tačno mislite pod distribuiranom transakcijom?
- 25. Šta je zapravo gladovanje?
- zaključak
Prije nego što počnete, preporučujemo da pročitate naše uvodni vodič o dizajnu sistema da osvježite svoja osnovna znanja.
Prilikom intervjuisanja za poziciju koja zahtijeva znanje o dizajnu sistema, imate priliku da pričate o svojoj pozadini i pokažete svoju sposobnost da razvijete komplikovane sisteme.
Kada razgovarate s potencijalnim poslodavcem, način na koji izražavate svoju stručnost mogao bi vam pomoći da pokažete da ste kompetentan kandidat za poziciju.
Možete se pripremiti za intervju za posao tako što ćete naučiti osnovne koncepte dizajna i razmisliti o tome kako ćete odgovoriti na upite o njima. Proći ćemo kroz neka tipična pitanja i odgovore na intervjuu za dizajn sistema u ovom postu kako bismo vam pomogli da se pripremite za sljedeći intervju.
1. Šta mislite pod dizajnom sistema?
Proces uspostavljanja karakteristika sistema uključujući module, arhitekturu, komponente i njihove interfejse i podatke zasnovane na unapred određenim kriterijumima poznat je kao dizajn sistema.
To je proces definisanja, kreiranja i dizajniranja sistema koji će zadovoljiti specifične ciljeve i ciljeve kompanije ili organizacije. Dizajn sistema je više o analizi sistema, arhitektonskim obrascima, API-jima, dizajnerskim obrascima i spajanju svega toga nego o kodiranju.
2. Koje su najvažnije karakteristike dizajnera sistema?
- Interakcija korisnika
- Vanjski API poziv
- Offline procesi
3. Šta je tačno CAP teorema?
Prema teoremi CAP (dosljednost-dostupnost-tolerancija particije), distribuirani sistem ne može osigurati C, A i P sve u isto vrijeme. Može dati najviše dva od tri uvjeravanja. Koristimo distribuirani sistem baze podataka da nam pomogne da ovo shvatimo.
- Konzistentnost: Ovo specificira da podaci moraju ostati dosljedni kada se transakcija baze podataka završi. Na primjer, svi upiti bi trebali vratiti isti odgovor nakon ažuriranja baze podataka.
- Dostupnost: baze podataka moraju biti dostupne i reagovane u svakom trenutku.
- Tolerancija particija: Čak i ako komunikacija postane problematična, sistem baze podataka bi trebao nastaviti raditi.
4. Šta podrazumijevate pod balansiranjem opterećenja?
Balansiranje opterećenja je proces efikasnog disperzije dolaznog saobraćaja između skupa pozadinskih servera. Oni se nazivaju spremištima servera. Moderne web stranice su napravljene da obrađuju milione upita kupaca i da na njih odgovore brzo i pouzdano. Više servera će biti potrebno za rješavanje ovih zahtjeva.
U ovom slučaju, ključno je efikasno podijeliti promet zahtjeva između svakog servera kako bi se izbjeglo njihovo preopterećenje. Balansator opterećenja funkcioniše kao saobraćajni policajac, presreće zahteve i usmerava ih između dostupnih servera tako da nijedan server nije preopterećen, potencijalno degradirajući performanse aplikacije.
5. Koja je razlika između asinhronog programiranja i paralelnog programiranja?
Kada bilo šta pokrećete asinhrono, to implicira da ne morate čekati da se završi prije nego što možete preći na nešto drugo. Paralelizam se odnosi na istovremeno izvršavanje mnogih zadataka.
Kada možete podijeliti poslove na različite dijelove rada, paralelizam djeluje efikasno. Async i povratni pozivi su sredstva (alatka ili mehanizam) za predstavljanje konkurentnosti, tj. grupe entiteta koji mogu komunicirati i dijeliti resurse.
6. Koja je razlika između horizontalnog i vertikalnog skaliranja?
Dodavanje nove računarske opreme mreži koja širi zahtjeve za procesiranjem i memorijom preko disperzovane mreže uređaja naziva se horizontalno skaliranje. Jednostavno rečeno, nove instance servera se dodaju trenutnom skupu, a opterećenje saobraćaja se efikasno raspoređuje između ovih uređaja.
Vertikalno skaliranje se odnosi na pojam proširenja kapaciteta resursa jednog računara dodavanjem RAM-a, efikasnih CPU-a ili migracijom na novu mašinu većeg kapaciteta. Funkcionalnost servera se može povećati bez potrebe za bilo kakvim programskim promjenama.
7. Šta tačno mislite pod kašnjenjem, propusnošću i dostupnošću sistema?
Performanse su bitan aspekt dizajna sistema jer doprinose brzini i pouzdanosti naših usluga. Tri najvažnije mjere učinka su sljedeće:
- Vrijeme potrebno za isporuku jedne poruke u milisekundama naziva se kašnjenje.
- Količina podataka uspješno prenesenih kroz sistem u određenom vremenskom periodu naziva se protok. Za mjerenje se koriste bitovi u sekundi.
- Količina vremena u kojem je sistem dostupan da reagira na upite definira se njegovom dostupnošću. Vrijeme neprekidnog rada sistema / (vrijeme rada sistema+vrijeme zastoja) je formula za njegovo izračunavanje.
8. Koja su svojstva ACID?
- Atomičnost: Osigurava da su izmjene baze podataka ili sve ili nikakve.
- Dosljednost: Vrijednosti podataka u bazi podataka su konzistentne.
- Izolacija: Odnosi se na razdvajanje dvije transakcije.
- Trajnost: Podaci se čuvaju čak i ako server pokvari.
9. Šta je zapravo sharding?
Sharding je tehnika podjele ogromnog logičkog skupa podataka u mnoge baze podataka. Odnosi se i na horizontalno dijeljenje podataka jer će podaci biti pohranjeni na nekoliko računala. Kao rezultat toga, zajednička baza podataka može podnijeti više upita nego jedan ogroman računar.
10. Šta je CDN?
Mreža za isporuku sadržaja je svjetska mreža računara koji sarađuju kako bi brzo pružili informacije na Internetu. Omogućava brzu isporuku elemenata kao što su HTML stranice, JavaScript datoteke, stilovi, slike i video zapisi koji su neophodni za učitavanje Internet sadržaja.
11. Zašto koristiti CDN?
- S obzirom da statički resursi čine oko 80% web stranice, usvajanje CDN-a značajno smanjuje opterećenje na izvornom serveru.
- Kako je putovati manje, informacije će se brže dostavljati vlasnicima web stranica koji imaju posjetitelje iz mnogih geografskih područja.
- Korisnici CDN-a također imaju koristi od kapaciteta za brzo povećanje i smanjenje kao odgovor na porast prometa.
12. Koja je razlika između dijeljenja i particioniranja?
Deljenje baze podataka – Deljenje baze podataka je metoda particionisanja jednog skupa podataka u brojne baze podataka tako da se može pohraniti na različitim radnim stanicama. Veći skupovi podataka mogu se razbiti u manje komade i pohraniti u nekoliko čvorova podataka, povećavajući ukupni kapacitet pohrane sistema.
Širenjem podataka na mnogo mašina, zajednička baza podataka može da obradi više upita nego jedan sistem.
Particioniranje baze podataka je proces podjele pohranjenih objekata baze podataka (tablica, indeksa i pogleda) na zasebne dijelove. Za povećanje upravljivosti, performansi i dostupnosti, veliki objekti baze podataka se particioniraju.
U nekim slučajevima, particioniranje može poboljšati brzinu pri pristupu particioniranim podacima. Particioniranje može smanjiti veličinu indeksa i povećati šanse za lociranje najpotrebnijih indeksa u memoriji djelujući kao vodeći stupac u indeksima.
13. Šta je tačno keširanje?
Keširanje je tehnika čuvanja kopija datoteka u privremenom području za pohranu poznatom kao keš, što ubrzava pristup podacima i smanjuje kašnjenje web lokacije. Samo određena količina podataka može se pohraniti u keš memoriju.
Kao rezultat, određivanje tehnika ažuriranja keša koje su najprikladnije za poslovne ciljeve je kritično.
14. Šta su CDN rubni serveri?
CDN serveri koji keširaju materijal stečen od vašeg izvornog servera ili klastera za skladištenje poznati su kao rubni serveri. Tačka prisutnosti je termin koji se često koristi za opisivanje rubnih servera (POP).
Rubni serveri su fizički pozicionirani na POP-u. Na tom POP-u, informacije mogu biti keširane od strane mnogih rubnih servera.
Mogućnost obezbjeđivanja dijelova web stranice sa nekoliko mjesta smanjuje udaljenost između posjetitelja i web servera, što rezultira manjim kašnjenjem. CDN rubni serveri postižu ovaj precizan cilj.
15. Koji su različiti obrasci konzistentnosti za dizajn sistema?
Svaki zahtjev za čitanje trebao bi dohvatiti najnovije napisane podatke, prema CAP teoremi. Kada je dostupno mnogo kopija podataka, njihova sinkronizacija tako da korisnici kontinuirano primaju svježe podatke postaje poteškoća. Slijede mogući obrasci konzistentnosti:
- Slaba konzistentnost: Nakon upisivanja podataka, zahtjev za čitanje može, ali ne mora biti u mogućnosti da dobije ažurirane podatke. Ovaj nivo stabilnosti je idealan za aplikacije u realnom vremenu kao što su VoIP, video ćaskanje i igranje za više igrača.
- Eventualna konzistentnost: Čitanja će na kraju vidjeti najnovije podatke unutar milisekundi nakon što su podaci upisani. Podaci se u ovom slučaju dupliciraju asinhrono. DNS i sistemi e-pošte su primjeri ovoga. Ovo efikasno funkcioniše u sistemima visoke dostupnosti.
- Jaka konzistentnost: Nakon upisivanja podataka, budući čitaoci će vidjeti najnovije podatke. Podaci se u ovom slučaju kopiraju sinhrono. Ovo se može primijetiti u RDBMS-u i sistemima datoteka, koji su prikladni za prijenos podataka.
16. Šta mislite pod optimističnim zaključavanjem?
Optimističko zaključavanje je mehanizam u kojem čitate zapis, zabilježite broj verzije (alternativni načini uključuju datume, vremenske oznake ili kontrolne sume/hešove), a zatim još jednom provjerite da se verzija nije promijenila prije nego što je zapišete nazad.
Kada zapis zapišete nazad, koristite verziju da filtrirate ažuriranje kako biste osigurali da je atomska. (tj. nije promijenjeno između vremena kada provjerite verziju i kada upišete zapis na disk) i ažurirajte ga odjednom.
17. Šta tačno mislite pod „izborom lidera“?
U distribuiranom sistemu sa brojnim serverima koji doprinose dostupnosti aplikacije, može doći do trenutaka kada je samo jedan server odgovoran za ažuriranje API-ja trećih strana, jer više servera može izazvati probleme prilikom korišćenja API-ja.
Ovaj server je poznat kao primarni server, a postupak njegovog odabira poznat je kao izbor lidera. Kada vodeći server pokvari u distribuiranom sistemu, serveri moraju primijetiti kvar i odabrati novog lidera. Koristeći tehniku konsenzusa, ovaj pristup je najprikladniji za aplikacije visoke dostupnosti i jake konzistentnosti.
18. Kakav je vaš pristup dizajniranju usluge skraćivanja URL-a nalik TinyURL-u?
TinyURL pretvara dugi URL u jedan, jedinstveni kratki URL. Ove tehnologije također mogu prihvatiti kratki URL i vratiti potpuni URL.
Koje su neke od ključnih osobina?
- Napravite URL koji je kraći od originala.
- Zadržite duži URL i zamijenite ga kraćim.
- Dozvolite preusmjeravanje u kratkim URL-ovima.
- Podržani su kratki URL-ovi sa prilagođenim nazivima.
- Riješite nekoliko upita odjednom.
Koji su najčešći problemi?
- Kako vodite evidenciju o skladištenju baze podataka?
- Šta se događa ako opterećenje korisnika premaši očekivanja?
- Šta ako dvije osobe koriste isti prilagođeni URL?
Uzmite u obzir sljedeće prijedloge:
- Haširanje je pojam koji se može koristiti za povezivanje starih i novih URL-ova.
- REST API može se koristiti za rukovanje front-end komunikacijom i balansiranje velikog opterećenja.
- Multithreading je pojam koji vam omogućava da obrađujete nekoliko zahtjeva odjednom.
- Originalni URL-ovi se pohranjuju u NoSQL bazama podataka.
19. Kakav je vaš pristup dizajniranju twittera?
Dati zahtjevi:
- Slanje tvitova
- Praćenje drugih korisnika
- Tweet feed/newsfeed
- Sistem je skalabilan
- Učitava se brzo
- Sistem je pouzdan
Možete početi s osmišljavanjem svog Twitter API dizajna kada uspostavite kriterije. Ovako bi izgledalo:
Za početak ćemo skicirati ključne krajnje tačke API-ja. Evo nekoliko primjera:
- pošaljiTweet(poruka)
- followUser(userID)
- unfollowUser(userID)
- getFeed(stranica)
Tada se može skicirati arhitektura koja će omogućiti ove karakteristike. Možemo početi s korisnikom koji podnese zahtjev servera. Možemo instalirati dodatne API servere iza balansera opterećenja kako bismo pomogli u usmjeravanju većeg prometa kako bi se ispunila potreba skalabilnosti. Sada ćemo morati da dodamo bazu podataka za skladištenje naših tvitova.
Važno je zapamtiti da API koji nudimo treba da bude skalabilan. Da bismo ovu uslugu učinili skalabilnom, možemo imati jedan od naših API servera da čita iz zasebne keš memorije za naš newsfeed. Dok to radimo, također bismo trebali koristiti dobavljača feedova kako bismo našu predmemoriju feeda održavali ažurnom.
20. Kreirajte newsfeed sistem za Facebook
Newsfeed na Facebooku omogućava korisnicima da vide šta se dešava u krugovima njihovih prijatelja, omiljenim stranicama i organizacijama koje su pratili.
Koje su neke od bitnih karakteristika?
- Kreirajte newsfeed na osnovu objava drugih sistemskih entiteta koje korisnik prati.
- Tekst, slike, audio i video mogu se koristiti u objavama u Newsfeedu.
- U realnom vremenu, dodajte svježi sadržaj korisnikovom newsfeedu.
Koji su neki od najčešćih problema?
- Šta ako je potrebno mnogo vremena da se novi post pojavi u feedu vijesti?
- Može li algoritam upravljati porastom aktivnosti korisnika?
- Koje objave prvo treba prikazati u novostima?
Uzmite u obzir sljedeće prijedloge:
- Ispitajte mehanizam fanouta za distribuciju objava pratiocima.
- Ispitajte kako se dijeljenje može koristiti za efikasno rukovanje velikim opterećenjem korisnika.
- Podaci korisnika ne bi trebali biti duplicirani na brojnim serverima. Umjesto toga, dijeljenje se može izvršiti na osnovu korisničkih ID-ova.
21. Šta je BASE svojstvo sistema?
BASE karakteristike su sveprisutne u NoSQL bazama podataka koje su se nedavno pojavile. BASE sistem ne pruža konzistentnost, prema CAP teoremi. Ovo je izmišljeni akronim koji odgovara sljedećem svojstvu sistema iz CAP teoreme:
- Izraz "u osnovi dostupan" znači da će sistem biti dostupan u svakom trenutku.
- Meko stanje znači da stanje sistema može varirati tokom vremena, čak i ako nije dat nikakav ulaz. To je uglavnom zbog konačne konzistentnosti modela.
- S obzirom da sistem ne prima podatke tokom tog perioda, konačna konzistentnost znači da će sistem vremenom postati dosljedan.
22. Šta je balansiranje opterećenja sa tehnikom afiniteta IP adresa?
Još jedna istaknuta metoda balansiranja opterećenja je afinitet IP adresa. IP adresa klijenta je povezana sa serverskim čvorom u ovoj metodi. Jedan serverski čvor obrađuje sve zahtjeve sa IP adrese klijenta.
Ova metoda je jednostavna za implementaciju jer je IP adresa uvijek dostupna u zaglavlju HTTP zahtjeva i nisu potrebna nikakva dodatna podešavanja. Ako je vjerovatno da će vaši klijenti deaktivirati kolačiće, ovaj oblik balansiranja opterećenja može biti koristan.
23. Šta su zapravo algoritmi zamjene keša (ili politike izbacivanja)?
Algoritmi keša (takođe poznati kao algoritmi zamjene keša, politike zamjene keša ili politike izbacivanja keša) su instrukcije za optimizaciju ili algoritmi koje kompjuterski program ili struktura koja se održava na hardveru može koristiti za upravljanje keš memorijom podataka pohranjenih na računaru.
Keširanje povećava brzinu pohranjivanjem nedavno korištenih podataka ili podataka kojima se često pristupa u memorijske regije kojima je pristup brži ili jeftiniji od tradicionalne memorije. Kada je keš pun, algoritam mora odlučiti koje stavke će ukloniti kako bi napravio mjesto za nove.
24. Šta tačno mislite pod distribuiranom transakcijom?
Distribuirana transakcija je svaka okolnost u kojoj jedan događaj uzrokuje promjenu dva ili više različitih izvora podataka koji se ne mogu izvršiti atomski.
U svijetu mikrousluga postaje mnogo komplikovanije jer je svaka usluga jedinica rada, a većinu vremena brojne usluge moraju sarađivati kako bi posao bio uspješan.
25. Šta je zapravo gladovanje?
Kada nit nije u mogućnosti steći redovan pristup zajedničkim resursima, kaže se da je gladna. Ovo se dešava kada "pohlepne" niti ili niti sa višim "prioritetom" čine dijeljene resurse nedostupnima na duži vremenski period.
Razmislite o objektu koji pruža sinkroniziranu metodu koja se često vraća sa zakašnjenjem. Ako jedna nit više puta poziva ovu metodu, druge niti koje zahtijevaju čest sinkronizirani pristup istom objektu često će biti blokirane.
zaključak
Brainstorming sesija je sve što intervju za dizajn sistema podrazumijeva. U ovom postu smo se pozabavili najčešćim pitanjima na intervjuu za dizajn sistema.
Sveobuhvatno razumijevanje metode koju koristite kada kreirate određeni sistem je ključno za prolazak intervjua za dizajn sistema.
Ostavite odgovor