30 najvažnijih pitanja i odgovora za intervju za dizajn sustava (2026.)

Pitanja i odgovori za intervju za dizajn sustava

Priprema za intervju za dizajn sustava znači predviđanje kako će ispitivači ocjenjivati ​​arhitektonsko razmišljanje pod pritiskom. Pitanja za intervju za dizajn sustava otkriti dubinu, kompromise, procjenu skalabilnosti i komunikaciju kroz strukturirane rasprave.

Snažna priprema otvara radna mjesta na platformama u oblaku, distribuiranim sustavima i podatkovnom inženjerstvu, dokazujući tehničku stručnost kroz stvarnu analizu. Stručnjaci koji rade u tom području grade praktične vještine, podržavaju timove, pomažu menadžerima u odlučivanju te rješavaju uobičajena pitanja i odgovore, od početnika do viših razina, uključujući napredne, osnovne i tehničke perspektive diljem svijeta danas.
Čitaj više…

👉 Besplatno preuzimanje PDF-a: Pitanja i odgovori za intervju za dizajn sustava

Pitanja i odgovori za intervju za dizajn vrhunskog sustava

1) Objasnite što je dizajn sustava i zašto je važan u softverskom inženjerstvu.

Dizajn sustava je proces definiranja arhitekture, komponenti, sučelja i podataka za sustav zadovoljiti specifične zahtjeve na skalabilan, pouzdan i održiv način. Premošćuje ciljeve visoke razine (što sustav treba postići) s konkretnim odlukama o tehnologiji, protokolima i arhitekturnim obrascima. Snažan dizajn sustava osigurava da aplikacija dobro radi pod opterećenjem, ostaje otporna na pogreške i može se razvijati tijekom vremena bez potpunog prepisivanja.

U intervjuima to pokazuje vašu sposobnost uravnoteženja funkcionalni zahtjevi sa nefunkcionalna ograničenja poput skalabilnosti, latencije, konzistentnosti i dostupnosti. Sve velike tehnološke tvrtke procjenjuju kandidatove vještine dizajna sustava kako bi procijenile stvarnu inženjersku prosudbu.


2) Kako razlikujete dizajn visoke razine (HLD) od dizajna niske razine (LLD) u arhitekturi sustava?

Visokorazinski dizajn (HLD) fokusira se na arhitektonski pregled i glavne komponente bez ulaska u detalje implementacije. Pokazuje kako sustavi međusobno djeluju - npr. Web poslužitelj, baza podataka, predmemorija, API pristupniki sustavi za razmjenu poruka.

Niskorazinski dizajn (LLD) dublje zalazi u definicije klasa, metode, strukture podataka i detaljna logika unutar svake komponente. HLD se odnosi na to koje ćete komponente koristiti i kako one međusobno djeluju; LLD se odnosi na to kako ćete implementirati te interakcije. Razumijevanje oba pomaže ispitivačima da procijene vaše razmišljanje o cjelokupnoj slici, kao i vaše detaljne inženjerske sposobnosti.


3) Koje su ključne metrike performansi koje biste trebali uzeti u obzir prilikom dizajniranja sustava i zašto?

Metrike performansi pomažu u kvantificiranju koliko dobro sustav zadovoljava potrebe korisnika i poslovanja. Ključne metrike su:

  • Latentnost: Vrijeme potrebno za obradu jednog zahtjeva. Manja latencija znači brže odgovore.
  • Propusnost: Količina posla obrađena u određenom razdoblju (npr. zahtjevi u sekundi). Veća propusnost označava učinkovitost pod opterećenjem.
  • Dostupnost: Udio vremena u kojem je sustav operativan. Visoka dostupnost ključna je za globalne usluge.

Ove metrike pomažu dizajnerima uravnotežiti kompromise. Na primjer, keširanje smanjuje latenciju, ali komplicira konzistentnost podataka. Pokazivanje poznavanja ovih metrika pokazuje da vam je stalo do kvalitete sustava u stvarnom svijetu.

metrički Definicija Važnost
skrivenost Vrijeme po zahtjevu Korisničko iskustvo
propusnost Zahtjevi po jedinici vremena skalabilnost
Dostupnost Vrijeme rada u odnosu na vrijeme zastoja Pouzdanost

4) Opišite uravnoteženje opterećenja i zašto je ono ključno u distribuiranim sustavima.

Balansiranje opterećenja je proces distribucija dolaznih zahtjeva na više poslužitelja ili usluga kako bi se spriječilo da bilo koji pojedinačni čvor postane usko grlo. Osigurava optimalno iskorištenje kapaciteta, poboljšava vrijeme odziva i povećava pouzdanost sustava usmjeravanjem prometa dalje od nezdravih instanci.

Postoje različite vrste uravnoteživača opterećenja. A Sloj 4 (L4) balanser radi na transportnom sloju (IP/port), dok Sloj 7 (L7) balancer djeluje na aplikacijskom sloju, razumijevajući HTTP/S semantiku. Balansiranje opterećenja ključno je za toleranciju grešaka, skaliranje bez zastoja i ažuriranja u produkcijskim sustavima. Dobar odgovor na ovo pokazuje da razumijete temeljne kompromise distribuiranih sustava između performansi, konzistentnosti i troškova.


5) Kako biste dizajnirali TinyURL uslugu? Opišite ključne komponente i korake.

Dizajniranje TinyURL usluge obuhvaća i funkcionalne zahtjeve (skraćivanje URL-ova, preusmjeravanje korisnika) i nefunkcionalne zahtjeve (skalabilnost, jedinstvenost, performanse).

Prvo, pojašnjavajuća pitanja pomažu u definiranju ograničenja: očekivani volumen, pravila isteka, analitičke potrebe itd. Glavne komponente su:

  • API sloj: Prima i obrađuje zahtjeve za skraćivanje/preusmjeravanje.
  • Baza podataka i predmemoriranje: Pohranjuje originalna ↔ skraćena mapiranja URL-ova; keširanje poboljšava performanse čitanja.
  • Generator kratkih ID-ova: Koristi hashiranje ili jedinstvene ID-ove kodirane u bazi.

Za učinkovito generiranje jedinstvenih ključeva možete:

  • Koristiti base-62 kodiranje sekvencijalnog ID-a (npr. 1 → a, 2 → b itd.).
  • Koristiti hash funkcija s rješavanjem kolizija.

Također biste trebali uzeti u obzir analitiku, ograničenja brzine i rukovanje vrućim URL-ovima pomoću predmemorije ili CDN slojeva kako biste smanjili opterećenje. Opis ovih kompromisa pokazuje dubinu i u obrascima dizajna i u razmatranjima skalabilnosti.


6) Što je predmemoriranje i kako poboljšava performanse sustava?

Predmemoriranje pohrana podaci kojima se često pristupa ili je skupo izračunati u bržem mediju za pohranu (memorija, distribuirana predmemorija) kako bi se smanjilo ponovljeno računanje i opterećenje baze podataka. Značajno poboljšava latenciju i propusnost brzim posluživanjem popularnih zahtjeva.

Keširanje se može odvijati na više slojeva: memorija aplikacije, Redis/Ehcache, CDN rubne poslužitelje ili lokalnu pohranu preglednika. Iako keširanje smanjuje vrijeme odziva, ono uvodi izazove zastarjelosti i nevažećih podataka koje morate riješiti tijekom dizajniranja. Na primjer, možete koristiti pravila o vremenu trajanja (TTL) ili strategije nevažećih podataka iz predmemorije kada se promijene temeljni podaci. Dobri odgovori pokazuju da razumijete i prednosti i zamke keširanja.


7) Objasnite CAP teorem i njegove implikacije na dizajn distribuiranih sustava.

CAP teorem tvrdi da u distribuiranom sustavu možete odabrati najviše dva od sljedeća tri jamstva:

  1. Dosljednost: Svi čvorovi vide iste podatke u isto vrijeme.
  2. Dostupnost: Na svaki zahtjev se odgovori (bez jamstva ispravnosti).
  3. Tolerancija particije: Sustav nastavlja raditi unatoč kvarovima mreže.

Nijedan praktični distribuirani sustav ne može postići sva tri istovremeno u prisutnosti mrežnih particija. Na primjer, tijekom particije, sustavi moraju birati između posluživanja zastarjelih podataka (dostupnost) ili odbijanja zahtjeva dok se ne uspostavi konzistentnost (konzistentnost). Razumijevanje CAP-a pokazuje da možete donositi informirane kompromise na temelju operativnih prioriteta - ključna vještina u intervjuima za dizajn sustava.


8) Kako biste ukratko dizajnirali uslugu razmjene poruka putem chata poput WhatsAppa?

Za dizajniranje sustava za chat u velikom opsegu, započnite s identificiranjem ključnih zahtjeva: isporuka poruka u stvarnom vremenu, postojanost, redoslijed poruka, izvanmrežna podrška i skalabilnost.

