السلوك دون اتصال
الواي فاي في قبو مقهى هو ما هو عليه. والضيف ما زال ينتظر.
الطلب يُكتب على الجهاز قبل لمس الشبكة، ويحمل معرّف عملية، ويُعاد إرساله بالترتيب حين يعود الاتصال — فيكلّف الموجّه المنقطع المكانَ تأخيرًا لا ليلة كاملة. أما العمليات التي لا يجوز التخمين فيها فترفض بين يدي الكاشير بدل أن تنتظر في الطابور.
٠١
القرص قبل الشبكة
أخذ الطلب يكتبه على الجهاز أولًا ويرسله ثانيًا. وهذا الترتيب هو التصميم كله: إن نجحت الكتابة فالطلب موجود، ويصير وجود الشبكة سؤالًا عن متى يصل لا عمّا إذا كان قد حدث. والطابور تطبيق واحد مشترك بين الكاشير والنادل والمطبخ وتطبيق الضيف، فيكون لسؤال «هل ضاع هذا الطلب؟» إجابة واحدة لا أربع.
- والعملية المصفوفة تسجّل معرّفها والطلب الذي تمثّله ومتى أُنشئت وكم مرة جُرّبت.
- والمعرّف يُصكّ على الجهاز لحظة قبول العمل لا على الخادم، وهذا ما يجعله قادرًا على النجاة.
- وتطبيقات الموظفين والضيف الأربعة تكتب على تخزين الجهاز، فيبقى الطابور موجودًا بعد إقلاع بارد.
- وكل قراءة وتعديل وكتابة للطابور تجري بالتسلسل، والإفراغ يحذف بالضبط المُدخَل الذي عالجه بدل أن يكتب لقطة كاملة فوق ما وصل في أثناء ذلك.
٠٢
إعادة الإرسال بالترتيب، وحدّ للمحاولة
الطابور صفّ واحد مرتّب ترتيبًا صارمًا. وحين يعود الاتصال يُفرَّغ من الأقدم، والفشل الذي قد ينجح لاحقًا يوقف الجولة مكانها بدل أن يرسل ما خلفه خارج الترتيب.
- وخطأ الخادم يكسر الجولة ويترك الطابور سليمًا، فيكون ترتيب ما يصل المطبخ هو ترتيب ما أُخذ به.
- والجلسة المنتهية توقف الجولة دون أن تستهلك محاولة، فلا يحرق رمز يحتاج تجديدًا رصيد إعادة المحاولة.
- والرفض — طلب لن يقبله الخادم أبدًا — يُنحّى فورًا وتكمل الجولة بعده، فلا تحجب عملية واحدة فاسدة الطلبات التي خلفها.
- وبعد ثماني محاولات تُنحّى العملية أيضًا. ولا يُسقَط شيء أبدًا: كل عملية تنتهي إما مُسلَّمة أو ما زالت في الطابور أو في قائمة فاشلة على إنسان أن يقرّر بشأنها.
٠٣
الخادم يتذكر المعرّف
العملية المُعادة تحمل المعرّف نفسه الذي حملته أول مرة، على ترويسة يقرأها الخادم في كل طلب. فإن كان قد رأى ذلك المعرّف أعاد الجواب الذي أعطاه أول مرة بدل تنفيذ العمل ثانية — حرفًا بحرف، فلا يستطيع التطبيق التمييز بين إعادة وأصل ولا يحتاج إلى ذلك.
- والمعرّف نفسه إذا قُدِّم على مسار مختلف يُرفض بدل أن يُعاد، لأن إرجاع الجواب المحفوظ الخطأ أسوأ من خطأ مُعلَن.
- وللمال ضمان أقوى من ذلك. فالدفعة تحمل مفتاحًا خاصًا بها خلفه عمود فريد في قاعدة البيانات، فلا تنجح محاولتان متزامنتان معًا — إحداهما تخسر السباق عند قاعدة البيانات فتُسلَّم الدفعة الأصلية.
- وإعادة استعمال مفتاح دفعة لمبلغ مختلف أو فاتورة مختلفة تُعامَل خطأ من المنادي وتُرفض، لا إعادةً.
- وسجل العملية المرئية لا تنتهي صلاحيته عن قصد: نافذة من عشر دقائق كانت ستنفد قبل أن يخرج الهاتف من منطقة ميتة، وهذه هي الحالة التي وُجد من أجلها.
٠٤
ما يرفض بدل أن ينتظر
دفعة ربما حدثت أسوأ من دفعة لم تحدث بوضوح. ولذلك تفشل بعض العمليات بين يدي الموظف بدل أن تُكتب في الطابور، ويكون الرفض فوريًا ومحدّدًا.
- الدفع بالبطاقة والمحفظة والتحويل البنكي يعمل على الاتصال فقط، وكذلك المرتجع على أيٍّ منها، لأنها تحتاج الوصول إلى مزوّد لتصير حقيقة.
- وفتح مناوبة الصندوق وإغلاقها على الاتصال فقط لسبب آخر: لا تحمل أيٌّ من العمليتين مفتاح إعادة، فإعادة المحاولة قد تفتح مناوبة ثانية أو تُقفل على رقم جرد ثانٍ.
- وتقسيم الفاتورة مرفوض دون اتصال، برسالة تقول ذلك بدل دوّامة انتظار.
- أما حركات النقد فتنتظر في الطابور، لأن حركة النقد تحمل مفتاحًا خلفه عمود فريد فتكون إعادتها غير ضارة.
٠٥
ما يحتفظ به الجهاز، وما يطلبه طازجًا
القراءة نظام غير نظام الكتابة، وما يُحفظ على الجهاز يُقرَّر لكل نقطة نهاية على حدة. والقاعدة بسيطة بما يكفي لتحفظها: البيانات المرجعية يجوز حفظها، والحالة الحيّة تُطلَب دائمًا. فالجهاز اللوحي الذي أُعيد تشغيله في نقطة ميتة يفتح على قائمة يستطيع النادل العمل منها، ولا يفتح أبدًا على حالة ترابيزة كانت صحيحة قبل ساعة.
- القائمة وقائمة الضيف وقائمة محطات المطبخ تحتفظ بنسخة على الجهاز. أما الجلسات المفتوحة والفواتير وملخصات المناوبات ولوحات التذاكر فلا تحتفظ عن قصد، لأن رصيدًا قديمًا أسوأ من دائرة انتظار.
- وتنتهي صلاحية النسخة المحفوظة بعد سبعة أيام، والحمولة التي تتجاوز ميغابايت لا تُحفظ أصلًا — تحديدًا حتى لا تزاحم قائمة كبيرة طلبًا لم يُرسَل بعد على تخزين الجهاز.
- والنسخة المحفوظة موسومة بأنها محفوظة، فتستطيع الشاشة أن تقول من أين جاءت بدل أن تعرض بيانات عمرها أسبوع على أنها حيّة.
- وفي الإقلاع البارد تُقرأ نسخة الجهاز أولًا؛ وفي أي تحديث لاحق تُجرَّب الشبكة أولًا ولا تكون النسخة إلا بديلًا. والنسخة المحفوظة محصورة بالمكان الذي تخصّها، فلا تُقرأ بيانات مكان من ذاكرة مكان آخر على جهاز مشترك.
٠٦
العمل الذي فشل قرار، لا اختفاء
العمليات التي رفضها الخادم تُجمَع في قائمة على الجهاز، ومعها كلام الخادم نفسه في سبب الرفض. وتُعرَض شريطًا ثابتًا لا رسالة عابرة تمرّ، ويمكن إعادة كل مُدخَل أو التخلص منه عن قصد.
- والمُدخَل المُعاد يعود إلى رأس الصف بمعرّفه الأصلي، فلا تخاطر إعادة المحاولة بتكرار.
- والتخلص صريح، لكل مُدخَل على حدة، وهو الطريق الوحيد لخروج عملية من النظام دون أن تُسلَّم.
- وحين تكتب لسانان في المتصفح معًا يُرفض الخاسر بدل أن يُسمح له بالكتابة فوق الآخر، والمخزن غير القابل للقراءة يرفع خطأ بدل أن يبلّغ عن طابور فارغ — لأن «فارغ» كانت ستُكتب فوق طلبات مناوبة كاملة.
٠٧
وحين تكون الشبكة موجودة
الطابور هو الاستثناء لا الحالة العادية. ففي مساء عادي يعمل المكان على التحديث الحيّ: تُطلق الخدمات أحداثًا مع وقوع العمل، وتحوّلها طبقة واحدة للزمن الحقيقي إلى غرف — فرع، ومحطة، وطلب، وجلسة — فتعرف شاشة المطبخ وجهاز النادل وهاتف الضيف بالطلب نفسه في اللحظة نفسها بدل أن يسأل كلٌّ منها كل بضع ثوانٍ.
- والدخول إلى غرفة مأذون به، فلا يستطيع اتصال أن يتنصّت على فرع أو محطة أو جلسة لا شأن له بها.
- وحدث الطلب الواحد ينتشر من إطلاق واحد إلى لوحة الفرع والمحطة التي تُعدّه والطلب نفسه والضيف الذي طلبه.
- وهاتف الضيف يتابع جلسته هو ولا شيء غيرها، وهذا ما يجعل عرض الحالة صنفًا صنفًا آمنًا على جهاز لا يملكه المكان.
- ولأن الشاشات تُدفَع إليها البيانات ولا تسأل عنها، فصالة فيها عشرون جهازًا لوحيًا ليست عشرين جهازًا يسألون السؤال نفسه طوال المساء.
أسئلة عن انقطاع الاتصال
إذا أُرسل الطلب مرتين، هل يُعِدّه المطبخ مرتين؟
لا. كل عملية تحمل معرّفًا صُكَّ على الجهاز لحظة أخذ الطلب، والخادم يحتفظ بسجل للمعرّفات التي نفّذها بالفعل. وإعادة المعرّف نفسه تُرجع الجواب الذي أعطاه الخادم أول مرة بدل تنفيذ العمل ثانية، فيعود الطلب المُعاد كما هو لا كطلب ثانٍ. ولا تنتهي صلاحية ذلك السجل، لأن سببه كله هو الهاتف الذي قضى ساعة في قبو.
هل أستطيع تحصيل دفعة بالبطاقة والشبكة مقطوعة؟
ترفض بدل أن تنتظر، وهذا هو السلوك الذي تريده. فالدفع بالبطاقة والمحفظة والتحويل البنكي — والمرتجع عليها — يحتاج الوصول إلى مزوّد ليصير حقيقة، فيفشل دون اتصال بين يدي الكاشير برسالة تقول إن الاتصال مطلوب. أما النقد فمختلف: حركة النقد تحمل مفتاحًا خلفه عمود فريد في قاعدة البيانات فتستطيع الانتظار في الطابور بأمان. وفتح المناوبة وإغلاقها على الاتصال فقط أيضًا، لأن أيًّا منهما لا يحمل مفتاح إعادة وقد تفتح إعادة المحاولة مناوبة ثانية.
ماذا يظهر على الشاشة بعد إقلاع بارد بلا اتصال؟
القائمة، ولا شيء كثير غيرها. فالحفظ يُقرَّر لكل نقطة نهاية، والقاعدة أن البيانات المرجعية يجوز الاحتفاظ بها على الجهاز والحالة الحيّة لا — فتنجو القائمة وقائمة الضيف وقائمة المحطات من إعادة التشغيل، ولا تنجو الترابيزات المفتوحة ولا الفواتير ولا الأرصدة ولا لوحات التذاكر. والنسخة المحفوظة تنتهي صلاحيتها بعد سبعة أيام، وتُتخطّى كليًا إن تجاوزت ميغابايت، وتُوسَم بأنها نسخة محفوظة حتى تقول الشاشة ذلك.
اسأل عن الحالة التي تقلقك.
الموجّه الذي يعيد التشغيل في الثامنة، والقبو الذي فيه شرطة إشارة واحدة، والجهاز اللوحي الذي نفدت بطاريته في منتصف الطلب. هذه هي الأسئلة التي كُتب هذا التصميم أمامها.
موعد، ومشاركة شاشة، ومخطط صالتك أنت عليها.
[email protected]