Pregled sadržaja[Sakriti][Pokazati]
- 1. Što podrazumijevate pod dizajnom sustava?
- 2. Koje su najvažnije karakteristike dizajnera sustava?
- 3. Što je točno CAP teorem?
- 4. Što podrazumijevate pod uravnoteženjem opterećenja?
- 5. Koja je razlika između asinkronog i paralelnog programiranja?
- 6. Koja je razlika između vodoravnog i okomitog skaliranja?
- 7. Što točno mislite pod kašnjenjem, propusnošću i dostupnošću sustava?
- 8. Što su svojstva KISELINE?
- 9. Što je zapravo šarding?
- 10. Što je CDN?
- 11. Zašto koristiti CDN?
- 12. Koja je razlika između dijeljenja i particioniranja?
- 13. Što je točno predmemoriranje?
- 14. Što su CDN rubni poslužitelji?
- 15. Koji su različiti obrasci dosljednosti za dizajn sustava?
- 16. Što podrazumijevate pod optimističnim zaključavanjem?
- 17. Što točno mislite pod "izborom vođe"?
- 18. Kakav je vaš pristup dizajniranju usluge skraćivanja URL-a nalik TinyURL-u?
- 19. Kakav je vaš pristup dizajniranju twittera?
- 20. Kreirajte newsfeed sustav za Facebook
- 21. Što je BASE svojstvo sustava?
- 22. Što je balansiranje opterećenja s tehnikom srodnosti IP adrese?
- 23. Što su točno algoritmi zamjene predmemorije (ili politike izbacivanja)?
- 24. Što točno mislite pod distribuiranom transakcijom?
- 25. Što je zapravo gladovanje?
- Zaključak
Prije nego počnete, preporučujemo da pročitate naš uvodni vodič o dizajnu sustava da osvježite svoje osnovno znanje.
Prilikom intervjua za poziciju koja zahtijeva znanje o dizajnu sustava, imate priliku govoriti o svojoj pozadini i pokazati svoju sposobnost razvoja kompliciranih sustava.
Kada razgovarate s potencijalnim poslodavcem, način na koji izražavate svoju stručnost može vam pomoći da pokažete da ste kompetentan kandidat za to radno mjesto.
Možete se pripremiti za razgovor za posao tako što ćete naučiti osnovne koncepte dizajna i razmisliti o tome kako ćete odgovoriti na upite o njima. U ovom ćemo postu proći kroz neka tipična pitanja i odgovore na intervjuu za dizajn sustava kako bismo vam pomogli da se pripremite za sljedeći intervju.
1. Što podrazumijevate pod dizajnom sustava?
Proces uspostavljanja karakteristika sustava uključujući module, arhitekturu, komponente i njihova sučelja te podatke na temelju unaprijed određenih kriterija poznat je kao dizajn sustava.
To je proces definiranja, stvaranja i projektiranja sustava koji ispunjavaju specifične ciljeve tvrtke ili organizacije. Dizajn sustava više se odnosi na analizu sustava, arhitektonske uzorke, API-je, uzorke dizajna i spajanje svega toga nego na kodiranje.
2. Koje su najvažnije karakteristike dizajnera sustava?
- Interakcija korisnika
- Vanjski API poziv
- Offline procesi
3. Što je točno CAP teorem?
Prema teoremu CAP (Consistency-Availability-Partition Tolerance), distribuirani sustav ne može osigurati C, A i P u isto vrijeme. Može isporučiti najviše dva od tri jamstva. Upotrijebimo distribuirani sustav baze podataka da nam pomogne da to shvatimo.
- Dosljednost: Ovo navodi da podaci moraju ostati dosljedni nakon što se transakcija baze podataka završi. Na primjer, svi bi upiti trebali vratiti isti odgovor nakon ažuriranja baze podataka.
- Dostupnost: baze podataka moraju biti dostupne i osjetljive u svakom trenutku.
- Tolerancija particije: Čak i ako komunikacija postane problematična, sustav baze podataka trebao bi nastaviti raditi.
4. Što podrazumijevate pod uravnoteženjem opterećenja?
Balansiranje opterećenja je proces učinkovite disperzije dolaznog prometa među skupom pozadinskih poslužitelja. Oni se nazivaju skupovi poslužitelja. Moderne web stranice izgrađene su za obradu milijuna upita kupaca i brzo i pouzdano na njih odgovaraju. Bit će potrebno više poslužitelja za rješavanje ovih zahtjeva.
U ovom je slučaju ključno učinkovito podijeliti promet zahtjeva između svakog poslužitelja kako bi se izbjeglo njihovo preopterećenje. Balansiranje opterećenja funkcionira kao prometni policajac, presreće zahtjeve i usmjerava ih između dostupnih poslužitelja tako da niti jedan poslužitelj nije preopterećen, što potencijalno degradira performanse aplikacije.
5. Koja je razlika između asinkronog i paralelnog programiranja?
Kada bilo što pokrenete asinkrono, to znači da ne morate čekati da završi prije nego što možete prijeći na nešto drugo. Paralelizam se odnosi na istovremeno izvršavanje mnogih zadataka.
Kada možete razdvojiti poslove na različite dijelove rada, paralelizam djeluje učinkovito. Async i Callbackovi su sredstva (alat ili mehanizam) za predstavljanje istovremenosti, tj. grupe entiteta koji bi mogli komunicirati i dijeliti resurse.
6. Koja je razlika između vodoravnog i okomitog skaliranja?
Dodavanje nove računalne opreme mreži koja širi zahtjeve za obradu i memoriju preko disperzirane mreže uređaja naziva se horizontalnim skaliranjem. Jednostavno rečeno, nove instance poslužitelja dodaju se trenutnom skupu, a opterećenje prometa učinkovito se raspoređuje između tih uređaja.
Vertikalno skaliranje odnosi se na pojam proširenja kapaciteta resursa jednog računala dodavanjem RAM-a, učinkovitih CPU-a ili prelaskom na novi stroj s većim kapacitetom. Funkcionalnost poslužitelja može se povećati bez potrebe za programskim promjenama.
7. Što točno mislite pod kašnjenjem, propusnošću i dostupnošću sustava?
Izvedba je bitan aspekt dizajna sustava budući da pridonosi 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 latencija.
- Količina podataka uspješno prenesenih kroz sustav u određenom vremenskom razdoblju naziva se propusnost. Za mjerenje se koriste bitovi u sekundi.
- Količina vremena u kojem je sustav dostupan za reagiranje na upite definirana je njegovom dostupnošću. Vrijeme rada sustava / (vrijeme rada sustava + vrijeme prekida) je formula za izračun.
8. Što su svojstva KISELINE?
- Atomičnost: osigurava da su izmjene baze podataka ili sve ili nikakve.
- Dosljednost: Vrijednosti podataka u bazi podataka su dosljedne.
- Izolacija: Odnosi se na odvajanje dviju transakcija.
- Trajnost: Podaci se čuvaju čak i ako poslužitelj zakaže.
9. Što je zapravo šarding?
Sharding je tehnika dijeljenja ogromnog logičkog skupa podataka u mnogo baza podataka. Također se odnosi na horizontalno dijeljenje podataka jer će podaci biti pohranjeni na nekoliko računala. Kao rezultat toga, zajednička baza podataka može obraditi više upita od jednog ogromnog računala.
10. Što je CDN?
Mreža za isporuku sadržaja svjetska je mreža računala koja surađuju kako bi brzo pružila internetske informacije. Omogućuje brzu isporuku elemenata kao što su HTML stranice, JavaScript datoteke, stilske tablice, slike i videozapisi koji su potrebni za učitavanje internetskog sadržaja.
11. Zašto koristiti CDN?
- S obzirom na to da statički resursi čine oko 80% web stranice, usvajanje CDN-a značajno smanjuje opterećenje izvornog poslužitelja.
- Budući da postoji manja udaljenost za putovanje, informacije će se brže pružati vlasnicima web stranica koji imaju posjetitelje iz mnogih zemljopisnih područja.
- Korisnici CDN-ova također imaju koristi od kapaciteta brzog povećanja i smanjenja kao odgovor na porast prometa.
12. Koja je razlika između dijeljenja i particioniranja?
Dijeljenje baze podataka – Dijeljenje baze podataka metoda je particioniranja jednog skupa podataka u brojne baze podataka tako da se može pohraniti na različitim radnim stanicama. Veći skupovi podataka mogu se podijeliti u manje dijelove i pohraniti u nekoliko podatkovnih čvorova, povećavajući ukupni kapacitet pohrane sustava.
Širenjem podataka na više strojeva, zajednička baza podataka može obraditi više upita od jednog sustava.
Particioniranje baze podataka je proces dijeljenja pohranjenih objekata baze podataka (tablica, indeksa i prikaza) u zasebne dijelove. Da bi se povećala upravljivost, performanse i dostupnost, veliki objekti baze podataka su particionirani.
U nekim slučajevima particioniranje može poboljšati brzinu pristupa particioniranim podacima. Particioniranje može smanjiti veličinu indeksa i povećati mogućnost lociranja najpotrebnijih indeksa u memoriji djelujući kao vodeći stupac u indeksima.
13. Što je točno predmemoriranje?
Predmemorija je tehnika čuvanja kopija datoteka u privremenom prostoru za pohranu poznatom kao predmemorija, koja ubrzava pristup podacima i smanjuje kašnjenje stranice. U predmemoriju se može pohraniti samo određena količina podataka.
Kao rezultat toga, ključno je određivanje tehnika ažuriranja predmemorije koje su najprikladnije za poslovne ciljeve.
14. Što su CDN rubni poslužitelji?
CDN poslužitelji koji predmemoriraju materijal stečen s vašeg izvornog poslužitelja ili klastera za pohranu poznati su kao rubni poslužitelji. Točka prisutnosti je izraz koji se često koristi za opisivanje rubnih poslužitelja (POP).
Rubni poslužitelji fizički su postavljeni na POP. Na tom POP-u informacije bi mogle biti predmemorirane od strane mnogih rubnih poslužitelja.
Mogućnost pružanja odjeljaka web stranice s nekoliko mjesta smanjuje udaljenost između posjetitelja i web poslužitelja, što rezultira nižom latencijom. CDN rubni poslužitelji postižu upravo ovaj cilj.
15. Koji su različiti obrasci dosljednosti za dizajn sustava?
Svaki zahtjev za čitanje trebao bi dohvatiti najnovije zapisane podatke, prema CAP teoremu. Kada je dostupno mnogo kopija podataka, njihova sinkronizacija tako da klijenti kontinuirano primaju svježe podatke postaje poteškoća. Sljedeći su mogući obrasci dosljednosti:
- Slaba dosljednost: Nakon pisanja podataka, zahtjev za čitanje može ili ne mora moći dobiti ažurirane podatke. Ova razina stabilnosti idealna je za aplikacije u stvarnom vremenu kao što su VoIP, video chat i igranje s više igrača.
- Eventualna dosljednost: Reads će na kraju vidjeti najnovije podatke unutar milisekundi nakon što su podaci zapisani. Podaci se u ovom slučaju dupliciraju asinkrono. DNS i sustavi e-pošte primjeri su toga. Ovo učinkovito funkcionira u sustavima s visokom dostupnošću.
- Jaka dosljednost: Nakon upisa podataka, budući čitatelji će vidjeti najnovije podatke. Podaci se u ovom slučaju kopiraju sinkrono. To se može primijetiti u RDBMS-u i sustavima datoteka, koji su prikladni za prijenos podataka.
16. Što podrazumijevate pod optimističnim zaključavanjem?
Optimističko zaključavanje je mehanizam u kojem čitate zapis, bilježite broj verzije (alternativni načini uključuju datume, vremenske oznake ili kontrolne zbrojeve/raspršivanja), a zatim još jednom provjerite da se verzija nije promijenila prije nego što je vratite.
Kada zapišete zapis natrag, koristite verziju za filtriranje ažuriranja kako biste osigurali da je atomsko. (tj. nije promijenjeno između trenutka kada ste provjerili verziju i kada ste zapisali zapis na disk) i ažurirajte ga sve odjednom.
17. Što točno mislite pod "izborom vođe"?
U distribuiranom sustavu s brojnim poslužiteljima koji doprinose dostupnosti aplikacije, ponekad je samo jedan poslužitelj odgovoran za ažuriranje API-ja trećih strana, budući da više poslužitelja može uzrokovati probleme pri korištenju API-ja.
Ovaj poslužitelj poznat je kao primarni poslužitelj, a postupak za njegov odabir poznat je kao izbor vođe. Kada glavni poslužitelj zakaže u distribuiranom sustavu, poslužitelji moraju primijetiti kvar i odabrati novog lidera. Koristeći tehniku konsenzusa, ovaj pristup je najprikladniji za aplikacije visoke dostupnosti i jake dosljednosti.
18. Kakav je vaš pristup dizajniranju usluge skraćivanja URL-a nalik TinyURL-u?
TinyURL pretvara dugački URL u jedan jedinstveni kratki URL. Ove tehnologije također mogu prihvatiti kratki URL i vratiti potpuni URL.
Koje su neke od ključnih kvaliteta?
- Napravite URL koji je kraći od izvornika.
- Zadržite dulji URL i zamijenite ga kraćim.
- Omogućuje preusmjeravanje u kratkim URL-ovima.
- Podržani su kratki URL-ovi s prilagođenim nazivima.
- Obradite nekoliko upita odjednom.
Koji su najzastupljeniji problemi?
- Kako pratite pohranu baze podataka?
- Što se događa ako opterećenje korisnika premaši očekivanja?
- Što ako dvije osobe koriste isti prilagođeni URL?
Razmotrite sljedeće prijedloge:
- Raspršivanje 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 ravnotežu velikog opterećenja.
- Multithreading je pojam koji vam omogućuje rukovanje s nekoliko zahtjeva odjednom.
- Izvorni URL-ovi pohranjeni su u NoSQL bazama podataka.
19. Kakav je vaš pristup dizajniranju twittera?
Dani zahtjevi:
- Slanje tweetova
- Praćenje drugih korisnika
- Tweet feed/newsfeed
- Sustav je skalabilan
- Brzo se učitava
- Sustav je pouzdan
Možete početi smišljati svoj Twitter API dizajn kada utvrdite kriterije. Ovako bi to izgledalo:
Za početak ćemo skicirati ključne krajnje točke API-ja. Evo nekoliko primjera:
- pošaljiTweet(poruka)
- followUser(userID)
- prestani pratiti korisnika (ID korisnika)
- getFeed(stranica)
Tada se može skicirati arhitektura koja će omogućiti te karakteristike. Možemo započeti s korisnikom koji podnese zahtjev poslužitelju. Možemo instalirati dodatne API poslužitelje iza balansera opterećenja kako bismo pomogli u usmjeravanju većih razina prometa kako bismo ispunili potrebu skalabilnosti. Sada ćemo morati dodati bazu podataka za pohranu naših tweetova.
Važno je zapamtiti da API koji nudimo treba biti skalabilan. Kako bismo ovu uslugu učinili skalabilnom, jedan od naših API poslužitelja može čitati iz zasebne predmemorije za naš feed vijesti. Dok to činimo, također bismo trebali koristiti dobavljača feeda kako bismo našu predmemoriju feeda održavali ažurnom.
20. Kreirajte newsfeed sustav za Facebook
Newsfeed na Facebooku omogućuje korisnicima da vide što se događa u krugovima njihovih prijatelja, omiljenim stranicama i organizacijama koje prate.
Koje su neke od bitnih karakteristika?
- Stvorite newsfeed na temelju objava drugih entiteta sustava koje korisnik prati.
- Tekst, slike, audio i video mogu se koristiti u objavama Newsfeeda.
- U stvarnom vremenu dodajte svježi sadržaj korisnikovom newsfeedu.
Koji su neki od najčešćih problema?
- Što ako novom postu treba dugo da se pojavi u feedu vijesti?
- Može li algoritam upravljati skokom aktivnosti korisnika?
- Koje bi postove trebale biti prve prikazane u feedu vijesti?
Razmotrite sljedeće prijedloge:
- Ispitajte fanout mehanizam za distribuciju objava sljedbenicima.
- Ispitajte kako se dijeljenje može koristiti za učinkovito rukovanje velikim korisničkim opterećenjem.
- Podaci feeda korisnika ne bi se trebali duplicirati na brojnim poslužiteljima. Umjesto toga, dijeljenje se može izvršiti na temelju korisničkih ID-ova.
21. Što je BASE svojstvo sustava?
Značajke BASE su sveprisutne u NoSQL bazama podataka koje su se nedavno pojavile. Sustav BASE ne osigurava dosljednost, prema CAP teoremu. Ovo je izmišljeni akronim koji odgovara sljedećem svojstvu sustava CAP teorema:
- Izraz "u osnovi dostupan" znači da će sustav biti dostupan u svakom trenutku.
- Meko stanje znači da stanje sustava može varirati tijekom vremena, čak i ako nema unosa. To je uglavnom zbog konačne dosljednosti modela.
- S obzirom da sustav ne prima ulazne podatke tijekom tog razdoblja, eventualna konzistentnost znači da će sustav postati konzistentan tijekom vremena.
22. Što je balansiranje opterećenja s tehnikom srodnosti IP adrese?
Druga istaknuta metoda uravnoteženja opterećenja je srodnost IP adresa. IP adresa klijenta je u ovoj metodi povezana s poslužiteljskim čvorom. Jedan poslužiteljski čvor obrađuje sve zahtjeve s IP adrese klijenta.
Ovu je metodu jednostavno implementirati jer je IP adresa uvijek dostupna u zaglavlju HTTP zahtjeva i nisu potrebne dodatne postavke. Ako je vjerojatno da će vaši klijenti imati deaktivirane kolačiće, ovaj oblik uravnoteženja opterećenja može biti koristan.
23. Što su točno algoritmi zamjene predmemorije (ili politike izbacivanja)?
Algoritmi predmemorije (također poznati kao algoritmi za zamjenu predmemorije, pravila zamjene predmemorije ili pravila izbacivanja predmemorije) su optimizacijske upute ili algoritmi koje računalni program ili struktura održavana hardverom može koristiti za upravljanje predmemorijom podataka pohranjenih na računalu.
Predmemorija povećava brzinu pohranjivanjem nedavno korištenih ili često pristupanih podataka u memorijske regije kojima je pristup brži ili jeftiniji od tradicionalne memorije. Kada je predmemorija puna, algoritam mora odlučiti koje će stavke ukloniti kako bi se napravilo mjesto za nove.
24. Što točno mislite pod distribuiranom transakcijom?
Distribuirana transakcija je bilo koja okolnost u kojoj jedan događaj uzrokuje promjenu dvaju ili više različitih izvora podataka koji se ne mogu predati atomski.
U svijetu mikroservisa postaje puno kompliciranije budući da je svaka usluga jedinica rada, a većinu vremena brojne usluge moraju surađivati kako bi posao bio uspješan.
25. Što je zapravo gladovanje?
Kada nit ne može steći redoviti pristup dijeljenim resursima, kaže se da izgladnjuje. To se događa kada "pohlepne" niti ili niti s višim "prioritetom" učine dijeljene resurse nedostupnima tijekom duljeg vremenskog razdoblja.
Razmotrite objekt koji pruža sinkroniziranu metodu koja se često vraća kasno. Ako jedna nit više puta poziva ovu metodu, druge niti koje zahtijevaju čest sinkronizirani pristup istom objektu često će biti blokirane.
Zaključak
Razgovor o dizajnu sustava je sve što uključuje razgovor o dizajnu sustava. U ovom smo postu obradili najčešća pitanja za razgovor o dizajnu sustava.
Sveobuhvatno razumijevanje metode koju koristite pri stvaranju određenog sustava ključno je za prolaz na razgovoru za dizajn sustava.
Ostavi odgovor