Come Google Docs gestisce le modifiche simultanee
Google Docs consente a molte persone di modificare un documento contemporaneamente.
Cosa succede quando due persone modificano esattamente la stessa riga nello stesso secondo?
Un sistema standard funziona leggendo, modificando e salvando i dati. Se due persone salvano contemporaneamente, la seconda sovrascrive la prima. La prima persona perde il proprio lavoro.
Google Docs evita questo problema utilizzando l'Operational Transformation (OT).
Non invia l'intero documento ogni volta che scrivi. Invia piccole operazioni.
Per esempio:
- L'utente A inserisce "Beautiful" alla posizione 6.
- L'utente B inserisce "Amazing" alla posizione 6.
Se il server applicasse queste modifiche senza cambiamenti, una delle due sparirebbe.
Invece, il server trasforma le operazioni.
Il server rileva che l'utente A ha aggiornato il documento per primo. Il documento cresce. Quando il server elabora l'utente B, cambia la posizione da 6 a 16.
Il testo finale diventa: Hello Beautiful Amazing World.
Entrambe le modifiche sopravvivono.
Il sistema si basa su questi pilastri tecnici:
- WebSockets per una connessione costante.
- Tracciamento delle versioni per sapere quale modifica proviene da quale versione.
- Flussi di eventi in tempo reale per trasmettere le modifiche.
Google Docs non blocca il documento. Il blocco impedirebbe a tutti gli altri di lavorare mentre una persona scrive.
Invece, utilizza una fusione intelligente.
Il sistema trasforma anche la posizione del cursore. Se qualcuno aggiunge testo davanti a te, il tuo cursore si sposta in avanti in modo da non perdere il segno.
Mentre Google Docs utilizza OT, molti nuovi strumenti come Figma utilizzano i Conflict-free Replicated Data Types (CRDT). I CRDT consentono agli utenti di fondere le modifiche senza un server centrale.
Se stai studiando il system design, ricorda questi punti:
- Usa WebSockets per una bassa latenza.
- Usa OT o CRDT per la risoluzione dei conflitti.
- Usa i numeri di versione per tracciare le modifiche.
- Sincronizza i cursori per migliorare l'esperienza utente.
Google Docs non previene i conflitti. Li risolve trasformando le modifiche in modo che tutti vedano lo stesso risultato.
