Tartalomjegyzék[Elrejt][Előadás]
- 1. Mit értesz rendszertervezés alatt?
- 2. Melyek a rendszertervező legfontosabb jellemzői?
- 3. Mi is pontosan a CAP tétel?
- 4. Mit értesz terheléselosztás alatt?
- 5. Mi a különbség az aszinkron programozás és a párhuzamos programozás között?
- 6. Mi a különbség a vízszintes és a függőleges méretezés között?
- 7. Mit ért pontosan a várakozási idő, az átviteli sebesség és a rendszer rendelkezésre állása alatt?
- 8. Mik a SAV tulajdonságok?
- 9. Mi is pontosan a sharding?
- 10. Mi az a CDN?
- 11. Miért érdemes CDN-t használni?
- 12. Mi a különbség a felosztás és a particionálás között?
- 13. Mi is pontosan a gyorsítótárazás?
- 14. Mik azok a CDN élkiszolgálók?
- 15. Melyek a különböző konzisztencia minták a rendszertervezésben?
- 16. Mit értesz optimista zárolás alatt?
- 17. Mit értesz pontosan „vezetőválasztás” alatt?
- 18. Mi a megközelítése egy TinyURL-szerű URL-rövidítő szolgáltatás megtervezéséhez?
- 19. Mi a véleményed a Twitter tervezéséről?
- 20. Hozza létre a Facebook hírfolyam rendszerét
- 21. Mi a rendszer BASE tulajdonsága?
- 22. Mi az a terheléselosztás az IP-cím rokonsági technikával?
- 23. Mik is pontosan a gyorsítótár-csere (vagy kilakoltatási szabályzat) algoritmusai?
- 24. Mit értesz pontosan elosztott tranzakció alatt?
- 25. Mi is pontosan az éhezés?
- Következtetés
Mielőtt elkezdené, javasoljuk, hogy olvassa el a mi bevezető útmutató a rendszertervezésről hogy felfrissítse alapvető ismereteit.
Amikor rendszertervezési ismereteket igénylő pozícióra készít interjút, lehetősége van arra, hogy beszéljen hátteréről, és bebizonyítsa, hogy képes bonyolult rendszerek fejlesztésére.
Amikor egy potenciális munkaadóval beszél, az, ahogyan kifejezi szakértelmét, segíthet annak bizonyításában, hogy Ön kompetens jelölt a pozíció betöltésére.
Felkészülhet az állásinterjúra, ha megtanulja az alapvető tervezési koncepciókat, és átgondolja, hogyan fog válaszolni a velük kapcsolatos kérdésekre. Ebben a bejegyzésben áttekintünk néhány tipikus rendszertervezési interjúra adott kérdést és választ, hogy segítsünk felkészülni a következő interjúra.
1. Mit értesz rendszertervezés alatt?
A rendszerjellemzők, köztük a modulok, az architektúra, az összetevők és azok interfészei, valamint az adatok előre meghatározott kritériumok alapján történő megállapításának folyamatát rendszertervezésnek nevezik.
Olyan rendszerek meghatározásának, létrehozásának és tervezésének folyamata, amelyek megfelelnek egy vállalat vagy szervezet konkrét céljainak és célkitűzéseinek. A rendszertervezés sokkal inkább a rendszerelemzésről, az építészeti mintákról, az API-król, a tervezési mintákról és mindezek összeragasztásáról szól, mint a kódolásról.
2. Melyek a rendszertervező legfontosabb jellemzői?
- Felhasználói interakció
- Külső API hívás
- Offline folyamatok
3. Mi is pontosan a CAP tétel?
A CAP (Consistency-Availability-Partition Tolerance) tétel szerint egy elosztott rendszer nem tudja egyszerre biztosítani a C-t, az A-t és a P-t. A három biztosíték közül legfeljebb kettőt tud nyújtani. Használjunk elosztott adatbázis-rendszert, hogy segítsen ennek megértésében.
- Konzisztencia: Meghatározza, hogy az adatoknak konzisztensnek kell maradniuk az adatbázis-tranzakció befejezése után. Például minden lekérdezésnek ugyanazt a választ kell adnia az adatbázis frissítése után.
- Elérhetőség: Az adatbázisoknak mindig elérhetőnek és érzékenynek kell lenniük.
- Partíciótűrés: Ha a kommunikáció problémássá válik, az adatbázisrendszernek továbbra is működnie kell.
4. Mit értesz terheléselosztás alatt?
Terheléselosztás a bejövő forgalom hatékony szétosztása a háttérkiszolgálók között. Ezeket szerverkészleteknek nevezzük. A modern webhelyek úgy készültek, hogy az ügyfelek millióinak lekérdezését kezeljék, és gyorsan és megbízhatóan válaszoljanak rájuk. Több szerverre lesz szükség ezeknek az igényeknek a kezelésére.
Ebben az esetben kritikus fontosságú, hogy a kérések forgalmat hatékonyan osszuk fel az egyes kiszolgálók között, hogy elkerüljük a túlterhelést. A terheléselosztó forgalmi zsaruként működik, elfogja a kéréseket, és az elérhető szerverek között irányítja azokat, hogy egyetlen szerver se legyen túlterhelve, ami potenciálisan rontja az alkalmazások teljesítményét.
5. Mi a különbség az aszinkron programozás és a párhuzamos programozás között?
Ha bármit aszinkron módon futtat, az azt jelenti, hogy nem kell megvárnia a befejezést, mielőtt valami másra léphet. A párhuzamosság sok feladat egyidejű végrehajtását jelenti.
Ha a munkákat különböző munkadarabokra bonthatja, a párhuzamosság hatékonyan működik. Az aszinkron és a visszahívások olyan eszközök (eszközök vagy mechanizmusok), amelyek az egyidejűséget képviselik, azaz olyan entitások csoportját, amelyek képesek kommunikálni és megosztani az erőforrásokat.
6. Mi a különbség a vízszintes és a függőleges méretezés között?
Vízszintes skálázásnak nevezik, ha új számítástechnikai berendezéseket adnak hozzá egy hálózathoz, amely a feldolgozási és memóriaigényt szétosztja az eszközök szétszórt hálózatán. Leegyszerűsítve, új kiszolgálópéldányok kerülnek hozzáadásra az aktuális készlethez, és a forgalom hatékonyan oszlik meg ezen eszközök között.
A függőleges méretezés egyetlen számítógép erőforráskapacitásának bővítését jelenti RAM, hatékony CPU hozzáadásával vagy egy nagyobb kapacitású új gépre való átállással. A szerver funkcionalitása programozási változtatás nélkül bővíthető.
7. Mit ért pontosan a várakozási idő, az átviteli sebesség és a rendszer rendelkezésre állása alatt?
A teljesítmény a rendszertervezés alapvető szempontja, mivel hozzájárul szolgáltatásaink gyorsaságához és megbízhatóságához. A három legfontosabb teljesítménymérő a következő:
- Azt az időt, amely egy üzenet kézbesítéséhez ezredmásodpercben tart, késleltetésnek nevezzük.
- A rendszeren keresztül egy adott időszakban sikeresen átvitt adatmennyiséget átviteli sebességnek nevezzük. A méréshez a másodpercenkénti biteket használják.
- Azt, hogy egy rendszer mennyi ideig áll rendelkezésére a lekérdezésekre való reagálásra, a rendelkezésre állása határozza meg. A rendszer üzemideje / (Rendszer üzemidő+leállási idő) a kiszámításának képlete.
8. Mik a SAV tulajdonságok?
- Atomosság: Biztosítja, hogy az adatbázis-módosítások mindegyike vagy semmi.
- Konzisztencia: Az adatbázisban lévő adatértékek konzisztensek.
- Elkülönítés: Két tranzakció elkülönítésére utal.
- Tartósság: Az adatok akkor is megmaradnak, ha a szerver meghibásodik.
9. Mi is pontosan a sharding?
A megosztás egy hatalmas logikai adatkészlet sok adatbázisra való felosztásának technikája. Vízszintes adatfelosztásra is utal, mivel az adatokat több számítógépen tárolják. Ennek eredményeként egy megosztott adatbázis több lekérdezést tud kezelni, mint egyetlen hatalmas számítógép.
10. Mi az a CDN?
A tartalomszolgáltató hálózat számítógépek világméretű hálózata, amelyek együttműködnek az internetes információk gyors biztosításában. Lehetővé teszi az internetes tartalmak betöltéséhez szükséges elemek, például HTML-oldalak, JavaScript-fájlok, stíluslapok, képek és videók gyors szállítását.
11. Miért érdemes CDN-t használni?
- Tekintettel arra, hogy a statikus erőforrások a webhelyek körülbelül 80%-át teszik ki, a CDN alkalmazása jelentősen csökkenti az eredeti kiszolgáló terhelését.
- Mivel kevesebb az utazási távolság, gyorsabban jutnak el információk a webhely-tulajdonosok számára, akiknek számos földrajzi területről érkeznek látogatói.
- A CDN-ek felhasználói a forgalomnövekedésre reagáló gyors fel- és leskálázási képességből is profitálhatnak.
12. Mi a különbség a felosztás és a particionálás között?
Adatbázis megosztása – Az adatbázis felosztása egyetlen adatkészlet particionálásának módszere számos adatbázisba, így azok különböző munkaállomásokon tárolhatók. A nagyobb adatkészletek kisebb darabokra bonthatók és több adatcsomópontban tárolhatók, növelve a rendszer teljes tárolókapacitását.
Az adatok sok gépen való szétosztásával egy megosztott adatbázis több lekérdezést tud kezelni, mint egyetlen rendszer.
Az adatbázis-particionálás a tárolt adatbázis-objektumok (táblázatok, indexek és nézetek) különálló részekre osztásának folyamata. A szabályozhatóság, a teljesítmény és a rendelkezésre állás növelése érdekében a nagy adatbázis-objektumok particionálva vannak.
Egyes esetekben a particionálás növelheti a sebességet a particionált adatok elérésekor. A particionálás csökkentheti az index méretét, és növelheti annak esélyét, hogy a leginkább szükséges indexeket megtalálják a memóriában azáltal, hogy az indexek vezető oszlopaként működik.
13. Mi is pontosan a gyorsítótárazás?
A gyorsítótárazás a fájlmásolatok gyorsítótárként ismert ideiglenes tárolóterületen való tárolásának technikája, amely felgyorsítja az adatok elérését és csökkenti a webhely késleltetését. A gyorsítótárban csak bizonyos mennyiségű adat tárolható.
Ennek eredményeként kritikus fontosságú az üzleti céloknak leginkább megfelelő gyorsítótár-frissítési technikák meghatározása.
14. Mik azok a CDN élkiszolgálók?
Azokat a CDN-kiszolgálókat, amelyek gyorsítótárazzák az eredeti kiszolgálótól vagy tárolófürttől beszerzett anyagot, szélső kiszolgálóknak nevezzük. A jelenléti pont egy olyan kifejezés, amelyet gyakran használnak a peremkiszolgálók (POP) leírására.
A peremkiszolgálók fizikailag egy POP-on vannak elhelyezve. Ezen a POP-on az információkat sok szélső kiszolgáló gyorsítótárazhatja.
Az a lehetőség, hogy egy webhely szakaszait több helyről biztosítják, csökkenti a távolságot a látogató és a webszerver között, ami alacsonyabb késleltetést eredményez. A CDN élkiszolgálók pontosan ezt a célt érik el.
15. Melyek a különböző konzisztencia minták a rendszertervezésben?
A CAP-tétel szerint minden olvasási kérésnek a legutóbb írt adatokat kell lekérnie. Ha sok adatmásolat érhető el, akkor nehézséget okoz azok szinkronizálása, hogy az ügyfelek folyamatosan friss adatokat kapjanak. A következő lehetséges konzisztenciaminták:
- Gyenge konzisztencia: Az adatírást követően az olvasási kérés nem tudja megszerezni a frissített adatokat. Ez a stabilitási szint ideális a valós idejű alkalmazásokhoz, mint például a VoIP, a videocsevegés és a többjátékos játék.
- Végső konzisztencia: Az olvasások végül az adatok írása után ezredmásodperceken belül megtekintik a legfrissebb adatokat. Az adatok ebben az esetben aszinkron módon duplikálódnak. A DNS és az e-mail rendszerek példák erre. Ez hatékonyan működik magas rendelkezésre állású rendszerekben.
- Erős konzisztencia: Az adatírást követően a jövőbeli olvasók a legfrissebb adatokat tekintik meg. Az adatok ebben az esetben szinkronban másolódnak. Ez megfigyelhető az adatátvitelre alkalmas RDBMS-ekben és fájlrendszerekben.
16. Mit értesz optimista zárolás alatt?
Az optimista zárolás egy olyan mechanizmus, amelyben beolvas egy rekordot, feljegyzi a verziószámot (alternatív módok közé tartozik a dátum, időbélyeg vagy ellenőrző összeg/kivonat), majd ismételten ellenőrzi, hogy a verzió nem változott-e, mielőtt visszaírná.
Amikor visszaírja a rekordot, a verziót használja a frissítés szűrésére, hogy megbizonyosodjon arról, hogy az atomi. (azaz nem változott a verzió ellenőrzése és a rekord lemezre írása között), és egyszerre frissítse.
17. Mit értesz pontosan „vezetőválasztás” alatt?
Egy elosztott rendszerben, ahol számos szerver járul hozzá az alkalmazás elérhetőségéhez, előfordulhatnak olyan esetek, amikor csak egy kiszolgáló felelős a harmadik féltől származó API-k frissítéséért, mivel több szerver is problémákat okozhat az API-k használata során.
Ezt a kiszolgálót elsődleges kiszolgálónak, a kiválasztásának eljárását pedig vezetőválasztásnak nevezik. Amikor a vezető szerver meghibásodik egy elosztott rendszerben, a szervereknek észre kell venniük a hibát, és új vezetőt kell választaniuk. A konszenzusos technikát alkalmazva ez a megközelítés a legalkalmasabb a magas rendelkezésre állású és erős konzisztenciájú alkalmazásokhoz.
18. Mi a megközelítése egy TinyURL-szerű URL-rövidítő szolgáltatás megtervezéséhez?
A TinyURL a hosszú URL-t egyetlen, egyedi rövid URL-címmé alakítja át. Ezek a technológiák rövid URL-t is elfogadnak, és a teljes URL-t visszaadják.
Melyek a legfontosabb tulajdonságok?
- Hozzon létre egy URL-t, amely rövidebb az eredetinél.
- Tartsa meg a hosszabb URL-t, és cserélje ki a rövidebbre.
- Lehetővé teszi az átirányítást rövid URL-ekben.
- Az egyéni nevekkel rendelkező rövid URL-ek támogatottak.
- Több kérdés kezelése egyszerre.
Melyek a leggyakoribb problémák?
- Hogyan követi nyomon az adatbázis tárolását?
- Mi történik, ha a felhasználói terhelés meghaladja az elvárásokat?
- Mi van akkor, ha két személy ugyanazt az egyéni URL-t használja?
Vegye figyelembe a következő javaslatokat:
- A kivonatolás egy olyan fogalom, amely a régi és az új URL-ek összekapcsolására használható.
- REST API használható a front-end kommunikáció kezelésére és a nagy terhelés kiegyensúlyozására.
- A multithreading egy olyan fogalom, amely lehetővé teszi több kérés egyidejű kezelését.
- Az eredeti URL-címeket a NoSQL-adatbázisok tárolják.
19. Mi a véleményed a Twitter tervezéséről?
Adott követelmények:
- Tweetek küldése
- Más felhasználók követése
- Tweet hírfolyam/hírcsatorna
- A rendszer méretezhető
- Gyorsan betöltődik
- A rendszer megbízható
Akkor kezdheti el a Twitter API-tervezés kidolgozását, ha megállapította a kritériumokat. Így jelenne meg:
Kezdésként felvázoljuk az API kulcsfontosságú végpontjait. Íme néhány példa:
- Tweet küldése (üzenet)
- felhasználó követése(felhasználói azonosító)
- unfollowUser(felhasználói azonosító)
- getFeed(oldal)
Ezután felvázolható az az architektúra, amely lehetővé teszi ezeket a jellemzőket. Kezdhetjük azzal a felhasználóval, aki szerverkérést küld. További API-szervereket telepíthetünk a terheléselosztó mögé, hogy segítsünk a nagyobb forgalom irányítását a skálázhatósági igények kielégítése érdekében. Hozzá kell adnunk egy adatbázist a tweetjeink tárolásához.
Fontos megjegyezni, hogy az általunk biztosított API-nak méretezhetőnek kell lennie. A szolgáltatás méretezhetősége érdekében az egyik API-szerverünket külön gyorsítótárból olvashatjuk a hírfolyamunk számára. Ennek során hírcsatorna-szolgáltatót is használnunk kell, hogy hírcsatorna-gyorsítótárunkat naprakészen tartsuk.
20. Hozza létre a Facebook hírfolyam rendszerét
A Facebook hírfolyamán a felhasználók láthatják, mi történik ismerőseik köreiben, kedvenc oldalain és az általuk követett szervezetekben.
Melyek az alapvető jellemzők?
- Hozzon létre egy hírfolyamot a felhasználó által követett más rendszerentitások bejegyzései alapján.
- Szöveg, kép, hang és videó egyaránt használható a hírfolyam-bejegyzésekben.
- Valós időben adjon hozzá friss tartalmat a felhasználó hírfolyamához.
Melyek a leggyakoribb problémák?
- Mi van akkor, ha az új bejegyzés sokáig tart, amíg megjelenik a hírfolyamban?
- Kezelheti-e az algoritmus a felhasználói aktivitás megugrását?
- Mely bejegyzések jelenjenek meg először a hírfolyamban?
Vegye figyelembe a következő javaslatokat:
- Vizsgálja meg a fanout mechanizmust a bejegyzések követők közötti terjesztésére.
- Vizsgálja meg, hogyan használható a szilánkolás a nagy felhasználói terhelések hatékony kezelésére.
- A felhasználók hírcsatornáinak adatait nem szabad több szerveren megkettőzni. Ehelyett a megosztás történhet felhasználói azonosítók alapján.
21. Mi a rendszer BASE tulajdonsága?
A BASE-szolgáltatások mindenütt jelen vannak a közelmúltban megjelent NoSQL-adatbázisokban. A BASE rendszer nem biztosít konzisztenciát a CAP-tétel szerint. Ez egy kitalált mozaikszó, amely megfelel a rendszer CAP-tételének következő tulajdonságának:
- Az „alapvetően elérhető” kifejezés azt jelenti, hogy a rendszer mindenkor elérhető lesz.
- A lágy állapot azt jelenti, hogy a rendszer állapota idővel változhat, még akkor is, ha nincs bemenet. Ez leginkább a modell esetleges konzisztenciájának köszönhető.
- Tekintettel arra, hogy a rendszer ebben az időszakban nem kap bemenetet, az esetleges konzisztencia azt jelenti, hogy a rendszer idővel konzisztenssé válik.
22. Mi az a terheléselosztás az IP-cím rokonsági technikával?
A terheléselosztás másik kiemelkedő módszere az IP-cím-affinitás. Ebben a módszerben az ügyfél IP-címe egy kiszolgáló csomóponthoz kapcsolódik. Egy szervercsomópont kezeli az ügyfél IP-címétől érkező összes kérést.
Ez a módszer egyszerűen megvalósítható, mivel az IP-cím mindig elérhető a HTTP-kérés fejlécében, és nincs szükség további beállításokra. Ha ügyfeleinél valószínűleg deaktiválják a cookie-kat, a terheléselosztásnak ez a formája előnyös lehet.
23. Mik is pontosan a gyorsítótár-csere (vagy kilakoltatási szabályzat) algoritmusai?
A gyorsítótár-algoritmusok (más néven gyorsítótár-csere algoritmusok, gyorsítótár-csere-irányelvek vagy gyorsítótár-kiürítési szabályzatok) olyan optimalizálási utasítások vagy algoritmusok, amelyeket egy számítógépes program vagy egy hardveren karbantartott struktúra használhat a számítógépen tárolt adatok gyorsítótárának kezelésére.
A gyorsítótárazás növeli a sebességet azáltal, hogy a közelmúltban használt vagy gyakran elért adatokat olyan memóriarégiókban tárolja, amelyek gyorsabban vagy olcsóbban érhetők el, mint a hagyományos memóriatárolás. Amikor a gyorsítótár megtelik, az algoritmusnak el kell döntenie, hogy mely elemeket távolítsa el, hogy helyet biztosítson az újaknak.
24. Mit értesz pontosan elosztott tranzakció alatt?
Az elosztott tranzakció bármely olyan körülmény, amelyben egyetlen esemény két vagy több különálló adatforrás megváltozását idézi elő, amelyek nem köthetők atomi úton.
A mikroszolgáltatások világában ez sokkal bonyolultabbá válik, hiszen minden szolgáltatás egy munkaegység, és legtöbbször számos szolgáltatásnak együtt kell működnie ahhoz, hogy egy vállalkozás sikeres legyen.
25. Mi is pontosan az éhezés?
Ha egy szál nem tud rendszeres hozzáférést szerezni a megosztott erőforrásokhoz, akkor azt mondják, hogy éhezik. Ez akkor fordul elő, ha a „kapzsi” szálak vagy a magasabb „prioritású” szálak hosszú ideig elérhetetlenné teszik a megosztott erőforrásokat.
Vegyünk egy olyan objektumot, amely szinkronizált metódust biztosít, és gyakran későn tér vissza. Ha egy szál ismételten meghívja ezt a metódust, a többi szál, amelyek gyakran szinkronizált hozzáférést igényelnek ugyanahhoz az objektumhoz, gyakran blokkolva lesznek.
Következtetés
A rendszertervezői interjú csak egy ötletbörzeből áll. Ebben a bejegyzésben a rendszertervezés leggyakoribb interjúkérdéseivel foglalkoztunk.
Egy adott rendszer létrehozásakor alkalmazott módszer átfogó ismerete elengedhetetlen a rendszertervezési interjún való sikeres teljesítéshez.
Hagy egy Válaszol