Na visokoj razini:

  • Klijenti povezivanje putem weba/mobilnih uređaja s gateway poslužiteljima.
  • Usmjerivači poruka obrađivati ​​dolazne poruke i slati ih primateljima (putem trajnih veza poput WebSocketsa).
  • Baze podataka pohraniti povijest poruka, s odgovarajućom particioniranjem za velike korisničke baze.

Dodatne komponente uključuju predmemorije za nedavne razgovore, redove čekanja za asinkronu isporuku i usluge obavijesti za korisnike koji nisu u mreži. Trebali biste razgovarati o tome. kako se poruke pohranjuju, sortiraju i dostavljaju na više uređaja po korisniku i kako se nosite s prebacivanjem u slučaju kvara i tolerancijom grešaka.


9) Što je sharding i kako pomaže u skaliranju baza podataka?

Sharding je oblik horizontalno skaliranje gdje se veliki skup podataka dijeli na manje, neovisne particije zvane shardovi, a svaka se pohranjuje na drugom čvoru baze podataka. To poboljšava performanse i skalabilnost raspodjelom podataka i upita na više računala umjesto skaliranja jedne instance.

Podaci se mogu segmentirati prema ID-u korisnika, geografskoj regiji ili hashiranju. Iako sharding smanjuje opterećenje po čvoru, uvodi složenost u upite između cross-shardova i ponovno balansiranje pri dodavanju ili uklanjanju čvorova. Anketari očekuju da razumijete ove kompromise i kako dosljedno hashiranje ili upravitelji usjeka mogu olakšati operacije.


10) Opišite kako se API-ji i mikroservisi razlikuju od monolitne arhitekture.

A Monolithic architecture objedinjuje sve komponente aplikacije u jednu implementabilnu jedinicu. To u početku može pojednostaviti razvoj, ali s vremenom postaje teško skalirati, održavati i ažurirati.

Microservices razbiti sustav na male, neovisno primjenjive usluge, a svaki je odgovoran za određenu poslovnu mogućnost. API-ji (Application Programming Interfaces - sučelja za programiranje aplikacija) omogućuju komunikaciju između tih usluga.

Aspekt monolitan Microservices
razvoj Pojedinačna jedinica Neovisne usluge
skalabilnost ograničen Skaliranje po usluzi
Pronalazak pogreške siromašan jak
Složenost Jednostavnije u početku Složenije operacije

Mikroservisi poboljšavaju skalabilnost i fleksibilnost implementacije, ali zahtijevaju napredne operativne alate (otkrivanje servisa, praćenje i tolerancija grešaka). Rasprava o ovome pokazuje da možete razmišljati o evoluciji arhitekture i kompromisima između jednostavnosti i fleksibilnosti.


11) Kako funkcionira mreža za isporuku sadržaja (CDN) i koje su njezine prednosti?

A Mreža za dostavu sadržaja (CDN) je distribuirana mreža proxy poslužitelja strateški smještenih u raznim geografskim regijama. Njezin primarni cilj je isporučiti sadržaj korisnicima s minimalnom latencijom posluživanjem s najbližeg poslužitelja (poznatog kao rubni čvor).

Kada korisnik zatraži web-resurs (npr. sliku, videozapis ili statičku datoteku), CDN predmemorira sadržaj i isporučuje ga izravno s rubnog poslužitelja. Ako sadržaj nije u predmemoriji, dohvaća ga s izvornog poslužitelja i pohranjuje ga za sljedeće zahtjeve.

Prednosti CDN-ova:

Faktor Prednost
skrivenost Smanjuje vrijeme odziva prikazivanjem sadržaja bliže korisnicima
Propusnost Prebacuje korištenje propusnosti s izvornih poslužitelja
Pouzdanost Pruža toleranciju grešaka s distribuiranim čvorovima
skalabilnost Učinkovito se nosi s velikim prometom

CDN-ovi su ključni za globalne sustave kao što su Netflix, YouTube, ili platforme za e-trgovinu, osiguravajući visoke performanse i dostupnost.


12) Što je ograničavanje brzine i zašto je bitno u dizajnu API-ja?

Ograničenje brzine ograničava broj zahtjeva koje klijent može uputiti API-ju unutar određenog razdoblja. Ključno je za sprječavanje zlostavljanja, održavanje poštene upotrebei zaštita pozadinskih usluga od preopterećenja ili napada uskraćivanja usluge (DoS).

