نحوه مدیریت ویرایش‌های همزمان در Google Docs

Google Docs به افراد زیادی اجازه می‌دهد تا به‌طور همزمان یک سند را ویرایش کنند.

وقتی دو نفر دقیقاً در یک ثانیه، یک خط یکسان را ویرایش می‌کنند، چه اتفاقی می‌افتد؟

یک سیستم استاندارد با خواندن، تغییر دادن و ذخیره کردن داده‌ها کار می‌کند. اگر دو نفر همزمان ذخیره کنند، نفر دوم جایگزین نفر اول می‌شود و نفر اول کار خود را از دست می‌دهد.

Google Docs با استفاده از Operational Transformation (OT) از این مشکل جلوگیری می‌کند.

این سیستم با هر بار تایپ کردن، کل سند را ارسال نمی‌کند، بلکه عملیات‌های کوچکی را ارسال می‌کند.

برای مثال:

  • کاربر A کلمه "Beautiful" را در موقعیت ۶ درج می‌کند.
  • کاربر B کلمه "Amazing" را در موقعیت ۶ درج می‌کند.

اگر سرور این‌ها را بدون تغییر اعمال می‌کرد، یکی از ویرایش‌ها ناپدید می‌شد.

در عوض، سرور عملیات‌ها را تغییر شکل (transform) می‌دهد.

سرور می‌بیند که کاربر A ابتدا سند را به‌روزرسانی کرده است. سند بزرگ‌تر می‌شود. وقتی سرور کاربر B را پردازش می‌کند، موقعیت را از ۶ به ۱۶ تغییر می‌دهد.

متن نهایی می‌شود: Hello Beautiful Amazing World.

هر دو ویرایش باقی می‌مانند.

این سیستم بر این ستون‌های فنی تکیه دارد:

  • WebSockets برای برقراری یک اتصال مداوم.
  • ردیابی نسخه (Version tracking) برای دانستن اینکه هر ویرایش مربوط به کدام نسخه است.
  • جریان‌های رویداد آنی (Real-time event streams) برای پخش کردن تغییرات.

Google Docs سند را قفل نمی‌کند. قفل کردن باعث می‌شود در حالی که یک نفر در حال تایپ است، بقیه نتوانند کار کنند.

در عوض، از ادغام هوشمند (intelligent merging) استفاده می‌کند.

این سیستم همچنین موقعیت نشانگر (cursor) شما را تغییر می‌دهد. اگر کسی متنی را قبل از شما اضافه کند، نشانگر شما به جلو حرکت می‌کند تا جای خود را گم نکنید.

در حالی که Google Docs از OT استفاده می‌کند، بسیاری از ابزارهای جدید مانند Figma از Conflict-free Replicated Data Types (CRDT) استفاده می‌کنند. CRDTها به کاربران اجازه می‌دهند بدون نیاز به یک سرور مرکزی، تغییرات را با هم ادغام کنند.

اگر در حال مطالعه طراحی سیستم (system design) هستید، این نکات را به خاطر بسپارید:

  • از WebSockets برای تأخیر کم (low latency) استفاده کنید.
  • از OT یا CRDT برای حل تعارض (conflict resolution) استفاده کنید.
  • از شماره نسخه‌ها برای ردیابی تغییرات استفاده کنید.
  • نشانگرها را همگام‌سازی (sync) کنید تا تجربه کاربری بهبود یابد.

Google Docs از بروز تعارض جلوگیری نمی‌کند، بلکه با تغییر شکل ویرایش‌ها، آن‌ها را حل می‌کند تا همه نتیجه یکسانی را ببینند.

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