Google Docs ஒரே நேரத்தில் செய்யப்படும் மாற்றங்களை எவ்வாறு கையாள்கிறது
Google Docs ஒரே நேரத்தில் பல நபர்கள் ஒரு ஆவணத்தைத் திருத்த அனுமதிக்கிறது.
இரண்டு பேர் ஒரே வினாடியில், அதே வரியைத் திருத்தினால் என்ன நடக்கும்?
ஒரு சாதாரண அமைப்பு தரவைப் படித்தல், மாற்றுதல் மற்றும் சேமித்தல் ஆகியவற்றின் மூலம் செயல்படுகிறது. இரண்டு பேர் ஒரே நேரத்தில் சேமித்தால், இரண்டாவது நபர் முதல் நபரின் மாற்றத்தை அழித்துவிட்டு (overwrite) புதிய மாற்றத்தைச் சேமிப்பார். இதனால் முதல் நபரின் வேலை அழிந்துவிடும்.
Google Docs இதை Operational Transformation (OT) முறையைப் பயன்படுத்தித் தவிர்க்கிறது.
நீங்கள் தட்டச்சு செய்யும் ஒவ்வொரு முறையும் இது முழு ஆவணத்தையும் அனுப்பாது. மாறாக, சிறிய செயல்பாடுகளை (operations) மட்டுமே அனுப்பும்.
உதாரணமாக:
- பயனர் A, 6-வது இடத்தில் "Beautiful" என்பதைச் சேர்க்கிறார்.
- பயனர் B, 6-வது இடத்தில் "Amazing" என்பதைச் சேர்க்கிறார்.
சர்வர் இவற்றை மாற்றங்கள் ஏதுமின்றி செயல்படுத்தினால், ஒரு திருத்தம் காணாமல் போய்விடும்.
அதற்குப் பதிலாக, சர்வர் அந்தச் செயல்பாடுகளை மாற்றியமைக்கிறது (transforms).
பயனர் A முதலில் ஆவணத்தைப் புதுப்பித்ததை சர்வர் கண்டறிகிறது. இதனால் ஆவணத்தின் அளவு அதிகரிக்கிறது. சர்வர் பயனர் B-ன் மாற்றத்தைச் செயல்படுத்தும்போது, அந்த இடத்தின் நிலையை (position) 6-லிருந்து 16-ஆக மாற்றுகிறது.
இறுதி உரை இவ்வாறு அமையும்: Hello Beautiful Amazing World.
இரண்டு திருத்தங்களும் அப்படியே இருக்கும்.
இந்த அமைப்பு பின்வரும் தொழில்நுட்பத் தூண்களைச் சார்ந்துள்ளது:
- தொடர்ச்சியான இணைப்பிற்கு WebSockets.
- எந்தத் திருத்தம் எந்தப் பதிப்பிலிருந்து (version) வந்தது என்பதை அறிய Version tracking.
- மாற்றங்களை அறிவிக்க (broadcast) 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-ஐப் பயன்படுத்தவும்.
- மாற்றங்களைக் கண்காணிக்க பதிப்பு எண்களைப் (version numbers) பயன்படுத்தவும்.
- பயனர் அனுபவத்தை மேம்படுத்த கர்சர்களை ஒத்திசைக்கவும் (sync).
Google Docs முரண்பாடுகளைத் தடுப்பதில்லை. மாறாக, திருத்தங்களை மாற்றியமைப்பதன் மூலம் அனைவருமே ஒரே முடிவைப் பார்ப்பதை உறுதி செய்து, அவற்றைச் சரிசெய்கிறது.
