Google Docs Eşzamanlı Düzenlemeleri Nasıl Yönetir

Google Docs, birçok kişinin aynı anda tek bir belgeyi düzenlemesine olanak tanır.

İki kişi tam olarak aynı saniyede aynı satırı düzenlediğinde ne olur?

Standart bir sistem veriyi okuyarak, değiştirerek ve kaydederek çalışır. Eğer iki kişi aynı anda kaydederse, ikinci kişi birincinin üzerine yazar. İlk kişi çalışmasını kaybeder.

Google Docs, bunu Operational Transformation (OT) kullanarak önler.

Her yazdığınızda belgenin tamamını göndermez. Küçük işlemler (operations) gönderir.

Örneğin:

  • Kullanıcı A, 6. konuma "Beautiful" ekler.
  • Kullanıcı B, 6. konuma "Amazing" ekler.

Eğer sunucu bunları değişiklik yapmadan uygulasaydı, düzenlemelerden biri kaybolurdu.

Bunun yerine sunucu, işlemleri dönüştürür (transforms).

Sunucu, Kullanıcı A'nın belgeyi önce güncellediğini görür. Belge büyür. Sunucu Kullanıcı B'yi işlediğinde, konumu 6'dan 16'ya değiştirir.

Nihai metin şu hale gelir: Hello Beautiful Amazing World.

Her iki düzenleme de korunur.

Sistem şu teknik sütunlara dayanır:

  • Sürekli bir bağlantı için WebSockets.
  • Hangi düzenlemenin hangi versiyondan geldiğini bilmek için versiyon takibi.
  • Değişiklikleri yayınlamak için gerçek zamanlı olay akışları (event streams).

Google Docs belgeyi kilitlemez. Kilitleme işlemi, bir kişi yazarken diğer herkesin çalışmasını durdururdu.

Bunun yerine akıllı birleştirme (intelligent merging) kullanır.

Sistem imleç (cursor) konumunuzu da dönüştürür. Eğer birisi önünüze metin eklerse, yerinizi kaybetmemeniz için imleciniz ileri doğru hareket eder.

Google Docs OT kullanırken, Figma gibi birçok yeni araç Conflict-free Replicated Data Types (CRDT) kullanır. CRDT'ler, kullanıcıların merkezi bir sunucu olmadan değişiklikleri birleştirmesine olanak tanır.

Sistem tasarımı çalışıyorsanız şu noktaları unutmayın:

  • Düşük gecikme süresi için WebSockets kullanın.
  • Çatışma çözümü (conflict resolution) için OT veya CRDT kullanın.
  • Değişiklikleri takip etmek için versiyon numaraları kullanın.
  • Kullanıcı deneyimini iyileştirmek için imleçleri senkronize edin.

Google Docs çatışmaları önlemez. Herkesin aynı sonucu görmesini sağlamak için düzenlemeleri dönüştürerek onları çözer.

Kaynak: https://dev.to/khushindpatel/how-does-google-docs-handle-two-people-editing-the-same-line-at-the-exact-same-time-38gi