Spis treści[Ukryć][Pokazać]
- 1. Co rozumiesz przez projekt systemu?
- 2. Jakie są najważniejsze cechy projektanta systemu?
- 3. Czym dokładnie jest twierdzenie CAP?
- 4. Co rozumiesz przez równoważenie obciążenia?
- 5. Jaka jest różnica między programowaniem asynchronicznym a programowaniem równoległym?
- 6. Jaka jest różnica między skalowaniem poziomym a pionowym?
- 7. Co dokładnie masz na myśli przez opóźnienie, przepustowość i dostępność systemu?
- 8. Jakie są właściwości KWASU?
- 9. Czym dokładnie jest sharding?
- 10. Co to jest CDN?
- 11. Dlaczego warto korzystać z CDN?
- 12. Jaka jest różnica między shardingiem a partycjonowaniem?
- 13. Czym dokładnie jest buforowanie?
- 14. Co to są serwery brzegowe CDN?
- 15. Jakie są różne wzorce spójności przy projektowaniu systemu?
- 16. Co rozumiesz przez optymistyczne blokowanie?
- 17. Co dokładnie rozumiesz przez „wybór przywódców”?
- 18. Jakie masz podejście do projektowania usługi skracania adresów URL podobnej do TinyURL?
- 19. Jakie masz podejście do projektowania Twittera?
- 20. Stwórz system newsfeed dla Facebooka
- 21. Co to jest właściwość BASE systemu?
- 22. Co to jest równoważenie obciążenia za pomocą techniki powinowactwa adresów IP?
- 23. Czym dokładnie są algorytmy zastępowania pamięci podręcznej (lub polityki eksmisji)?
- 24. Co dokładnie rozumiesz przez transakcję rozproszoną?
- 25. Czym dokładnie jest głód?
- Wnioski
Zanim zaczniesz, zalecamy przeczytanie naszego wstępny przewodnik dotyczący projektowania systemu aby odświeżyć swoją podstawową wiedzę.
Podczas rozmowy kwalifikacyjnej na stanowisko, które wymaga wiedzy na temat projektowania systemów, masz szansę porozmawiać o swoim doświadczeniu i zademonstrować umiejętność tworzenia skomplikowanych systemów.
Podczas rozmowy z potencjalnym pracodawcą sposób, w jaki wyrażasz swoją wiedzę, może pomóc Ci wykazać, że jesteś kompetentnym kandydatem na dane stanowisko.
Możesz przygotować się do rozmowy kwalifikacyjnej, ucząc się podstawowych koncepcji projektowych i myśląc o tym, jak odpowiesz na pytania na ich temat. W tym poście omówimy kilka typowych pytań i odpowiedzi dotyczących projektowania systemu, aby pomóc Ci przygotować się do następnej rozmowy kwalifikacyjnej.
1. Co rozumiesz przez projekt systemu?
Proces ustalania charakterystyk systemu, w tym modułów, architektury, komponentów i ich interfejsów oraz danych w oparciu o z góry określone kryteria, jest znany jako projektowanie systemu.
Jest to proces definiowania, tworzenia i projektowania systemów spełniających określone cele i zadania firmy lub organizacji. W projektowaniu systemu chodzi bardziej o analizę systemu, wzorce architektoniczne, interfejsy API, wzorce projektowe i sklejenie tego wszystkiego w całość niż o kodowanie.
2. Jakie są najważniejsze cechy projektanta systemu?
- Interakcja z użytkownikiem
- Zewnętrzne wywołanie API
- Procesy offline
3. Czym dokładnie jest twierdzenie CAP?
Zgodnie z twierdzeniem CAP (Consistency-Availability-Partition Tolerance) system rozproszony nie może zapewnić jednocześnie C, A i P. Może dostarczyć najwyżej dwóch z trzech zapewnień. Użyjmy rozproszonego systemu baz danych, aby pomóc nam to zrozumieć.
- Spójność: Określa, że dane muszą pozostać spójne po zakończeniu transakcji bazy danych. Na przykład wszystkie zapytania powinny zwracać tę samą odpowiedź po aktualizacji bazy danych.
- Dostępność: Bazy danych muszą być zawsze dostępne i responsywne.
- Tolerancja partycji: Nawet jeśli komunikacja stanie się problematyczna, system bazy danych powinien nadal działać.
4. Co rozumiesz przez równoważenie obciążenia?
Równoważenie obciążenia to proces wydajnego rozpraszania ruchu przychodzącego między zestawem serwerów zaplecza. Są to tak zwane pule serwerów. Nowoczesne strony internetowe są budowane tak, aby obsługiwać miliony zapytań od klientów i odpowiadać na nie szybko i niezawodnie. Aby sprostać tym wymaganiom, potrzebnych będzie więcej serwerów.
W takim przypadku bardzo ważne jest efektywne dzielenie ruchu żądań między każdy serwer, aby uniknąć ich przeciążenia. Load Balancer działa jako policjant ruchu, przechwytując żądania i kierując je między dostępnymi serwerami, dzięki czemu żaden serwer nie jest przeciążony, potencjalnie obniżając wydajność aplikacji.
5. Jaka jest różnica między programowaniem asynchronicznym a programowaniem równoległym?
Kiedy uruchamiasz coś asynchronicznie, oznacza to, że nie musisz czekać na zakończenie, zanim będziesz mógł przejść do czegoś innego. Równoległość odnosi się do jednoczesnego wykonywania wielu zadań.
Kiedy możesz podzielić zadania na różne części pracy, równoległość działa skutecznie. Async i Callbacki to środki (narzędzie lub mechanizm) do reprezentowania współbieżności, czyli grupy jednostek, które mogą komunikować się i udostępniać zasoby.
6. Jaka jest różnica między skalowaniem poziomym a pionowym?
Dodanie nowego sprzętu komputerowego do sieci, który rozkłada zapotrzebowanie na przetwarzanie i pamięć w rozproszonej sieci urządzeń, określa się mianem skalowania poziomego. Mówiąc najprościej, nowe instancje serwerów są dodawane do bieżącej puli, a obciążenie ruchem jest efektywnie rozłożone między tymi urządzeniami.
Skalowanie w pionie odnosi się do koncepcji rozszerzenia pojemności zasobów pojedynczego komputera poprzez dodanie pamięci RAM, wydajnych procesorów lub migrację na nową maszynę o większej pojemności. Funkcjonalność serwera można zwiększyć bez konieczności wprowadzania zmian programistycznych.
7. Co dokładnie masz na myśli przez opóźnienie, przepustowość i dostępność systemu?
Wydajność jest istotnym aspektem projektowania systemu, ponieważ przyczynia się do szybkości i niezawodności naszych usług. Trzy najważniejsze mierniki wydajności są następujące:
- Czas potrzebny na dostarczenie pojedynczej wiadomości w milisekundach nazywany jest opóźnieniem.
- Ilość danych pomyślnie przesłanych przez system w określonym czasie jest określana jako przepustowość. Do jego pomiaru wykorzystywane są bity na sekundę.
- Czas, przez jaki system może reagować na zapytania, jest określony przez jego dostępność. Czas pracy systemu / (czas pracy systemu+czas przestoju) to wzór do jego obliczania.
8. Jakie są właściwości KWASU?
- Niepodzielność: zapewnia, że zmiany w bazie danych są albo wszystkie, albo żadne.
- Spójność: wartości danych w bazie danych są spójne.
- Izolacja: Odnosi się do rozdzielenia dwóch transakcji.
- Trwałość: dane są zachowywane nawet w przypadku awarii serwera.
9. Czym dokładnie jest sharding?
Sharding to technika dzielenia ogromnego logicznego zbioru danych na wiele baz danych. Odnosi się to również do poziomego podziału danych, ponieważ dane będą przechowywane na kilku komputerach. W rezultacie udostępniona baza danych może obsłużyć więcej zapytań niż jeden ogromny komputer.
10. Co to jest CDN?
Sieć dostarczania treści to ogólnoświatowa sieć komputerów, które współpracują w celu szybkiego dostarczania informacji internetowych. Umożliwia szybkie dostarczanie elementów, takich jak strony HTML, pliki JavaScript, arkusze stylów, obrazy i filmy, które są niezbędne do załadowania treści internetowych.
11. Dlaczego warto korzystać z CDN?
- Biorąc pod uwagę, że zasoby statyczne stanowią około 80% witryny, przyjęcie CDN znacznie zmniejsza obciążenie serwera pochodzenia.
- Ponieważ odległość do pokonania jest mniejsza, informacje będą szybciej dostarczane właścicielom witryn, którzy mają odwiedzających z wielu obszarów geograficznych.
- Użytkownicy sieci CDN korzystają również z możliwości szybkiego skalowania w górę i w dół w odpowiedzi na skoki natężenia ruchu.
12. Jaka jest różnica między shardingiem a partycjonowaniem?
Fragmentacja bazy danych — fragmentacja bazy danych to metoda partycjonowania pojedynczego zestawu danych na wiele baz danych, aby można go było przechowywać na różnych stacjach roboczych. Większe zestawy danych można dzielić na mniejsze porcje i przechowywać w kilku węzłach danych, zwiększając całkowitą pojemność pamięci masowej systemu.
Dzięki rozłożeniu danych na wiele komputerów współużytkowana baza danych może obsłużyć więcej zapytań niż pojedynczy system.
Partycjonowanie bazy danych to proces dzielenia przechowywanych obiektów bazy danych (tabele, indeksy i widoki) na oddzielne części. Aby zwiększyć sterowalność, wydajność i dostępność, duże obiekty bazy danych są partycjonowane.
W niektórych przypadkach partycjonowanie może zwiększyć szybkość dostępu do danych podzielonych na partycje. Partycjonowanie może zmniejszyć rozmiar indeksu i zwiększyć szansę na znalezienie najbardziej potrzebnych indeksów w pamięci, działając jako wiodąca kolumna w indeksach.
13. Czym dokładnie jest buforowanie?
Buforowanie to technika przechowywania kopii plików w tymczasowym obszarze przechowywania znanym jako pamięć podręczna, która przyspiesza dostęp do danych i zmniejsza opóźnienia witryny. W pamięci podręcznej można przechowywać tylko określoną ilość danych.
W rezultacie decydujące znaczenie ma określenie technik aktualizacji pamięci podręcznej, które najlepiej pasują do celów biznesowych.
14. Co to są serwery brzegowe CDN?
Serwery CDN, które przechowują w pamięci podręcznej materiały pozyskane z serwera pochodzenia lub klastra magazynu, są nazywane serwerami brzegowymi. Punkt obecności to termin często używany do opisu serwerów brzegowych (POP).
Serwery brzegowe są fizycznie umieszczone w punkcie POP. W tym POP informacje mogą być buforowane przez wiele serwerów brzegowych.
Możliwość udostępniania sekcji strony internetowej z kilku miejsc zmniejsza odległość między odwiedzającym a serwerem WWW, co skutkuje mniejszymi opóźnieniami. Serwery brzegowe CDN osiągają ten dokładny cel.
15. Jakie są różne wzorce spójności przy projektowaniu systemu?
Każde żądanie odczytu powinno pobrać ostatnio zapisane dane, zgodnie z twierdzeniem CAP. Gdy dostępnych jest wiele kopii danych, trudno jest je zsynchronizować, aby klienci otrzymywali świeże dane w sposób ciągły. Oto możliwe wzorce spójności:
- Słaba spójność: po zapisaniu danych żądanie odczytu może, ale nie musi, uzyskać zaktualizowanych danych. Ten poziom stabilności jest idealny do zastosowań w czasie rzeczywistym, takich jak VoIP, czat wideo i gry wieloosobowe.
- Ostateczna spójność: odczyty ostatecznie wyświetlą najnowsze dane w ciągu milisekund po zapisaniu danych. W tym przypadku dane są duplikowane asynchronicznie. Przykładami tego są systemy DNS i poczty e-mail. Działa to skutecznie w systemach o wysokiej dostępności.
- Silna spójność: po zapisaniu danych przyszli czytelnicy zobaczą najnowsze dane. W tym przypadku dane są kopiowane synchronicznie. Można to zaobserwować w RDBMS i systemach plików, które są odpowiednie do przesyłania danych.
16. Co rozumiesz przez optymistyczne blokowanie?
Blokowanie optymistyczne to mechanizm, w którym czytasz rekord, zapisujesz numer wersji (alternatywnymi sposobami są daty, sygnatury czasowe lub sumy kontrolne/hashe), a następnie dwukrotnie sprawdzasz, czy wersja nie uległa zmianie, zanim ją zapiszesz.
Gdy zapisujesz rekord z powrotem, używasz wersji do filtrowania aktualizacji, aby upewnić się, że jest niepodzielna. (tzn. nie został zmieniony między sprawdzeniem wersji a zapisaniem rekordu na dysku) i zaktualizuj go od razu.
17. Co dokładnie rozumiesz przez „wybór przywódców”?
W systemie rozproszonym z wieloma serwerami przyczyniającymi się do dostępności aplikacji może się zdarzyć, że tylko jeden serwer jest odpowiedzialny za aktualizację interfejsów API innych firm, ponieważ wiele serwerów może powodować problemy podczas korzystania z interfejsów API.
Serwer ten jest nazywany serwerem głównym, a procedura wyboru go określana jest jako wybór lidera. Gdy serwer lidera ulegnie awarii w systemie rozproszonym, serwery muszą zauważyć awarię i wybrać nowego lidera. Korzystając z techniki konsensusu, to podejście najlepiej nadaje się do aplikacji o wysokiej dostępności i silnej spójności.
18. Jakie masz podejście do projektowania usługi skracania adresów URL podobnej do TinyURL?
TinyURL przekształca długi adres URL w pojedynczy, unikalny krótki adres URL. Te technologie mogą również akceptować krótki adres URL i zwracać pełny adres URL.
Jakie są niektóre z kluczowych cech?
- Utwórz URL krótszy niż oryginalny.
- Zachowaj dłuższy adres URL i zastąp go krótszym.
- Zezwalaj na przekierowania w krótkich adresach URL.
- Obsługiwane są krótkie adresy URL z niestandardowymi nazwami.
- Załatwiaj kilka zapytań jednocześnie.
Jakie są najczęstsze problemy?
- Jak śledzisz przechowywanie bazy danych?
- Co się stanie, jeśli obciążenie użytkownika przekroczy oczekiwania?
- Co się stanie, jeśli dwie osoby użyją tego samego niestandardowego adresu URL?
Rozważ następujące sugestie:
- Haszowanie to pojęcie, którego można używać do łączenia starych i nowych adresów URL.
- REST API może być używany do obsługi komunikacji front-end i równoważenia dużego obciążenia.
- Wielowątkowość to pojęcie, które pozwala obsłużyć kilka żądań jednocześnie.
- Oryginalne adresy URL są przechowywane w bazach danych NoSQL.
19. Jakie masz podejście do projektowania Twittera?
Podane wymagania:
- Wysyłanie tweetów
- Obserwowanie innych użytkowników
- Kanał tweeta/kanał aktualności
- System jest skalowalny
- Szybko się ładuje
- System jest niezawodny
Możesz zacząć wymyślać swój projekt API Twittera po ustaleniu kryteriów. Tak by to wyglądało:
Na początek naszkicujemy kluczowe punkty końcowe interfejsu API. Oto kilka przykładów:
- wyślijTweet(wiadomość)
- obserwujUżytkownik(ID użytkownika)
- przestań obserwowaćUżytkownika (ID użytkownika)
- pobierzFeed(strona)
Następnie można naszkicować architekturę, która umożliwi te cechy. Możemy zacząć od użytkownika, który przesyła żądanie serwera. Możemy zainstalować dodatkowe serwery API za load balancerem, aby pomóc w kierowaniu większych poziomów ruchu w celu zaspokojenia potrzeb skalowalności. Musimy teraz dodać bazę danych do przechowywania naszych tweetów.
Należy pamiętać, że dostarczane przez nas API powinno być skalowalne. Aby usługa była skalowalna, jeden z naszych serwerów API może być odczytywany z oddzielnej pamięci podręcznej dla naszego kanału informacyjnego. Robiąc to, powinniśmy również korzystać z dostawcy kanałów, aby aktualizować pamięć podręczną kanałów.
20. Stwórz system newsfeed dla Facebooka
Kanał informacyjny na Facebooku pozwala użytkownikom zobaczyć, co dzieje się w kręgach znajomych, ulubionych stronach i organizacjach, które obserwowali.
Jakie są niektóre z podstawowych cech?
- Utwórz kanał informacyjny na podstawie postów z innych encji systemowych, za którymi podąża użytkownik.
- Tekst, obrazy, dźwięk i wideo mogą być używane w postach w kanale aktualności.
- W czasie rzeczywistym dodawaj nowe treści do kanału informacyjnego użytkownika.
Jakie są najczęstsze problemy?
- Co się stanie, jeśli nowy post pojawi się w kanale wiadomości długo?
- Czy algorytm może zarządzać wzrostem aktywności użytkowników?
- Jakie posty powinny być wyświetlane jako pierwsze w aktualnościach?
Rozważ następujące sugestie:
- Zbadaj mechanizm fanoutów do dystrybucji postów wśród obserwujących.
- Sprawdź, w jaki sposób można wykorzystać fragmentację do wydajnej obsługi dużych obciążeń użytkowników.
- Dane kanału użytkownika nie powinny być duplikowane na wielu serwerach. Zamiast tego można dokonać fragmentacji na podstawie identyfikatorów użytkowników.
21. Co to jest właściwość BASE systemu?
Funkcje BASE są wszechobecne w ostatnio powstałych bazach danych NoSQL. System BASE nie zapewnia spójności, zgodnie z twierdzeniem CAP. Jest to wymyślony akronim, który odpowiada następującej właściwości systemu twierdzenia CAP:
- Termin „w zasadzie dostępny” oznacza, że system będzie dostępny przez cały czas.
- Miękki stan oznacza, że stan systemu może się zmieniać w czasie, nawet jeśli nie ma wejścia. Wynika to głównie z ostatecznej spójności modelu.
- Biorąc pod uwagę, że system nie otrzymuje danych wejściowych w tym okresie, ostateczna spójność oznacza, że system stanie się spójny w czasie.
22. Co to jest równoważenie obciążenia za pomocą techniki powinowactwa adresów IP?
Inną znaną metodą równoważenia obciążenia jest koligacja adresów IP. W ten sposób adres IP klienta jest połączony z węzłem serwera. Jeden węzeł serwera obsługuje wszystkie żądania z adresu IP klienta.
Ta metoda jest prosta do wdrożenia, ponieważ adres IP jest zawsze dostępny w nagłówku żądania HTTP i nie są wymagane żadne dalsze ustawienia. Jeśli Twoi klienci prawdopodobnie mają wyłączone pliki cookie, ta forma równoważenia obciążenia może być korzystna.
23. Czym dokładnie są algorytmy zastępowania pamięci podręcznej (lub polityki eksmisji)?
Algorytmy pamięci podręcznej (znane również jako algorytmy zastępowania pamięci podręcznej, zasady zastępowania pamięci podręcznej lub zasady wykluczania pamięci podręcznej) to instrukcje optymalizacji lub algorytmy, których program komputerowy lub struktura obsługiwana sprzętowo może używać do zarządzania pamięcią podręczną danych przechowywanych na komputerze.
Buforowanie zwiększa szybkość, przechowując ostatnio używane lub często używane dane w regionach pamięci, które są szybsze lub tańsze w dostępie niż tradycyjne przechowywanie w pamięci. Gdy pamięć podręczna jest pełna, algorytm musi zdecydować, które elementy usunąć, aby zrobić miejsce na nowe.
24. Co dokładnie rozumiesz przez transakcję rozproszoną?
Transakcja rozproszona to dowolna okoliczność, w której pojedyncze zdarzenie powoduje zmianę dwóch lub więcej różnych źródeł danych, których nie można zatwierdzić niepodzielnie.
W świecie mikrousług staje się to znacznie bardziej skomplikowane, ponieważ każda usługa jest jednostką pracy, a w większości przypadków wiele usług musi ze sobą współpracować, aby biznes odniósł sukces.
25. Czym dokładnie jest głód?
Kiedy wątek nie jest w stanie uzyskać regularnego dostępu do współdzielonych zasobów, mówi się, że głoduje. Dzieje się tak, gdy „chciwe” wątki lub wątki o wyższym „priorytecie” powodują, że współdzielone zasoby są niedostępne przez dłuższy czas.
Rozważ obiekt, który zapewnia zsynchronizowaną metodę, która często zwraca późno. Jeśli jeden wątek wielokrotnie wywołuje tę metodę, inne wątki, które wymagają częstego synchronizowanego dostępu do tego samego obiektu, będą często blokowane.
Wnioski
Sesja burzy mózgów to wszystko, co pociąga za sobą rozmowa na temat projektowania systemu. W tym poście odpowiedzieliśmy na najczęstsze pytania podczas rozmów kwalifikacyjnych na temat projektowania systemu.
Pełne zrozumienie metody, którą stosujesz podczas tworzenia konkretnego systemu, ma kluczowe znaczenie dla zaliczenia rozmowy kwalifikacyjnej z projektowaniem systemu.
Dodaj komentarz