Uobičajeni algoritmi za ograničavanje brzine uključuju:

  • Fiksni prozorski pult — Jednostavno, ali može uzrokovati skokove na granicama prozora.
  • Klizni balvan / Klizni prozor — Omogućuje glatkiju obradu zahtjeva.
  • Kanta tokena / Kanta s propuštanjima — Omogućuje rafale unutar ograničenja i održava stalan protok zahtjeva.

Na primjer, GitHub ograničava API pozive na 5000 po satu po korisniku. Implementacija ograničenja brzine osigurava stabilnost sustava i poboljšava ukupnu kvalitetu usluge.


13) Kako osiguravate konzistentnost podataka u distribuiranim sustavima?

Održavanje konzistentnosti u distribuiranim sustavima je izazovno zbog replikacije i latencije mreže. Postoji nekoliko strategija ovisno o potrebnom kompromisu između konzistentnosti i dostupnosti:

Vrsta konzistentnosti Description Koristite slučaj
Snažna konzistencija Svi klijenti odmah vide iste podatke Bankarski sustavi
Eventualna dosljednost Ažuriranja se šire asinkrono; dopuštene su privremene razlike Feedovi društvenih medija
Uzročna konzistentnost Održava uzročno-posljedični red Suradničke aplikacije

Tehnike poput zapisnici unaprijed pisanja, vektorski satovi, konsenzusni algoritmi (Raft, Paxos)i dvofazno potvrđivanje (2PC) pomoći u održavanju sinkronizacije. Anketari očekuju da objasnite when ublažiti konzistentnost radi poboljšanja performansi i skalabilnosti.


14) Objasnite razliku između horizontalnog i vertikalnog skaliranja.

Skaliranje se odnosi na povećanje kapaciteta sustava za rukovanje većim opterećenjem. Postoje dvije glavne vrste:

Vrsta skaliranja način Prednosti Nedostaci
Vertikalno skaliranje (Scale-Up) Dodajte više resursa (CPU, RAM) jednom stroju Jednostavnije za implementaciju Ograničenja hardvera, jedna točka kvara
Horizontalno skaliranje (Scale-Out) Dodajte više strojeva za raspodjelu opterećenja Visoka dostupnost, isplativo Složeno za upravljanje i koordinaciju

Na primjer, skaliranje web poslužitelja s 2 CPU-a na 8 CPU-a je vertikalno skaliranje, dok je dodavanje više poslužitelja iza uravnoteživača opterećenja horizontalno skaliranje. Moderni distribuirani sustavi poput Kubernetesa favoriziraju horizontalno skaliranje za elastičnost.


15) Što su redovi poruka i zašto se koriste u distribuiranim arhitekturama?

A red poruka odvaja proizvođače i potrošače privremenim pohranjivanjem poruka dok se ne obrade. To omogućuje asinkrona komunikacija, poboljšavajući otpornost i skalabilnost u distribuiranim sustavima.

Popularni posrednici poruka uključuju Zec MQ, Kafka, Amazon SQSi Google Pub/Sub.

Prednosti:

  • Ublažava prometne skokove
  • Usluge odvajanja
  • Omogućuje mehanizme ponovnog pokušaja i perzistentnosti
  • Poboljšava toleranciju grešaka

Primjer: Na platformi za e-trgovinu, usluga naručivanja može objaviti poruku („Narudžba poslana“) koju usluge upravljanja zalihama i naplate koriste neovisno, izbjegavajući izravne ovisnosti.


16) Kako biste dizajnirali skalabilni sustav za pohranu datoteka poput Google Drive or Dropbox?

Za dizajniranje sustava za pohranu datoteka u oblaku, podijelite ga na ključne komponente:

  • Usluga frontenda: Omogućuje prijenos/preuzimanje datoteka putem REST API-ja.
  • Usluga metapodataka: Pohranjuje vlasništvo nad datotekama, dozvole pristupa i povijest verzija.
  • Usluga skladištenja: Upravlja dijelovima datoteka u distribuiranoj pohrani (npr. S3, HDFS).
  • Komadanje: Datoteke su podijeljene na manje dijelove (npr. 4 MB) radi učinkovite pohrane i prijenosa.

Izazovi uključuju osiguranje deduplikacija podataka, dosljednosti sinkronizacija promjena na svim uređajima. Implementacija sinkronizacije na razini blokova i hashiranja sadržaja osigurava učinkovitost i integritet propusnosti.


17) Koji su ključni čimbenici koje treba uzeti u obzir pri dizajniranju skalabilne sheme baze podataka?

