Rozmowa o projektowaniu systemów: Zaprojektuj WhatsApp

„Zaprojektuj WhatsApp" testuje dostarczanie w czasie rzeczywistym na masową skalę, trwałe przechowywanie wiadomości, obecność (online/ostatnio widziany) oraz problem zarządzania połączeniami, czyli utrzymywanie setek milionów urządzeń aktywnych. Jak zwykle, rekruter chce poznać twoje rozumowanie i kompromisy, a nie kopię prawdziwego systemu.

Postępuj metodycznie: wyjaśnij wymagania, oszacuj skalę, zaprojektuj ścieżkę połączenia i dostarczania, zdecyduj, jak przechowywać wiadomości, a następnie obsłuż czaty grupowe i trudne przypadki, takie jak dostarczanie offline i kolejność. Poniższy przewodnik trzyma się tej ścieżki.

1. Wyjaśnienie wymagań

Najpierw ustal zakres. Jądrem jest komunikacja jeden-do-jednego z wiarygodnym dostarczaniem; wyjaśnij, czy czaty grupowe, multimedia i szyfrowanie end-to-end wchodzą w zakres tej rozmowy.

  • Funkcjonalne: wysyłanie/odbieranie wiadomości, potwierdzenia dostarczenia i przeczytania, obecność online, czaty grupowe, dostarczanie offline, gdy odbiorca jest odłączony.
  • Niefunkcjonalne: niskie opóźnienie, wysoka dostępność, trwałość (brak utraconych wiadomości), kolejność w ramach konwersacji.
  • Do wyjaśnienia: szyfrowanie E2E i obsługa multimediów — wspomnij o nich, a następnie wyraźnie zdecyduj, czy wchodzą w zakres.

2. Oszacowanie skali

Ustal liczby, które kierują projektem. Przyjmijmy ~2 mld użytkowników i dziesiątki miliardów wiadomości dziennie; to setki tysięcy wiadomości na sekundę w szczycie oraz setki milionów równocześnie połączonych urządzeń — zarządzanie połączeniami staje się problemem pierwszoplanowym.

3. Ścieżka połączenia i dostarczania

Wiadomości wymagają trwałego połączenia, a nie odpytywania typu żądanie/odpowiedź. Urządzenia utrzymują otwarte połączenie WebSocket z serwerem bramy (gateway). Centralny komponent musi wiedzieć, która brama aktualnie obsługuje połączenie każdego użytkownika, aby wiadomość mogła zostać przekierowana do właściwego serwera.

  • Brama WebSocket: utrzymuje aktywne połączenia urządzeń, obsługuje wysyłanie/odbieranie.
  • Rejestr sesji/obecności: mapuje użytkownika na aktualny serwer bramy (np. w Redis), aktualizowany przy połączeniu/rozłączeniu.
  • Routing wiadomości: brama nadawcy wyszukuje bramę odbiorcy i przekazuje wiadomość; jeśli odbiorca jest offline, wiadomość trafia do kolejki.

4. Przechowywanie wiadomości i dostarczanie offline

Wiadomości muszą przetrwać odłączenie odbiorcy. Przechowuj każdą wiadomość w sposób trwały i śledź stan dostarczenia dla każdego odbiorcy; dostarcz natychmiast, jeśli odbiorca jest online, w przeciwnym razie zapisz i przekaż po jego ponownym połączeniu (store-and-forward).

Wzorzec dostępu zdominowany przez zapis, z kluczem według konwersacji, preferuje magazyn szerokokolumnowy taki jak Cassandra (wysoka przepustowość zapisu, skalowanie horyzontalne) zamiast jednej relacyjnej bazy danych. Gdy dostarczenie wiadomości do wszystkich odbiorców zostanie potwierdzone, można ją usunąć lub pozwolić jej wygasnąć, ponieważ WhatsApp nie przechowuje dostarczonych wiadomości po stronie serwera w nieskończoność.

5. Czat grupowy

Wiadomości grupowe to fan-out: jedno wysłanie staje się N dostarczeniami. Dla typowych rozmiarów grup fan-out-on-write (wypychanie do ścieżki dostarczania każdego członka) jest prosty i szybki w odczycie. Zwróć uwagę na kompromis — bardzo duże grupy sprawiają, że fan-out-on-write staje się kosztowny, dlatego ogromne grupy transmisyjne to inny problem projektowy.

6. Kompromisy, które warto wypowiedzieć

Zakończ napięciami: kolejność (numery sekwencji per konwersacja kontra globalna kolejność), spójność kontra dostępność dla potwierdzeń (ostateczna spójność jest w porządku dla „ostatnio widziany", mocniejsza dla dostarczania), oraz fan-out-on-write kontra on-read dla grup. Wyraźne nazwanie tego to różnica, która czyni odpowiedź dojrzałą.

Poćwicz projektowanie systemu WhatsApp z pomocą w czasie rzeczywistym

Asystent rozmów o projektowaniu systemów od Natively może utrzymać cię w uporządkowanej strukturze podczas rozmowy na żywo — proponując następny wymiar do omówienia i pokazując kompromisy w czasie rzeczywistym, wszystko na twoim własnym urządzeniu.

Put it on your own machine.

A live-conversation assistant that runs locally. Nothing leaves your machine.

macOS 12+ · Windows 10/11

© 2026 Natively AI Private Limited

Source-available under the Natively Personal Use Source License v1.0 · IP geolocation by DB-IP