WhatsApp benzeri bir sohbet uygulaması tasarlayın.

Cevap

1. Gereksinimler

  • Birebir ve grup mesajlaşma, çevrim içi durumu, okundu bilgisi, çevrim dışı kullanıcıya sonradan iletim.
  • Düşük gecikme, mesaj kaybı olmaması, sıralama.

2. Bileşenler

  • Gateway / Chat sunucuları: istemcilerle kalıcı WebSocket bağlantısı tutar.
  • Oturum servisi: hangi kullanıcının hangi chat sunucusuna bağlı olduğunu tutar (Redis).
  • Mesaj servisi: mesajı kalıcı olarak yazar ve iletimi tetikler.
  • Mesaj deposu: yazma yoğun, conversation_id ile bölümlenmiş (Cassandra, ScyllaDB, DynamoDB).
  • Pub/Sub veya kuyruk: chat sunucuları arası iletim (Redis Pub/Sub, Kafka).
  • Push bildirim servisi: çevrim dışı kullanıcılar için APNs/FCM.
  • Medya: dosyalar nesne depolamaya presigned URL ile, mesajda yalnızca referans.

3. Mesaj akışı

  1. A, mesajı istemci tarafı client_msg_id ile kendi sunucusuna gönderir.
  2. Mesaj servisi kaydeder, sıra numarası verir, A'ya ack döner (tek tik).
  3. B'nin bağlı olduğu sunucu bulunur, mesaj pub/sub üzerinden iletilir.
  4. B çevrim dışıysa push bildirimi gider; bağlandığında son okunan sıra numarasından sonraki mesajları çeker.
  5. B'nin cihazı aldığında ve okuduğunda durum güncellemeleri A'ya iletilir.

4. Kritik noktalar

  • Sıralama: konuşma bazında artan sıra numarası; global saat güvenilir değildir.
  • Tekrar gönderim: client_msg_id ile idempotent yazma, çift mesaj oluşmaz.
  • Grup mesajı: küçük gruplarda her üyeye fan-out; çok büyük kanallarda okurken çekme (fan-out on read).
  • Ölçek: bağlantı sayısı darboğazdır; chat sunucuları yatay ölçeklenir, yük dengeleyici bağlantıları dağıtır.
  • Uçtan uca şifreleme isteniyorsa sunucu yalnızca şifreli içeriği taşır.
  1. Dikey ve yatay ölçekleme arasındaki fark nedir?KolaySistem TasarımıFull Stack
  2. Hangi cache stratejilerini biliyorsunuz?OrtaSistem TasarımıFull Stack
  3. REST ile GraphQL arasındaki farklar nelerdir?OrtaSistem TasarımıFull Stack
  4. Bit.ly benzeri bir URL kısaltma servisi tasarlayın.ZorSistem TasarımıFull Stack
  5. Google Docs benzeri gerçek zamanlı ortak düzenleme yüksek seviyede nasıl tasarlanır?ZorSistem TasarımıFull Stack
  6. CDN nedir, nasıl çalışır ve hangi durumlarda kullanılır?KolaySistem TasarımıFull Stack

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle