Google Docs ఒకేసారి జరిగే ఎడిట్లను (Simultaneous Edits) ఎలా నిర్వహిస్తుంది
Google Docs ఒకే డాక్యుమెంట్ను చాలా మంది వ్యక్తులు ఒకే సమయంలో ఎడిట్ చేయడానికి అనుమతిస్తుంది.
సరిగ్గా ఒకే సెకనులో ఇద్దరు వ్యక్తులు ఒకే లైన్ను ఎడిట్ చేసినప్పుడు ఏమవుతుంది?
ఒక సాధారణ వ్యవస్థ డేటాను చదవడం, మార్చడం మరియు సేవ్ చేయడం ద్వారా పనిచేస్తుంది. ఇద్దరు వ్యక్తులు ఒకేసారి సేవ్ చేస్తే, రెండో వ్యక్తి చేసిన మార్పులు మొదటి వ్యక్తి చేసిన మార్పులను ఓవర్రైట్ (overwrite) చేస్తాయి. దీనివల్ల మొదటి వ్యక్తి చేసిన పని పోతుంది.
Google Docs దీనిని Operational Transformation (OT) ఉపయోగించి నివారిస్తుంది.
మీరు టైప్ చేసిన ప్రతిసారీ ఇది మొత్తం డాక్యుమెంట్ను పంపదు. ఇది చిన్న చిన్న ఆపరేషన్లను (operations) మాత్రమే పంపుతుంది.
ఉదాహరణకు:
- User A 6వ స్థానంలో "Beautiful" అనే పదాన్ని చేరుస్తారు.
- User B 6వ స్థానంలో "Amazing" అనే పదాన్ని చేరుస్తారు.
సర్వర్ వీటిని ఎటువంటి మార్పులు లేకుండా అమలు చేస్తే, ఒక ఎడిట్ కనిపించకుండా పోతుంది.
దానికి బదులుగా, సర్వర్ ఆ ఆపరేషన్లను మారుస్తుంది (transforms).
User A మొదట డాక్యుమెంట్ను అప్డేట్ చేసినట్లు సర్వర్ గుర్తిస్తుంది. అప్పుడు డాక్యుమెంట్ పరిమాణం పెరుగుతుంది. సర్వర్ User B మార్పులను ప్రాసెస్ చేసేటప్పుడు, ఆ స్థానాన్ని 6 నుండి 16కి మారుస్తుంది.
చివరి టెక్స్ట్ ఇలా మారుతుంది: Hello Beautiful Amazing World.
రెండు ఎడిట్లు కూడా అలాగే ఉంటాయి.
ఈ వ్యవస్థ ఈ క్రింది సాంకేతిక మూలస్తంభాలపై ఆధారపడి ఉంటుంది:
- నిరంతర కనెక్షన్ కోసం WebSockets.
- ఏ ఎడిట్ ఏ వెర్షన్ నుండి వచ్చిందో తెలుసుకోవడానికి Version tracking.
- మార్పులను బ్రాడ్కాస్ట్ చేయడానికి Real-time event streams.
Google Docs డాక్యుమెంట్ను లాక్ (lock) చేయదు. ఒక వ్యక్తి టైప్ చేస్తున్నప్పుడు లాక్ చేయడం వల్ల మిగిలిన వారందరూ పని చేయలేరు.
దానికి బదులుగా, ఇది ఇంటెలిజెంట్ మెర్జింగ్ (intelligent merging)ను ఉపయోగిస్తుంది.
ఈ వ్యవస్థ మీ కర్సర్ (cursor) స్థానాన్ని కూడా మారుస్తుంది. ఎవరైనా మీ ముందు టెక్స్ట్ను జోడిస్తే, మీరు మీ స్థానాన్ని కోల్పోకుండా ఉండటానికి మీ కర్సర్ ముందుకు జరుగుతుంది.
Google Docs OTని ఉపయోగిస్తున్నప్పటికీ, Figma వంటి అనేక కొత్త సాధనాలు Conflict-free Replicated Data Types (CRDT)ని ఉపయోగిస్తాయి. CRDTలు సెంట్రల్ సర్వర్ లేకుండానే వినియోగదారులు మార్పులను మెర్జ్ చేయడానికి అనుమతిస్తాయి.
మీరు సిస్టమ్ డిజైన్ (system design) గురించి చదువుతుంటే, ఈ అంశాలను గుర్తుంచుకోండి:
- తక్కువ లాటెన్సీ (low latency) కోసం WebSockets ఉపయోగించండి.
- కాన్ఫ్లిక్ట్ రిజల్యూషన్ (conflict resolution) కోసం OT లేదా CRDT ఉపయోగించండి.
- మార్పులను ట్రాక్ చేయడానికి వెర్షన్ నంబర్లను ఉపయోగించండి.
- యూజర్ ఎక్స్పీరియన్స్ను మెరుగుపరచడానికి కర్సర్లను సింక్ (sync) చేయండి.
Google Docs కాన్ఫ్లిక్ట్లను నిరోధించదు. అందరూ ఒకే ఫలితాన్ని చూసేలా ఎడిట్లను మార్చడం ద్వారా ఇది వాటిని పరిష్కరిస్తుంది.
