كيف يتعامل Google Docs مع التعديلات المتزامنة

يتيح Google Docs لعدة أشخاص تعديل مستند واحد في نفس الوقت.

ماذا يحدث عندما يقوم شخصان بتعديل السطر نفسه تمامًا في نفس الثانية؟

يعمل النظام التقليدي عن طريق قراءة البيانات وتعديلها وحفظها. إذا قام شخصان بالحفظ في وقت واحد، فإن الشخص الثاني سيمحو عمل الأول، وبالتالي يفقد الشخص الأول عمله.

يتجنب Google Docs ذلك باستخدام تقنية Operational Transformation (OT).

هو لا يرسل المستند بالكامل في كل مرة تكتب فيها، بل يرسل عمليات صغيرة.

على سبيل المثال:

  • يقوم المستخدم A بإدراج "Beautiful" في الموضع 6.
  • يقوم المستخدم B بإدراج "Amazing" في الموضع 6.

إذا قام الخادم بتطبيق هذه العمليات دون تغييرات، فسيختفي أحد التعديلين.

بدلاً من ذلك، يقوم الخادم بتحويل العمليات.

يرى الخادم أن المستخدم A قام بتحديث المستند أولاً، مما يؤدي إلى زيادة حجم المستند. وعندما يعالج الخادم عملية المستخدم B، فإنه يغير الموضع من 6 إلى 16.

يصبح النص النهائي: Hello Beautiful Amazing World.

ينجو كلا التعديلين.

يعتمد النظام على هذه الركائز التقنية:

  • WebSockets لاتصال مستمر.
  • تتبع الإصدارات لمعرفة أي تعديل جاء من أي إصدار.
  • تدفقات الأحداث في الوقت الفعلي لبث التغييرات.

لا يقوم Google Docs بقفل المستند؛ لأن القفل سيمنع الجميع من العمل أثناء قيام شخص واحد بالكتابة.

بدلاً من ذلك، يستخدم الدمج الذكي.

يقوم النظام أيضًا بتحويل موضع المؤشر الخاص بك. فإذا أضاف شخص ما نصًا أمامك، يتحرك المؤشر للأمام حتى لا تفقد مكانك.

بينما يستخدم Google Docs تقنية OT، تستخدم العديد من الأدوات الجديدة مثل Figma تقنية Conflict-free Replicated Data Types (CRDT). تتيح تقنية CRDT للمستخدمين دمج التغييرات دون الحاجة إلى خادم مركزي.

إذا كنت تدرس تصميم الأنظمة، فتذكر هذه النقاط:

  • استخدم WebSockets لتقليل زمن الاستجابة (low latency).
  • استخدم OT أو CRDT لحل التعارضات.
  • استخدم أرقام الإصدارات لتتبع التغييرات.
  • قم بمزامنة المؤشرات لتحسين تجربة المستخدم.

لا يمنع Google Docs التعارضات، بل يقوم بحلها عن طريق تحويل التعديلات بحيث يرى الجميع النتيجة نفسها.

المصدر: https://dev.to/khushindpatel/how-does-google-docs-handle-two-people-editing-the-same-line-at-the-exact-same-time-38gi