Skalabilna shema uravnotežuje performanse, fleksibilnost i održivost. Važna razmatranja uključuju:

  • Particioniranje podataka (sharding) za rukovanje rastom.
  • Normalizacija naspram denormalizacije: Normaliziraj za integritet; denormaliziraj za performanse s puno čitanja.
  • Strategija indeksiranja za brze pretrage.
  • Keširanje i replikacija za rješavanje velikog prometa.

Primjer: U aplikaciji društvenih medija, korisnički podaci i objave mogu se pohranjivati ​​odvojeno kako bi se smanjilo povezivanje i poboljšale performanse upita. Odluke o dizajnu sheme trebale bi biti usklađene s obrasci pristupa i učestalost upita.


18) Koje su prednosti i nedostaci korištenja mikroservisne arhitekture?

Mikroservisi su postali okosnica modernih cloud aplikacija, ali dolaze s kompromisima.

Prednosti Nedostaci
Neovisno postavljanje i skaliranje Povećana operativna složenost
Izolacija kvarova i otpornost Distribuirano otklanjanje pogrešaka je teže
Lakše usvajanje tehnologije Zahtijeva snažnu DevOps kulturu
Bolja održivost koda Veća latencija zbog mrežnih skokova

Mikroservisi su idealni za velike, promjenjive sustave, ali zahtijevaju robusno praćenje, API pristupnike i strategije komunikacije između servisa.


19) Kako biste riješili replikaciju baze podataka u velikom sustavu?

Replikacija baze podataka uključuje kopiranje podataka iz primarne baze podataka u jednu ili više replika radi poboljšanja dostupnosti i performansi čitanja. Postoje dvije glavne vrste:

Vrsta replikacije Description Koristite slučaj
Synchronozan Promjene se odmah zapisuju u replike Jaka konzistencija
asinhron Primarno potvrđuje pisanje prije ažuriranja replika Bolje performanse

Replikacija poboljšava tolerancija kvarova, omogućuje geografska rasprostranjenosti podržava skaliranje čitanja (čitaj replike). Međutim, to uvodi izazove poput kašnjenja replikacije i rješavanja sukoba. Alati poput MySQL Grupna replikacija, MongoDB Setovi replikai PostgreSQL replikacija strujanjem su standardna rješenja.


20) Što je arhitektura vođena događajima i gdje je najkorisnija?

Arhitektura vođena događajima (EDA) je paradigma dizajna u kojoj komponente komuniciraju putem događaji — poruke koje signaliziraju promjene stanja ili radnje. Umjesto izravnih zahtjeva, usluge objavljuju i pretplaćuju se na događaje asinkrono.

Ovaj dizajn je idealan za labavo povezani sustavi, kao što su IoT platforme, e-trgovina i sustavi za analitiku u stvarnom vremenu.

Prednosti:

  • Visoka skalabilnost
  • Odvojene komponente
  • Odziv u stvarnom vremenu

Primjer: U Uberovoj arhitekturi, kada se vožnja rezervira, događaj istovremeno pokreće ažuriranja cijena, usklađivanja vozača i sustava obavještavanja - sve bez uske povezanosti.


21) Što je idempotentnost u dizajnu sustava i zašto je važna?

Idempotencija znači da izvođenje iste operacije više puta ima isti učinak kao da se to izvede jednomOsigurava pouzdanost u distribuiranim sustavima gdje se zahtjevi mogu ponovno pokušati zbog kvarova ili kašnjenja mreže.

Na primjer:

  • GET i DELETE Zahtjevi su prirodno idempotentni (njihovo ponavljanje ne mijenja stanje).
  • POST zahtjevi (poput stvaranja transakcije) nisu idempotentni osim ako nisu posebno dizajnirani da budu.

Za implementaciju idempotentnosti:

  • Koristiti jedinstveni ID-ovi zahtjeva za praćenje dupliciranih prijava.
  • Održavajte a dnevnik transakcija zanemariti ponovljene operacije.

Ovo načelo je ključno u pristupnici plaćanja, Obrada narudžbei sustavi e-pošte gdje duplicirane radnje mogu uzrokovati ozbiljne nedosljednosti.


22) Objasnite koncept konačne konzistentnosti s primjerom.

Konačna konzistentnost je model u distribuiranim bazama podataka gdje ažuriranja nisu odmah vidljiva svim čvorovima, ali sustav s vremenom konvergira u konzistentno stanje.

Primjer:

In Amazon'S DynamoDB, kada se stavka ažurira u jednoj regiji, replike u drugim regijama mogu privremeno imati stare podatke. Međutim, one će se na kraju sinkronizirati putem replikacije u pozadini.

