الأنظمة اللحظية
دفع تحديث إلى متصفح سهل. أما تحديد أي النسختين صحيحة حين تصل اثنتان معاً فهو التخصص كله.
التزامن هو الموضوع الحقيقي. شخصان يحرران الفقرة نفسها، أو مشغّلان يغيّران السجل نفسه، يُنتجان نيّتين متعارضتين، وعلى شيء أن يحسمهما بشكل حتمي. "آخر كتابة تفوز" بسيطة وتدمّر العمل بصمت. والتحويلات العملياتية و CRDT تحفظان النيّتين وهما أعقد بكثير تنفيذاً وفهماً. وأيّهما تحتاج يعتمد على ما إذا كان المُحرَّر مستنداً أم قائمة أم قيمة واحدة — وهذا القرار مكانه البداية، لأنه يشكّل نموذج البيانات كله.
الاتصالات ليست الشيء الموثوق الذي يفترضه المطورون. تنقطع WebSocket حين ينام حاسوب، أو يغيّر هاتف شبكته، أو يقرر وسيط أن اتصالاً خاملاً قد مات — لذا فإعادة الاتصال مع إعادة مزامنة الحالة ليست تحسيناً بل خط الأساس. والنموذج الذهني الصحيح أن العميل متأخر كثيراً ومخطئ أحياناً، وأن على البروتوكول أن يتيح له اللحاق دون إعادة تشغيل كل شيء منذ بداية الجلسة.
التواجد — من هنا، ومن يكتب، وأين مؤشر كلٍّ — يبدو ميزة صغيرة وهو الأسوأ توسّعاً. فهو حركة عالية التردد منخفضة القيمة، والتنفيذ الساذج يبثّ كل حركة مؤشر إلى كل مشارك، وهذا مقبول لثلاثة أشخاص في الاختبار وينهار عند ثلاثين. والتقنين والتجميع وقبول تأخر طفيف هي ما يجعله عملياً، وبناؤها ابتداءً أسهل بكثير من إضافتها لاحقاً.
كيف نعمل
- تُختار استراتيجية حل التعارض بحسب ما يُحرَّر، وتُختار أولاً، لأنها تشكّل نموذج البيانات.
- إعادة الاتصال وإعادة مزامنة الحالة جزء من البروتوكول لا مسار خطأ، لأن الاتصالات تنقطع باستمرار.
- تُقنَّن حركة التواجد وتُجمَّع من البداية؛ فالنسخة الساذجة تنجح لثلاثة وتفشل عند ثلاثين.
ما يشمله هذا
اختر ما تحتاجه وأرسله إلينا.