Sisukord[Peida][Näita]
- 1. Mida te mõtlete süsteemi disaini all?
- 2. Millised on süsteemidisaineri kõige olulisemad omadused?
- 3. Mis täpselt on CAP teoreem?
- 4. Mida mõistate koormuse tasakaalustamise all?
- 5. Mis vahe on asünkroonse programmeerimise ja paralleelse programmeerimise vahel?
- 6. Mis vahe on horisontaalsel ja vertikaalsel skaleerimisel?
- 7. Mida täpsemalt latentsuse, läbilaskevõime ja süsteemi saadavuse all silmas pead?
- 8. Mis on ACID omadused?
- 9. Mis täpselt on sharding?
- 10. Mis on CDN?
- 11. Miks kasutada CDN-i?
- 12. Mis vahe on killustamisel ja partitsioonidel?
- 13. Mis täpselt on vahemällu salvestamine?
- 14. Mis on CDN servaserverid?
- 15. Millised on erinevad järjepidevuse mustrid süsteemi kavandamisel?
- 16. Mida sa mõtled optimistliku lukustamise all?
- 17. Mida sa täpselt mõtled “juhi valimise” all?
- 18. Milline on teie lähenemine TinyURL-i sarnase URL-i lühendamisteenuse kujundamiseks?
- 19. Milline on teie lähenemine twitteri kujundamisele?
- 20. Loo Facebooki uudistevoo süsteem
- 21. Mis on süsteemi BASE omadus?
- 22. Mis on koormuse tasakaalustamine IP-aadressi afiinsustehnikaga?
- 23. Mis täpselt on vahemälu asendamise (või väljatõstmise poliitika) algoritmid?
- 24. Mida sa täpselt hajutatud tehingu all mõtled?
- 25. Mis täpselt on nälgimine?
- Järeldus
Enne alustamist soovitame lugeda meie süsteemidisaini sissejuhatav juhend oma põhiteadmiste värskendamiseks.
Intervjueerides töökohale, mis nõuab süsteemidisaini teadmisi, on teil võimalus rääkida oma taustast ja näidata oma võimet keerulisi süsteeme arendada.
Potentsiaalse tööandjaga vesteldes võib viis, kuidas te oma teadmisi väljendate, aidata teil näidata, et olete sellele ametikohale pädev kandidaat.
Tööintervjuuks saate valmistuda, õppides selgeks põhilised disainikontseptsioonid ja mõeldes, kuidas vastate nende kohta tehtud päringutele. Selles postituses käsitleme mõningaid tüüpilisi süsteemikujunduse intervjuu küsimusi ja vastuseid, et aidata teil järgmiseks intervjuuks valmistuda.
1. Mida te mõtlete süsteemi disaini all?
Süsteemi omaduste, sealhulgas moodulite, arhitektuuri, komponentide ja nende liideste ning eelnevalt kindlaksmääratud kriteeriumidel põhinevate andmete loomise protsessi nimetatakse süsteemi kujundamiseks.
See on süsteemide määratlemise, loomise ja kujundamise protsess, et täita ettevõtte või organisatsiooni konkreetseid eesmärke ja eesmärke. Süsteemi kujundamine seisneb rohkem süsteemianalüüsis, arhitektuurimustrites, API-des, disainimustrites ja selle kõige kokku liimimises kui kodeerimises.
2. Millised on süsteemidisaineri kõige olulisemad omadused?
- Kasutaja suhtlus
- Väline API kõne
- Võrguühenduseta protsessid
3. Mis täpselt on CAP teoreem?
CAP (Consistency-Availability-Partition Tolerance) teoreemi kohaselt ei saa hajutatud süsteem tagada C, A ja P korraga. See võib anda ainult kaks kolmest tagatisest. Kasutame hajutatud andmebaasisüsteemi, mis aitab meil seda mõista.
- Järjepidevus: see määrab, et andmed peavad pärast andmebaasitehingu lõpetamist jääma järjepidevaks. Näiteks peaksid kõik päringud pärast andmebaasi värskendamist tagastama sama vastuse.
- Kättesaadavus: andmebaasid peavad olema kogu aeg kättesaadavad ja reageerima.
- Partitsioonitaluvus: isegi kui suhtlus muutub problemaatiliseks, peaks andmebaasisüsteem jätkama tööd.
4. Mida mõistate koormuse tasakaalustamise all?
Koormuse tasakaalustamine on protsess sissetuleva liikluse tõhusaks hajutamiseks taustaserverite vahel. Neid nimetatakse serverikogumiteks. Kaasaegsed veebisaidid on loodud vastu võtma miljoneid klientide päringuid ning vastama neile kiiresti ja usaldusväärselt. Nende nõudmiste täitmiseks on vaja rohkem servereid.
Sel juhul on ülioluline jagada päringuliiklus tõhusalt iga serveri vahel, et vältida nende ülekoormamist. Koormuse tasakaalustaja toimib liikluspolitseina, peatab päringuid ja suunab need saadaolevate serverite vahel nii, et ükski server ei oleks ülekoormatud, mis võib rakenduse jõudlust halvendada.
5. Mis vahe on asünkroonse programmeerimise ja paralleelse programmeerimise vahel?
Kui käivitate midagi asünkroonselt, tähendab see, et te ei pea ootama, kuni see lõpeb, enne kui saate millegi muu juurde minna. Paralleelsus viitab paljude ülesannete samaaegsele täitmisele.
Kui saate töid jagada erinevateks töörühmadeks, töötab paralleelsus tõhusalt. Asünkroniseerimine ja tagasihelistamised on vahendid (tööriist või mehhanism), mis esindavad samaaegsust, st üksuste rühma, mis suudavad suhelda ja ressursse jagada.
6. Mis vahe on horisontaalsel ja vertikaalsel skaleerimisel?
Uute arvutusseadmete lisamist võrku, mis jaotab töötlemis- ja mälunõudluse hajutatud seadmete võrgus, nimetatakse horisontaalseks skaleerimiseks. Lihtsamalt öeldes lisatakse praegusesse kogumisse uued serveri eksemplarid ja liikluskoormus jaotatakse tõhusalt nende seadmete vahel.
Vertikaalne skaleerimine viitab ühe arvuti ressursivõimsuse suurendamisele, lisades RAM-i, tõhusaid protsessoreid või migreerudes uuele suurema võimsusega masinale. Serveri funktsionaalsust saab suurendada ilma programmeerimismuudatusi nõudmata.
7. Mida täpsemalt latentsuse, läbilaskevõime ja süsteemi saadavuse all silmas pead?
Jõudlus on süsteemi disaini oluline aspekt, kuna see aitab kaasa meie teenuste kiirusele ja usaldusväärsusele. Kolm kõige olulisemat tulemusnäitajat on järgmised:
- Aega, mis kulub ühe sõnumi edastamiseks millisekundites, nimetatakse latentsusajaks.
- Teatud aja jooksul süsteemi kaudu edukalt edastatud andmete hulka nimetatakse läbilaskevõimeks. Selle mõõtmiseks kasutatakse bitti sekundis.
- Aega, mille jooksul süsteem on päringutele reageerimiseks saadaval, määrab selle kättesaadavus. Süsteemi tööaeg / (System Uptime+Downtime) on selle arvutamise valem.
8. Mis on ACID omadused?
- Aatomilisus: see tagab, et andmebaasi muudatused on kas kõik või mitte.
- Järjepidevus: Andmeväärtused andmebaasis on järjepidevad.
- Isolatsioon: see viitab kahe tehingu eraldamisele.
- Vastupidavus: andmed säilitatakse isegi siis, kui server ebaõnnestub.
9. Mis täpselt on sharding?
Jagamine on tehnika tohutu loogilise andmestiku jagamiseks paljudeks andmebaasideks. See viitab ka horisontaalsele andmete tükeldamisele, kuna andmed salvestatakse mitmesse arvutisse. Selle tulemusena saab jagatud andmebaas käsitleda rohkem päringuid kui üks suur arvuti.
10. Mis on CDN?
Sisu edastamise võrk on ülemaailmne arvutite võrk, mis teevad koostööd Interneti-teabe kiireks edastamiseks. See võimaldab Interneti-sisu laadimiseks vajalike elementide, näiteks HTML-lehtede, JavaScript-failide, stiilitabelite, piltide ja videote kiiret edastamist.
11. Miks kasutada CDN-i?
- Arvestades, et staatilised ressursid moodustavad umbes 80% veebisaidist, vähendab CDN-i kasutuselevõtt märkimisväärselt lähteserveri pinget.
- Kuna reisimiseks on vähem vahemaad, edastatakse teavet veebisaitide omanikele, kellel on külastajaid paljudest geograafilistest piirkondadest, kiiremini.
- CDN-ide kasutajad saavad kasu ka võimest kiiresti suurendada ja vähendada, reageerides liikluse suurenemisele.
12. Mis vahe on killustamisel ja partitsioonidel?
Andmebaasi jagamine – Andmebaasi jagamine on meetod üksiku andmestiku jagamiseks arvukateks andmebaasideks, et seda saaks salvestada erinevatesse tööjaamadesse. Suuremaid andmekogumeid saab jagada väiksemateks tükkideks ja salvestada mitmesse andmesõlmedesse, suurendades süsteemi kogusalvestusmahtu.
Andmete levitamisel paljude masinate vahel saab jagatud andmebaas käsitleda rohkem päringuid kui üks süsteem.
Andmebaasi partitsioonid on salvestatud andmebaasiobjektide (tabelid, indeksid ja vaated) jagamine eraldi osadeks. Juhitavuse, jõudluse ja kättesaadavuse suurendamiseks jaotatakse suured andmebaasiobjektid.
Mõnel juhul võib partitsioonide jagamine parandada kiirust partitsioonitud andmetele juurdepääsul. Jaotamine võib vähendada indeksi suurust ja suurendada võimalust leida mälust kõige vajalikumad indeksid, toimides indeksite juhtiva veeruna.
13. Mis täpselt on vahemällu salvestamine?
Vahemällu salvestamine on meetod failide koopiate hoidmiseks ajutises salvestuspiirkonnas, mida nimetatakse vahemällu, mis kiirendab juurdepääsu andmetele ja vähendab saidi latentsust. Vahemällu saab salvestada ainult teatud hulga andmeid.
Seetõttu on ärieesmärkide jaoks kõige sobivamate vahemälu värskendamise tehnikate määramine ülioluline.
14. Mis on CDN servaserverid?
CDN-servereid, mis hoiavad vahemällu teie lähteserverist või salvestusklastrist hangitud materjali, nimetatakse servaserveriteks. Kohalolekupunkt on termin, mida kasutatakse sageli ääreserverite (POP) kirjeldamiseks.
Ääreserverid asuvad füüsiliselt POP-is. Selles POP-is võivad teabe vahemällu salvestada paljud servaserverid.
Võimalus pakkuda veebisaidi jaotisi mitmest kohast vähendab külastaja ja veebiserveri vahelist kaugust, mille tulemuseks on väiksem latentsusaeg. CDN-i servaserverid saavutavad selle täpse eesmärgi.
15. Millised on erinevad järjepidevuse mustrid süsteemi kavandamisel?
Vastavalt CAP teoreemile peaks iga lugemistaotlus hankima viimati kirjutatud andmed. Kui paljudele andmete koopiatele on juurdepääs, muutub nende sünkroonimine nii, et kliendid saaksid pidevalt värskeid andmeid, raskusi. Järgmised on võimalikud järjepidevuse mustrid.
- Nõrk järjepidevus: pärast andmete kirjutamist võib lugemistaotlus saada värskendatud andmeid või mitte. See stabiilsuse tase on ideaalne reaalajas kasutatavate rakenduste jaoks, nagu VoIP, videovestlus ja mitme mängijaga mängimine.
- Lõplik järjepidevus: lugemised näevad lõpuks millisekundite jooksul pärast andmete kirjutamist uusimaid andmeid. Andmed dubleeritakse sel juhul asünkroonselt. DNS ja meilisüsteemid on selle näited. See toimib tõhusalt kõrge kättesaadavusega süsteemides.
- Tugev järjepidevus: pärast andmete kirjutamist näevad tulevased lugejad kõige värskemaid andmeid. Andmed kopeeritakse sel juhul sünkroonselt. Seda võib täheldada RDBMS-is ja failisüsteemides, mis sobivad andmeedastuseks.
16. Mida sa mõtled optimistliku lukustamise all?
Optimistlik lukustamine on mehhanism, mille abil loete kirjet, märgite üles versiooninumbri (alternatiivsed viisid hõlmavad kuupäevi, ajatempleid või kontrollsummasid/räsi) ja seejärel kontrollite enne selle tagasi kirjutamist, et versioon poleks muutunud.
Kui kirjutate kirje tagasi, kasutate versiooni värskenduse filtreerimiseks, et tagada selle aatomilisus. (st seda pole versiooni kontrollimise ja kirje kettale kirjutamise vahel muudetud) ja värskendage seda korraga.
17. Mida sa täpselt mõtled “juhi valimise” all?
Hajutatud süsteemis, kus rakenduse kättesaadavust soodustavad arvukad serverid, võib juhtuda, et ainult üks server vastutab kolmanda osapoole API-de värskendamise eest, kuna mitu serverit võivad API-de kasutamisel probleeme tekitada.
Seda serverit nimetatakse esmaseks serveriks ja selle valimise protseduuri nimetatakse juhi valimiseks. Kui juhtserver ebaõnnestub hajutatud süsteemis, peavad serverid tõrget märkama ja valima uue juhi. Konsensusmeetodit kasutades sobib see lähenemisviis kõige paremini kõrge kättesaadavuse ja tugeva järjepidevuse rakenduste jaoks.
18. Milline on teie lähenemine TinyURL-i sarnase URL-i lühendamisteenuse kujundamiseks?
TinyURL muudab pika URL-i üheks unikaalseks lühikeseks URL-iks. Need tehnoloogiad võivad aktsepteerida ka lühikest URL-i ja tagastada täieliku URL-i.
Millised on mõned olulised omadused?
- Looge URL, mis on algsest lühem.
- Hoidke pikem URL ja asendage see lühema URL-iga.
- Luba ümbersuunamine lühikestes URL-ides.
- Toetatakse kohandatud nimedega lühikesi URL-e.
- Käsitlege mitut päringut korraga.
Millised on kõige levinumad probleemid?
- Kuidas jälgite andmebaasi salvestamist?
- Mis juhtub, kui kasutaja koormus ületab ootusi?
- Mis siis, kui kaks inimest kasutavad sama kohandatud URL-i?
Kaaluge järgmisi soovitusi:
- Räsimine on mõiste, mida saab kasutada vanade ja uute URL-ide ühendamiseks.
- REST API saab kasutada esiotsa suhtlemiseks ja suure koormuse tasakaalustamiseks.
- Multithreading on mõiste, mis võimaldab teil käsitleda mitut päringut korraga.
- Algsed URL-id salvestatakse NoSQL-i andmebaasidesse.
19. Milline on teie lähenemine twitteri kujundamisele?
Esitatud nõuded:
- Tweetide saatmine
- Teiste kasutajate jälgimine
- Säutsuvoog/uudistevoog
- Süsteem on skaleeritav
- Laadib kiiresti
- Süsteem on usaldusväärne
Kui olete kriteeriumid paika pannud, võite hakata oma Twitteri API disaini välja mõtlema. See näeks välja nii:
Alustuseks visandame API peamised lõpp-punktid. Siin on mõned näited.
- saatke säuts(sõnum)
- jälgikasutaja(kasutaja ID)
- UnfollowUser(kasutaja ID)
- getFeed (leht)
Seejärel saab visandada neid omadusi võimaldava arhitektuuri. Võime alustada kasutajast, kes saadab serveripäringu. Saame paigaldada täiendavaid API-servereid koormuse tasakaalustaja taha, et aidata suunata suuremaid liiklustasemeid skaleeritavuse vajaduse täitmiseks. Peame oma säutsude salvestamiseks kohe lisama andmebaasi.
Oluline on meeles pidada, et meie pakutav API peaks olema skaleeritav. Selle teenuse skaleeritavaks muutmiseks saame lasta ühel meie API serveritest lugeda meie uudistevoo jaoks eraldi vahemälust. Seda tehes peaksime kasutama ka vooteenuse pakkujat, et hoida oma voo vahemälu ajakohasena.
20. Loo Facebooki uudistevoo süsteem
Facebooki uudistevoog võimaldab kasutajatel näha, mis toimub nende sõprade suhtlusringides, lemmiklehtedel ja organisatsioonides, mida nad on jälginud.
Millised on mõned olulised omadused?
- Looge uudistevoog teiste kasutaja jälgitavate süsteemiüksuste postituste põhjal.
- Teksti, pilte, heli ja videot saab kasutada uudistevoo postitustes.
- Lisage kasutaja uudistevoogu reaalajas värsket sisu.
Millised on kõige levinumad probleemid?
- Mis siis, kui uue postituse uudisvoos ilmumine võtab kaua aega?
- Kas algoritm suudab hallata kasutajate aktiivsuse hüppeid?
- Milliseid postitusi tuleks uudistevoos esimesena kuvada?
Kaaluge järgmisi soovitusi:
- Uurige fännide eemaldamise mehhanismi postituste jagamiseks jälgijatele.
- Uurige, kuidas saab killustamist kasutada suure kasutajakoormuse tõhusaks käsitlemiseks.
- Kasutaja vooandmeid ei tohiks paljudes serverites dubleerida. Jagamist saab selle asemel teha kasutaja ID-de alusel.
21. Mis on süsteemi BASE omadus?
BASE-funktsioonid on hiljuti ilmunud NoSQL-i andmebaasides üldlevinud. BASE-süsteem ei taga CAP teoreemi kohaselt järjepidevust. See on väljamõeldud akronüüm, mis vastab CAP teoreemi järgmisele süsteemi omadusele:
- Mõiste "põhimõtteliselt saadaval" tähendab, et süsteem on kogu aeg saadaval.
- Pehme olek tähendab, et süsteemi olek võib aja jooksul muutuda, isegi kui sisendit ei anta. See on peamiselt tingitud mudeli võimalikust järjepidevusest.
- Arvestades, et süsteem selle perioodi jooksul sisendit ei saa, tähendab lõplik järjepidevus, et süsteem muutub aja jooksul järjepidevaks.
22. Mis on koormuse tasakaalustamine IP-aadressi afiinsustehnikaga?
Teine silmapaistev koormuse tasakaalustamise meetod on IP-aadressi afiinsus. Kliendi IP-aadress on selle meetodi puhul ühendatud serverisõlmega. Üks serverisõlm käsitleb kõiki kliendi IP-aadressi päringuid.
Seda meetodit on lihtne rakendada, kuna IP-aadress on HTTP-päringu päises alati juurdepääsetav ja täiendavaid seadistusi pole vaja. Kui teie klientidel on küpsised tõenäoliselt desaktiveeritud, võib selline koormuse tasakaalustamise vorm olla kasulik.
23. Mis täpselt on vahemälu asendamise (või väljatõstmise poliitika) algoritmid?
Vahemälu algoritmid (tuntud ka kui vahemälu asendusalgoritmid, vahemälu asendamise poliitikad või vahemälu väljatõstmise poliitikad) on optimeerimisjuhised või algoritmid, mida arvutiprogramm või riistvaraliselt hooldatav struktuur saab kasutada arvutisse salvestatud andmete vahemälu haldamiseks.
Vahemällu salvestamine suurendab kiirust, salvestades hiljuti kasutatud või sageli kasutatud andmeid mälupiirkondadesse, millele juurdepääs on kiirem või odavam kui traditsioonilisel mälusalvestusel. Kui vahemälu on täis, peab algoritm otsustama, millised üksused eemaldada, et uutele koht teha.
24. Mida sa täpselt hajutatud tehingu all mõtled?
Jaotatud tehing on mis tahes asjaolu, mille korral üks sündmus põhjustab kahe või enama erineva andmeallika muutumise, mida ei saa aatomiliselt siduda.
Mikroteenuste maailmas muutub see palju keerulisemaks, kuna iga teenus on tööühik ja enamasti peavad paljud teenused tegema koostööd, et äri oleks edukas.
25. Mis täpselt on nälgimine?
Kui lõim ei suuda saada regulaarset juurdepääsu jagatud ressurssidele, on see väidetavalt näljane. See juhtub siis, kui "ahned" lõimed või kõrgema "prioriteediga" lõimed muudavad jagatud ressursid pikaks ajaks kättesaamatuks.
Mõelge objektile, mis pakub sünkroonitud meetodit, mis naaseb sageli hilja. Kui üks lõime seda meetodit korduvalt kutsub, blokeeritakse sageli teised lõimed, mis nõuavad sagedast sünkroonitud juurdepääsu samale objektile.
Järeldus
Ajurünnak on kõik, mida süsteemikujunduse intervjuu hõlmab. Oleme selles postituses käsitlenud kõige levinumaid süsteemikujunduse intervjuu küsimusi.
Konkreetse süsteemi loomisel kasutatava meetodi põhjalik mõistmine on System Designi intervjuu läbimiseks ülioluline.
Jäta vastus