Ovaj model je koristan u sustavima koji određuju prioritete dostupnost umjesto prema stroga dosljednost, kao što su:

  • Vremenske crte društvenih medija
  • Sustavi za keširanje
  • DNS zapisi

Ključni kompromis leži između tolerancija ustajalosti i brzina odziva.


23) Kako biste osmislili sustav obavještavanja koji podržava više kanala (e-pošta, SMS, push)?

Dizajniranje skalabilnog sustava obavještavanja zahtijeva modularnost i fleksibilnost.

Architekstura:

  1. API za obavijesti – Prima zahtjeve za obavijesti od aplikacija.
  2. Red čekanja/sabirnica poruka – Pohranjuje i distribuira događaje (Kafka, SQS).
  3. Usluge za radnike – Procesori specifični za kanal (e-pošta, SMS, push).
  4. Pružatelji dostave – Integrirajte se s vanjskim API-jima poput Twilia ili Firebasea.
  5. Baza podataka korisničkih postavki – Pohranjuje postavke prijave/odjave i preferencije učestalosti.

Ključna razmatranja:

  • Ponovni pokušaj neuspjelih isporuka s odgodnim strategijama.
  • Koristite predloške za dosljednost.
  • Podržavanje prioritizacije (hitne poruke u odnosu na poruke niskog prioriteta).

Ovaj modularni dizajn osigurava pouzdanost i proširivost kako se pojavljuju novi kanali obavještavanja.


24) Što je indeksiranje baze podataka i kako utječe na performanse?

A indeks baze podataka je struktura podataka (obično B-stablo ili hash tablica) koja poboljšava brzinu upita smanjenjem broja zapisa koje baza podataka skenira.

Na primjer, indeksiranje stupca e-pošte u tablici korisnika omogućuje DB mehanizmu da brzo pronađe korisnike prema e-pošti bez skeniranja cijele tablice.

Aspekt S indeksom Bez indeksa
Brzina upita Brze pretrage Sporo sekvencijalno skeniranje
Brzina pisanja Sporije (potrebna su ažuriranja indeksa) Brže piše
Čuvanje Više prostora na disku Less skladištenje

Indeksi poboljšavaju performanse čitanja, ali se moraju koristiti razumno jer mogu usporiti puno pisanja sustava zbog troškova održavanja.


25) Kako biste osigurali toleranciju grešaka u velikom distribuiranom sustavu?

Tolerancija kvarova znači da sustav nastavlja funkcionirati čak i kada komponente zakažu. To se postiže redundancijom, praćenjem i automatskim oporavkom.

Strategije uključuju:

  • Replikacija: Duplicirani podaci ili usluge u različitim regijama.
  • Mehanizmi prebacivanja u slučaju kvara: Automatski preusmjeri zahtjeve na ispravne čvorove.
  • Provjere ispravnosti i uravnoteživači opterećenja: Otkrivanje i izolacija neispravnih instanci.
  • Prekidači: Spriječite kaskadne kvarove između ovisnih usluga.

Primjer: Netflix"Majmun kaosa" namjerno isključuje instance u produkciji kako bi testirao otpornost - naprednu primjenu principa tolerancije na greške.


26) Koja je razlika između sinkrone i asinkrone komunikacije u distribuiranim sustavima?

svojstvo Synckronična komunikacija Asinkrona komunikacija
zavisnost Pošiljatelj čeka odgovor Pošiljatelj postupa samostalno
Primjeri HTTP REST API pozivi Redovi poruka, Kafka
skrivenost Viša (blokirajuća) Niža percipirana latencija
Pouzdanost Donji pod kvarovima Više (poruke mogu ostati)

SyncHronski sustavi su jednostavniji, ali čvrsto povezani, dok asinhroni sustavi poboljšavaju skalabilnost i izolaciju grešaka.

Na primjer, obrada narudžbi u sustavu e-trgovine može biti asinkrona, ali potvrda plaćanja treba ostati sinkrona kako bi se osigurala trenutna povratna informacija korisnika.


27) Kako biste dizajnirali ograničivač brzine za distribuirani API sustav?

Distribuirani limitator brzine osigurava pravednu upotrebu API-ja na više poslužitelja.

Pristupi:

  1. Algoritam spremnika tokena – Svaki korisnik dobiva tokene koji se s vremenom obnavljaju.
  2. Algoritam propuštanja kante – Zahtjevi se obrađuju stabilnom brzinom.
  3. Centralizirani brojač (npr. Redis) – Vodi evidenciju zahtjeva po korisniku.

Primjer implementacije:

  • Koristite Redis atomske brojače s TTL-om.
  • Prati vremenske oznake zahtjeva po ključu korisnika.
  • Odbij zahtjeve koji prelaze pragove.

Ograničavanje brzine sprječava zlostavljanje, DoS napadii neočekivani skokovi troškova, osiguravajući dosljednu kvalitetu usluge svim klijentima.


28) Što je distribuirani algoritam konsenzusa i zašto je potreban?

Distribuirani konsenzusni algoritmi osiguravaju da više čvorova u sustavu dogovoriti se o jednoj vrijednosti podataka, čak i kada dođe do kvarova.

Uobičajeni algoritmi:

  • paxos
  • Splav
  • Zab (koristi se u ZooKeeperu)

Neophodni su za održavanje izbor vođe, replikacija stanjai dosljednost podataka u distribuiranim bazama podataka i upraviteljima klastera poput Kubernetesa.

Primjer: Raft osigurava da se svi čvorovi slažu oko unosa u dnevnik prije nego što ih primijene na automate stanja, jamčeći pouzdanost čak i ako se čvorovi sruše.


29) Kako biste dizajnirali sustav za bilježenje i praćenje mikroservisa?

Praćenje distribuiranih sustava zahtijeva centraliziranu mogućnost promatranja kako bi se otkrili i riješili problemi.

Ključne komponente:

  • Sječa: Prikupljajte zapisnike sa svih usluga pomoću alata kao što su Fluentd or Logstash.
  • Metrika: Koristite Prometheus ili Datadog za praćenje pokazatelja performansi (CPU, memorija, latencija zahtjeva).
  • Praćenje: Implementirajte distribuirano praćenje (Jaeger, Zipkin) za praćenje putova zahtjeva kroz usluge.
  • Upozorenje: Postavite pragove za pokretanje upozorenja u PagerDutyju ili Slack.

Najbolja vježba:

Koristiti ID-ovi korelacije pratiti zahtjev jednog korisnika kroz više mikroservisa - što je ključno za otklanjanje pogrešaka u produkciji.


30) Koja su ključna razmatranja dizajna za izgradnju sustava visoke dostupnosti (HA)?

A Visoka dostupnost (HA) Sustav minimizira zastoje i osigurava kontinuiranu uslugu.

Ključni čimbenici dizajna:

  1. Višak: Koristite više poslužitelja po komponenti.
  2. Uklonite pojedinačne točke kvara (SPOF).
  3. Automatsko prebacivanje u slučaju greške: Preusmjeravanje prometa tijekom prekida.
  4. Replikacija podataka: Osigurajte trajnost podataka u svim zonama.
  5. Nadzor zdravlja: Automatski otkrijte i zamijenite neispravne čvorove.
  6. Oporavak od katastrofe (DR): Implementirajte sigurnosne kopije i geo-replikaciju.

Primjer: AWS implementira usluge u Zonama dostupnosti (AZ) i koristi Elastične uravnoteživače opterećenja za automatsko prebacivanje u slučaju kvara, osiguravajući SLA-ove s 99.99% dostupnosti.


🔍 Najvažnija pitanja za intervju za dizajn sustava sa stvarnim scenarijima i strateškim odgovorima

1) Kako pristupate dizajniranju velikog distribuiranog sustava od nule?

Očekivano od kandidata: Ispitivač želi razumjeti vaše strukturirano razmišljanje, sposobnost razjašnjavanja zahtjeva i kako složene probleme razlažete na upravljive komponente.

Primjer odgovora: „Počinjem razjašnjavanjem funkcionalnih i nefunkcionalnih zahtjeva, kao što su skalabilnost, dostupnost i latencija. Zatim skiciram arhitekturu visoke razine, identificiram ključne komponente, definiram protok podataka i odabirem odgovarajuće tehnologije. Nakon toga razmatram uska grla, scenarije kvarova i kompromise prije nego što poboljšam dizajn.“


2) Možete li objasniti razliku između horizontalnog i vertikalnog skaliranja i kada biste koristili koje od njih?

Očekivano od kandidata: Anketar testira vaše temeljno znanje o skalabilnosti i vašu sposobnost primjene ispravne strategije u stvarnim sustavima.

Primjer odgovora: „Vertikalno skaliranje uključuje dodavanje više resursa jednom stroju, dok horizontalno skaliranje dodaje više strojeva za rukovanje opterećenjem. Vertikalno skaliranje je jednostavnije, ali ograničeno, dok je horizontalno skaliranje složenije, ali nudi bolju toleranciju grešaka i dugoročnu skalabilnost.“


