Google Docs benzeri gerçek zamanlı ortak düzenleme yüksek seviyede nasıl tasarlanır?
Cevap
Temel zorluk: birden fazla kullanıcı aynı belgeyi aynı anda düzenlediğinde, her istemci düzenlemeyi önce yerelde uygular (gecikmesiz his) ve sonunda herkesin aynı belgeye ulaşması (convergence) gerekir.
İki ana yaklaşım
| OT (Operational Transformation) | CRDT | |
|---|---|---|
| Fikir | Eşzamanlı işlemler birbirine göre dönüştürülür | Veri yapısı, birleştirme her sırada aynı sonucu verecek şekilde tasarlanır |
| Sunucu | Genelde merkezi sunucu sırayı belirler | Merkezi sunucu şart değil, P2P ve çevrim dışı uygun |
| Örnek | Google Docs | Figma'nın modeli, Yjs, Automerge |
| Zorluk | Dönüşüm fonksiyonlarının doğruluğu | Bellek ve meta veri maliyeti |
Örnek çakışma: belge abc. A 0. konuma X ekler, B 2. konumdaki c'yi siler. OT, B'nin işlemini A'nınkinden sonra uygularken silme konumunu 3'e kaydırır.
Mimari
- İstemci ile WebSocket bağlantısı; işlemler küçük delta'lar olarak gönderilir.
- Belge başına bir oturum sunucusu (belge ID'ye göre consistent hashing ile atanır) işlemleri sıralar ve diğer katılımcılara yayar.
- İşlemler bir log olarak kalıcı yazılır; periyodik snapshot alınır, yeni gelen istemci snapshot + sonraki işlemleri yükler.
- Presence: imleç konumları ve kim çevrim içi; kalıcı olması gerekmez, ayrı ve hafif bir kanaldan gider.
- Çevrim dışı düzenleme: işlemler yerelde biriktirilir, bağlanınca gönderilir (CRDT'de doğal).
- Sürüm geçmişi log'dan üretilir.
Mülakatta OT veya CRDT'nin matematiğini derinlemesine anlatmanız beklenmez; sorunu, iki yaklaşımın farkını ve bileşenleri net anlatmanız yeterlidir.
İlgili Sistem Tasarımı soruları
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.