Sisällysluettelo[Piilottaa][Näytä]
- 1. Mitä tarkoitat järjestelmäsuunnittelulla?
- 2. Mitkä ovat järjestelmän suunnittelijan tärkeimmät ominaisuudet?
- 3. Mikä tarkalleen on CAP-lause?
- 4. Mitä ymmärrät kuormituksen tasauksella?
- 5. Mitä eroa on asynkronisella ohjelmoinnilla ja rinnakkaisohjelmoinnilla?
- 6. Mitä eroa on vaaka- ja pystyskaalauksella?
- 7. Mitä tarkalleen tarkoitat latenssilla, suorituskyvyllä ja järjestelmän käytettävyydellä?
- 8. Mitkä ovat ACID-ominaisuudet?
- 9. Mitä sharding oikein on?
- 10. Mikä on CDN?
- 11. Miksi käyttää CDN:ää?
- 12. Mitä eroa on sirpaloinnin ja osioinnin välillä?
- 13. Mitä välimuisti tarkalleen ottaen on?
- 14. Mitä ovat CDN reunapalvelimet?
- 15. Mitkä ovat järjestelmän suunnittelun eri johdonmukaisuusmallit?
- 16. Mitä tarkoitat optimistisella lukitsemisella?
- 17. Mitä tarkalleen ottaen tarkoitat "johtajan valinnalla"?
- 18. Mikä on lähestymistapasi TinyURL-tyyppisen URL-lyhennyspalvelun suunnitteluun?
- 19. Mikä on lähestymistapasi Twitterin suunnitteluun?
- 20. Luo uutissyötejärjestelmä Facebookille
- 21. Mikä on järjestelmän BASE-ominaisuus?
- 22. Mitä on kuormituksen tasapainottaminen IP-osoitteen affiniteettitekniikalla?
- 23. Mitä välimuistin korvausalgoritmit (tai häätökäytäntö) tarkalleen ottaen ovat?
- 24. Mitä tarkalleen ottaen tarkoitat hajautetulla tapahtumalla?
- 25. Mitä nälkä tarkalleen on?
- Yhteenveto
Ennen kuin aloitat, suosittelemme lukemaan meidän järjestelmän suunnittelun johdanto-opas päivittääksesi perustietosi.
Kun haastattelet järjestelmäsuunnitteluosaamista vaativaa tehtävää, sinulla on mahdollisuus puhua taustastasi ja osoittaa kykysi kehittää monimutkaisia järjestelmiä.
Kun puhut mahdollisen työnantajan kanssa, tapa, jolla ilmaiset asiantuntemustasi, saattaa auttaa sinua osoittamaan, että olet pätevä ehdokas tehtävään.
Voit valmistautua työhaastatteluun oppimalla suunnittelun peruskäsitteet ja miettimällä, miten vastaat niitä koskeviin tiedusteluihin. Käymme läpi joitakin tyypillisiä järjestelmäsuunnitteluhaastattelun kysymyksiä ja vastauksia tässä viestissä auttaaksemme sinua valmistautumaan seuraavaan haastatteluusi.
1. Mitä tarkoitat järjestelmäsuunnittelulla?
Järjestelmän ominaisuuksien, mukaan lukien moduulit, arkkitehtuuri, komponentit ja niiden liitännät sekä datan määrittäminen ennalta määrättyjen kriteerien perusteella, tunnetaan järjestelmän suunnitteluna.
Se on prosessi, jossa määritellään, luodaan ja suunnitellaan järjestelmiä, jotka täyttävät yrityksen tai organisaation erityiset tavoitteet ja tavoitteet. Järjestelmäsuunnittelussa on kyse enemmän järjestelmäanalyysistä, arkkitehtonisista kuvioista, API:ista, suunnittelukuvioista ja kaiken yhdistämisestä kuin koodauksesta.
2. Mitkä ovat järjestelmän suunnittelijan tärkeimmät ominaisuudet?
- Käyttäjän vuorovaikutus
- Ulkoinen API-kutsu
- Offline-prosessit
3. Mikä tarkalleen on CAP-lause?
CAP-lauseen (Consistency-Availability-Partition Tolerance) mukaan hajautettu järjestelmä ei voi varmistaa C:tä, A:ta ja P:tä yhtä aikaa. Se voi tarjota enintään kaksi kolmesta vakuutuksesta. Käytetään hajautettua tietokantajärjestelmää auttamaan meitä ymmärtämään tämä.
- Johdonmukaisuus: Tämä määrittää, että tietojen on pysyttävä johdonmukaisina, kun tietokantatapahtuma on suoritettu. Esimerkiksi kaikkien kyselyiden pitäisi palauttaa sama vastaus tietokannan päivityksen jälkeen.
- Saatavuus: Tietokantojen on oltava käytettävissä ja reagoivia koko ajan.
- Osiotoleranssi: Tietokantajärjestelmän pitäisi jatkaa toimintaansa, vaikka tiedonsiirrosta tuleekin ongelmallista.
4. Mitä ymmärrät kuormituksen tasauksella?
Kuormituksen tasapainoittaminen on prosessi, jolla tehokkaasti hajautetaan saapuva liikenne taustapalvelimien kesken. Näitä kutsutaan palvelinpooliksi. Nykyaikaiset verkkosivustot on suunniteltu käsittelemään miljoonia asiakkaiden kyselyjä ja vastaamaan niihin nopeasti ja luotettavasti. Tarvitaan lisää palvelimia vastaamaan näihin tarpeisiin.
Tässä tapauksessa on tärkeää jakaa pyyntöliikenne tehokkaasti kunkin palvelimen kesken, jotta ne eivät kuormittaisi niitä liikaa. Kuormantasaaja toimii liikennepoliisina, sieppaamalla pyynnöt ja reitittäen ne käytettävissä olevien palvelimien välillä, jotta yksikään palvelin ei ole ylikuormitettu, mikä saattaa heikentää sovelluksen suorituskykyä.
5. Mitä eroa on asynkronisella ohjelmoinnilla ja rinnakkaisohjelmoinnilla?
Kun suoritat jotain asynkronisesti, sinun ei tarvitse odottaa sen päättymistä ennen kuin voit siirtyä johonkin muuhun. Parallelismilla tarkoitetaan useiden tehtävien samanaikaista suorittamista.
Kun voit jakaa työt eri työosiin, rinnakkaisuus toimii tehokkaasti. Async ja Callbacks ovat väline (työkalu tai mekanismi) edustamaan samanaikaisuutta eli ryhmää kokonaisuuksia, jotka voivat kommunikoida ja jakaa resursseja.
6. Mitä eroa on vaaka- ja pystyskaalauksella?
Uusien laskentalaitteiden lisäämistä verkkoon, joka hajauttaa prosessointi- ja muistitarvetta hajautetussa laiteverkossa, kutsutaan horisontaaliseksi skaalaukseksi. Yksinkertaisesti sanottuna uusia palvelinesiintymiä lisätään nykyiseen pooliin, ja liikennekuorma jakautuu tehokkaasti näiden laitteiden välillä.
Pystyskaalauksella tarkoitetaan ajatusta yksittäisen tietokoneen resurssikapasiteetin laajentamisesta lisäämällä RAM-muistia, tehokkaita suorittimia tai siirtymällä uuteen koneeseen, jonka kapasiteetti on suurempi. Palvelimen toimivuutta voidaan lisätä ilman ohjelmointimuutoksia.
7. Mitä tarkalleen tarkoitat latenssilla, suorituskyvyllä ja järjestelmän käytettävyydellä?
Suorituskyky on olennainen osa järjestelmäsuunnittelua, koska se lisää palveluidemme nopeutta ja luotettavuutta. Kolme tärkeintä suorituskykymittaria ovat seuraavat:
- Aikaa, joka kuluu yhden viestin toimittamiseen millisekunneissa, kutsutaan latenssiksi.
- Tietyn ajanjakson aikana järjestelmän kautta onnistuneesti siirretyn tiedon määrää kutsutaan suorituskyvyksi. Sen mittaamiseen käytetään bittiä sekunnissa.
- Aika, jonka järjestelmä on käytettävissä vastaamaan kyselyihin, määräytyy sen saatavuuden mukaan. Järjestelmän käyttöaika / (Järjestelmän käytettävyys + seisokkiaika) on kaava sen laskemiseen.
8. Mitkä ovat ACID-ominaisuudet?
- Atomicity: Se varmistaa, että tietokannan muutokset ovat joko kaikki tai ei yhtään.
- Johdonmukaisuus: Tietokannan arvot ovat yhdenmukaisia.
- Eristäminen: Se viittaa kahden tapahtuman erottamiseen.
- Kestävyys: Tiedot säilyvät, vaikka palvelin epäonnistuu.
9. Mitä sharding oikein on?
Sharding on tekniikka, jolla jaetaan valtava looginen tietojoukko useisiin tietokantoihin. Se viittaa myös horisontaaliseen tietojen jakamiseen, koska tiedot tallennetaan useille tietokoneille. Tämän seurauksena jaettu tietokanta pystyy käsittelemään enemmän kyselyitä kuin yksi valtava tietokone.
10. Mikä on CDN?
Sisällönjakeluverkko on maailmanlaajuinen tietokoneiden verkosto, jotka toimivat yhteistyössä tarjotakseen Internet-tietoja nopeasti. Se mahdollistaa Internet-sisällön lataamiseen tarvittavien elementtien, kuten HTML-sivujen, JavaScript-tiedostojen, tyylitaulukoiden, kuvien ja videoiden nopean toimituksen.
11. Miksi käyttää CDN:ää?
- Koska staattiset resurssit muodostavat noin 80 % verkkosivustosta, CDN:n käyttöönotto vähentää merkittävästi alkuperäisen palvelimen rasitusta.
- Koska matkaa on vähemmän, tiedot toimitetaan nopeammin verkkosivustojen omistajille, joilla on vierailijoita useilta maantieteellisiltä alueilta.
- CDN-verkkojen käyttäjät hyötyvät myös kyvystä skaalata nopeasti ylös ja alas liikennepiikkien vuoksi.
12. Mitä eroa on sirpaloinnin ja osioinnin välillä?
Tietokannan jakaminen – Tietokannan jakaminen on tapa osioida yksi tietojoukko useiksi tietokantoiksi, jotta se voidaan tallentaa eri työasemille. Suuremmat tietojoukot voidaan jakaa pienempiin osiin ja tallentaa useisiin tietosolmuihin, mikä lisää järjestelmän kokonaistallennuskapasiteettia.
Hajauttamalla tiedot useille koneille, jaettu tietokanta pystyy käsittelemään enemmän kyselyitä kuin yksittäinen järjestelmä.
Tietokannan osiointi on prosessi, jossa tallennetut tietokantaobjektit (taulukot, hakemistot ja näkymät) jaetaan erillisiin osiin. Ohjattavuuden, suorituskyvyn ja saatavuuden parantamiseksi suuret tietokantaobjektit osioidaan.
Joissakin tapauksissa osiointi voi parantaa nopeutta osioituja tietoja käytettäessä. Osiointi voi pienentää indeksin kokoa ja lisätä mahdollisuutta löytää eniten tarvittavat indeksit muistista toimimalla hakemistojen johtavana sarakkeena.
13. Mitä välimuisti tarkalleen ottaen on?
Välimuisti on tekniikka, jolla tiedostokopiot säilytetään väliaikaisella tallennusalueella, joka tunnetaan nimellä välimuisti, mikä nopeuttaa tietojen käyttöä ja vähentää sivuston viivettä. Välimuistiin voidaan tallentaa vain tietty määrä tietoa.
Tämän seurauksena on ratkaisevan tärkeää määrittää välimuistin päivitystekniikat, jotka sopivat parhaiten liiketoimintatavoitteisiin.
14. Mitä ovat CDN reunapalvelimet?
CDN-palvelimia, jotka tallentavat välimuistiin alkuperäiseltä palvelimeltasi tai tallennusklusteristasi hankittua materiaalia, tunnetaan reunapalvelimina. Läsnäolopiste on termi, jota käytetään usein kuvaamaan reunapalvelimia (POP).
Reunapalvelimet sijaitsevat fyysisesti POP-pisteessä. Siinä POP:ssa monet reunapalvelimet saattavat tallentaa tiedot välimuistiin.
Mahdollisuus tarjota verkkosivuston osia useista paikoista vähentää vierailijan ja verkkopalvelimen välistä etäisyyttä, mikä johtaa pienempään viiveeseen. CDN reunapalvelimet saavuttavat tämän tarkan tavoitteen.
15. Mitkä ovat järjestelmän suunnittelun eri johdonmukaisuusmallit?
Jokaisen lukupyynnön tulee hakea viimeksi kirjoitettu data CAP-lauseen mukaan. Kun saatavilla on useita datakopioita, niiden synkronointi niin, että asiakkaat saavat jatkuvasti tuoretta tietoa, tulee vaikeaksi. Seuraavat ovat mahdolliset johdonmukaisuusmallit:
- Heikko johdonmukaisuus: Tiedon kirjoittamisen jälkeen lukupyyntö saattaa saada päivitetyt tiedot. Tämä vakaus on ihanteellinen reaaliaikaisiin sovelluksiin, kuten VoIP, videochat ja moninpeli.
- Lopullinen johdonmukaisuus: Lukemat näkevät lopulta uusimmat tiedot millisekuntien sisällä tietojen kirjoittamisen jälkeen. Tiedot monistetaan tässä tapauksessa asynkronisesti. DNS- ja sähköpostijärjestelmät ovat esimerkkejä tästä. Tämä toimii tehokkaasti järjestelmissä, joissa on korkea käytettävyys.
- Vahva johdonmukaisuus: Tiedon kirjoittamisen jälkeen tulevat lukijat näkevät uusimmat tiedot. Tiedot kopioidaan tässä tapauksessa synkronisesti. Tämä voidaan havaita RDBMS- ja tiedostojärjestelmissä, jotka soveltuvat tiedonsiirtoon.
16. Mitä tarkoitat optimistisella lukitsemisella?
Optimistinen lukitus on mekanismi, jossa luet tietueen, kirjoitat muistiin versionumeron (vaihtoehtoisia tapoja ovat päivämäärät, aikaleimat tai tarkistussummat/tiiviste) ja tarkistat sitten, että versio ei ole muuttunut ennen kuin kirjoitat sen takaisin.
Kun kirjoitat tietueen takaisin, käytät versiota päivityksen suodattamiseen varmistaaksesi, että se on ydin. (eli sitä ei ole muutettu version tarkistamisen ja tietueen levylle kirjoittamisen välillä) ja päivitä se kerralla.
17. Mitä tarkalleen ottaen tarkoitat "johtajan valinnalla"?
Hajautetussa järjestelmässä, jossa on useita palvelimia, jotka vaikuttavat sovelluksen saatavuuteen, voi joskus olla, että vain yksi palvelin on vastuussa kolmannen osapuolen API:iden päivittämisestä, koska useat palvelimet voivat aiheuttaa ongelmia API:ita käytettäessä.
Tämä palvelin tunnetaan ensisijaisena palvelimena, ja sen valintamenettely tunnetaan nimellä johtajan valinta. Kun johtajapalvelin epäonnistuu hajautetussa järjestelmässä, palvelimien tulee huomata vika ja valita uusi johtaja. Konsensustekniikkaa käyttämällä tämä lähestymistapa soveltuu parhaiten korkean käytettävyyden ja vahvan johdonmukaisuuden sovelluksiin.
18. Mikä on lähestymistapasi TinyURL-tyyppisen URL-lyhennyspalvelun suunnitteluun?
TinyURL muuttaa pitkän URL-osoitteen yhdeksi, ainutlaatuiseksi lyhyeksi URL-osoitteeksi. Nämä tekniikat voivat myös hyväksyä lyhyen URL-osoitteen ja palauttaa täydellisen URL-osoitteen.
Mitkä ovat tärkeitä ominaisuuksia?
- Tee URL-osoite, joka on lyhyempi kuin alkuperäinen.
- Säilytä pidempi URL-osoite ja korvaa se lyhyemmällä.
- Salli uudelleenohjaus lyhyissä URL-osoitteissa.
- Lyhyitä URL-osoitteita mukautetuilla nimillä tuetaan.
- Käsittele useita tiedusteluja kerralla.
Mitkä ovat yleisimmät ongelmat?
- Kuinka seuraat tietokannan tallennustilaa?
- Mitä tapahtuu, jos käyttäjäkuormitus ylittää odotukset?
- Entä jos kaksi henkilöä käyttää samaa muokattua URL-osoitetta?
Harkitse seuraavia ehdotuksia:
- Hashing on käsite, jota voidaan käyttää vanhojen ja uusien URL-osoitteiden yhdistämiseen.
- REST API voidaan käyttää etupään viestinnän käsittelemiseen ja raskaan kuorman tasapainottamiseen.
- Monisäikeisyys on käsite, jonka avulla voit käsitellä useita pyyntöjä kerralla.
- Alkuperäiset URL-osoitteet tallennetaan NoSQL-tietokantoihin.
19. Mikä on lähestymistapasi Twitterin suunnitteluun?
Annetut vaatimukset:
- Tweettien lähettäminen
- Seurataan muita käyttäjiä
- Tweet-syöte/uutissyöte
- Järjestelmä on skaalautuva
- Ladataan nopeasti
- Järjestelmä on luotettava
Voit aloittaa Twitter-sovellusliittymän suunnittelun, kun olet määrittänyt kriteerit. Tältä se näyttäisi:
Aluksi hahmotellaan API:n tärkeimmät päätepisteet. Tässä on muutamia esimerkkejä:
- lähetä twiitti (viesti)
- seuraa käyttäjää (käyttäjätunnus)
- unfollowUser(käyttäjätunnus)
- getFeed(sivu)
Arkkitehtuuri, joka mahdollistaa nämä ominaisuudet, voidaan sitten hahmotella. Voimme aloittaa käyttäjästä, joka lähettää palvelinpyynnön. Voimme asentaa lisää API-palvelimia kuormituksen tasapainottimen taakse auttamaan reitittämään suurempia liikennetasoja skaalautuvuustarpeen täyttämiseksi. Meidän on lisättävä tietokanta tweettien tallentamista varten.
On tärkeää muistaa, että tarjoamamme API:n tulee olla skaalautuva. Jotta tämä palvelu olisi skaalautuva, voimme antaa yhden API-palvelimistamme lukea uutissyötteemme erillisestä välimuistista. Samalla meidän tulisi myös käyttää syötteiden tarjoajaa pitämään syötevälimuistimme ajan tasalla.
20. Luo uutissyötejärjestelmä Facebookille
Facebookin uutissyötteen avulla käyttäjät voivat nähdä, mitä heidän ystäväpiireissään, suosikkisivuilla ja organisaatioissa, joita he ovat seuranneet, tapahtuu.
Mitkä ovat joitakin olennaisia ominaisuuksia?
- Luo uutissyöte muiden käyttäjän seuraamien järjestelmäkokonaisuuksien viestien perusteella.
- Tekstiä, kuvia, ääntä ja videota voidaan käyttää uutissyöteviesteissä.
- Lisää reaaliajassa tuoretta sisältöä käyttäjän uutissyötteeseen.
Mitkä ovat yleisimpiä ongelmia?
- Entä jos uuden viestin ilmestyminen uutissyötteeseen kestää kauan?
- Pystyykö algoritmi hallitsemaan käyttäjien toiminnan piikkiä?
- Mitkä viestit pitäisi näkyä ensimmäisenä uutissyötteessä?
Harkitse seuraavia ehdotuksia:
- Tutki fanout-mekanismia viestien jakamiseksi seuraajille.
- Tutki, kuinka sirpalointia voidaan käyttää tehokkaasti käsittelemään suuria käyttäjäkuormia.
- Käyttäjän syötetietoja ei tule kopioida useille palvelimille. Jakaminen voidaan sen sijaan tehdä käyttäjätunnuksien perusteella.
21. Mikä on järjestelmän BASE-ominaisuus?
BASE-ominaisuudet ovat kaikkialla äskettäin ilmestyneissä NoSQL-tietokannoista. BASE-järjestelmä ei tarjoa johdonmukaisuutta CAP-lauseen mukaan. Tämä on keksitty lyhenne, joka vastaa CAP-lauseen seuraavaa järjestelmän ominaisuutta:
- Termi "periaatteessa käytettävissä" tarkoittaa, että järjestelmä on aina käytettävissä.
- Pehmeä tila tarkoittaa, että järjestelmän tila voi vaihdella ajan myötä, vaikka syöttöä ei olisikaan. Tämä johtuu lähinnä mallin mahdollisesta johdonmukaisuudesta.
- Koska järjestelmä ei saa syötettä tuona aikana, mahdollinen johdonmukaisuus tarkoittaa, että järjestelmästä tulee johdonmukainen ajan myötä.
22. Mitä on kuormituksen tasapainottaminen IP-osoitteen affiniteettitekniikalla?
Toinen näkyvä kuormituksen tasapainotusmenetelmä on IP-osoitteen affiniteetti. Asiakkaan IP-osoite on yhdistetty palvelinsolmuun tässä menetelmässä. Yksi palvelinsolmu käsittelee kaikki asiakkaan IP-osoitteesta tulevat pyynnöt.
Tämä menetelmä on helppo toteuttaa, koska IP-osoite on aina käytettävissä HTTP-pyynnön otsikossa eikä muita asetuksia tarvita. Jos asiakkaasi ovat todennäköisesti poistaneet evästeet käytöstä, tämä kuormituksen tasapainotus voi olla edullinen.
23. Mitä välimuistin korvausalgoritmit (tai häätökäytäntö) tarkalleen ottaen ovat?
Välimuistialgoritmit (tunnetaan myös nimellä välimuistin korvausalgoritmit, välimuistin korvauskäytännöt tai välimuistin poistokäytännöt) ovat optimointiohjeita tai algoritmeja, joita tietokoneohjelma tai laitteiston ylläpitämä rakenne voi käyttää hallitakseen tietokoneeseen tallennettujen tietojen välimuistia.
Välimuisti lisää nopeutta tallentamalla äskettäin käytettyjä tai usein käytettyjä tietoja muistialueille, jotka ovat nopeampia tai halvempia käyttää kuin perinteinen muistitallennus. Kun välimuisti on täynnä, algoritmin on päätettävä, mitkä kohteet poistetaan, jotta niille saadaan tilaa uusille.
24. Mitä tarkalleen ottaen tarkoitat hajautetulla tapahtumalla?
Hajautettu tapahtuma on mikä tahansa tilanne, jossa yksittäinen tapahtuma aiheuttaa kahden tai useamman erillisen tietolähteen muuttamisen, joita ei voida sitoa atomisesti.
Mikropalveluiden maailmassa siitä tulee paljon monimutkaisempaa, koska jokainen palvelu on työyksikkö, ja useimmiten useiden palvelujen on tehtävä yhteistyötä, jotta yritys menestyisi.
25. Mitä nälkä tarkalleen on?
Kun säiettä ei pysty saamaan säännöllistä pääsyä jaettuihin resursseihin, sen sanotaan näkevän nälkää. Tämä tapahtuu, kun "ahneet" säikeet tai korkeamman prioriteetin omaavat säikeet tekevät jaetuista resursseista saavuttamattomissa pitkiksi ajoiksi.
Harkitse objektia, joka tarjoaa synkronoidun menetelmän, joka palaa usein myöhässä. Jos yksi säie toistuvasti kutsuu tätä menetelmää, muut säikeet, jotka vaativat usein synkronoitua pääsyä samaan objektiin, estetään usein.
Yhteenveto
Aivoriihi on kaikki, mitä järjestelmäsuunnitteluhaastattelu sisältää. Olemme käsitelleet yleisimmät järjestelmäsuunnittelun haastattelukysymykset tässä viestissä.
Kattava käsitys menetelmästä, jota käytät tietyn järjestelmän luomisessa, on ratkaisevan tärkeää System Design -haastattelun läpäisemiseksi.
Jätä vastaus