3) Kako osigurati visoku dostupnost u dizajnu sustava?

Očekivano od kandidata: Anketar želi procijeniti vaše razumijevanje redundancije, mehanizama za prebacivanje u slučaju kvara i otpornosti sustava.

Primjer odgovora: „U svojoj prethodnoj ulozi, osigurao sam visoku dostupnost korištenjem uravnoteživača opterećenja, implementacijom usluga u više zona dostupnosti, implementacijom provjera ispravnosti i dizajniranjem usluga bez stanja gdje je to bilo moguće. Ove su strategije smanjile broj pojedinačnih točaka kvara.“


4) Opišite situaciju kada ste morali napraviti kompromis između dosljednosti i dostupnosti.

Očekivano od kandidata: Anketar procjenjuje vaše razumijevanje CAP teorema i vaše donošenje odluka pod ograničenjima.

Primjer odgovora: „Na prethodnoj poziciji radio sam na sustavu gdje je niska latencija bila ključna. Odabrali smo eventualnu konzistentnost umjesto snažne konzistentnosti kako bismo održali dostupnost tijekom mrežnih particija, što je bilo prihvatljivo za poslovni slučaj upotrebe.“


5) Kako odlučujete koju bazu podataka koristiti za određeni sustav?

Očekivano od kandidata: Anketar želi vidjeti kako usklađujete izbore pohrane podataka sa sistemskim zahtjevima.

Primjer odgovora: „Procjenjujem obrasce pristupa podacima, zahtjeve za konzistentnošću, potrebe skalabilnosti i složenost upita. Relacijske baze podataka dobro funkcioniraju za strukturirane podatke i transakcije, dok su NoSQL baze podataka bolje za visoku propusnost i fleksibilne sheme.“


6) Kako biste osmislili sustav za rješavanje naglih porasta prometa?

Očekivano od kandidata: Anketar testira vašu sposobnost dizajniranja za skalabilnost i nepredvidivo opterećenje.

Primjer odgovora: „Koristio bih grupe za automatsko skaliranje, uravnoteživače opterećenja i slojeve predmemorije poput pohrana u memoriji. U mojoj posljednjoj ulozi, ove su tehnike omogućile sustavu da apsorbira porast prometa bez utjecaja na performanse.“


7) Kakvu ulogu igra keširanje u dizajnu sustava i gdje biste ga implementirali?

Očekivano od kandidata: Anketar želi razumjeti kako optimizirate performanse i smanjujete opterećenje osnovnih usluga.

Primjer odgovora: „Predmemoriranje poboljšava vrijeme odziva i smanjuje opterećenje baze podataka. Može se implementirati na više slojeva, uključujući predmemoriranje upita baze podataka na strani klijenta, CDN-u, razini aplikacije i na razini aplikacije, ovisno o slučaju upotrebe.“


8) Kako rješavate particioniranje i sharding podataka?

Očekivano od kandidata: Anketar procjenjuje vašu sposobnost dizajniranja sustava koji horizontalno skaliraju podatke.

Primjer odgovora: „Odabirem ključ za segmentiranje koji ravnomjerno raspoređuje podatke i minimizira upite između segmentiranja. Također planiram ponovno segmentiranje i pratim distribuciju podataka kako bih izbjegao vruće točke kako sustav raste.“


9) Opišite situaciju u kojoj je praćenje sustava utjecalo na odluku o dizajnu.

Očekivano od kandidata: Anketar želi vidjeti kako koristite mogućnost promatranja za poboljšanje pouzdanosti i performansi sustava.

Primjer odgovora: „Praćenje metrika poput latencije i stope pogrešaka otkrilo je usko grlo u API usluzi. Na temelju tog uvida redizajnirao sam uslugu da bude asinkrona, što je značajno poboljšalo propusnost.“


10) Kako komunicirate složene dizajne sustava netehničkim dionicima?

Očekivano od kandidata: Anketar procjenjuje vaše komunikacijske vještine i sposobnost usklađivanja tehničkih odluka s poslovnim ciljevima.

Primjer odgovora: „Fokusiram se na koncepte visoke razine, koristim dijagrame i povezujem tehničke komponente s poslovnim rezultatima. Ovaj pristup pomaže dionicima da razumiju vrijednost i utjecaj dizajna bez da se izgube u tehničkim detaljima.“

Sažmite ovu objavu uz: