خط القياس لديك يفقد أحداثًا عند ذروة الحركة، وأرقام الإسناد لا تتفق أبدًا مع سجلات المزايد. هذان عطلان خلف عرَض واحد: أحداث لم تصل قط عند وصلة لم يعدّها أحد، وأحداث وصلت وعُدّت بقاعدة مختلفة. هكذا تُبنى الوصلات والمفاتيح ونافذة التأخر وجسر المطابقة.
خط أحداث يفقد أحداثًا عند ذروة الحركة ولا يتطابق أبدًا مع سجلات المزايد قد يكون عطلين خلف عرَض واحد. الأول نقل: أحداث أُنشئت ولم تصل قط، عند وصلة لم يعدّها أحد. والثاني تعريفي: أحداث وصلت وعُدّت بقاعدة تختلف عن قاعدة سجل المزاد.
الصياغة المعتادة - خط الأحداث يُسقط أحداثًا، فأعد بناء الخط - تصلح واحدة منهما على الأكثر. وما يلي يفصل الاثنتين ويقول ما الذي تنتجه المطابقة، وهو ليس التساوي. والإعدادات الافتراضية المقتبسة أدناه هي Kafka في جانب النقل وClickHouse في جانب التخزين.
الجواب القصير بنيوي: معرّف واحد لكل مزاد يُحمل من الطرف إلى الطرف، وعدّاد على جانبي كل قفزة، ومطابقة على نافذة أُغلقت بالفعل. وما تستطيع amBrain إثباته علنًا هو عمل AdTech: تطوير DSP، ومنصات المزايدة الفورية، وهندسة منصات تبادل الإعلانات. وفي أي منظومة RTB هذا هو الجانب الذي تأتي منه سجلات المزايدة والفوز والظهور. وخط الأحداث أدناه موصوف من ميكانيكا المشكلة، لا من حالة لدينا.
العطل الأول هو الفقد: أُنشئ الحدث ولم يصل قط، عند قفزة محددة ولسبب محدد. beacon لم يغادر الصفحة، وحافة أُعيد تشغيلها في منتصف النشر، وbuffer منتج امتلأ، ومستهلك ثبّت الـ offset قبل المعالجة.
والثاني ليس عطلًا إطلاقًا. جانب القياس يعدّ حدثًا يبدأه العميل؛ والمزايد يسجّل نتيجة مزاد من جانب الخادم. أحدهما منح، والآخر ملاحظة لما جرى له. وتعامل إرشادات القياس من MRC الجلب المسبق والعرض المسبق والتحديث التلقائي كأشياء منفصلة يجب كشفها والإفصاح عنها: قاعدة عدّ لا عطل نقل. والتفريق بينهما يكلف استعلامًا واحدًا وبعض الصبر.
إلى أن يوجد ذلك المنحنى، يبقى طرفا الجدل رأيين. وبعده يقرر شكله أي نصف من هذه المقالة ينطبق، والنصفان لا يستبعد أحدهما الآخر.
هناك سبعة مواضع يُنشأ فيها حدث إعلاني ثم يكفّ عن الوجود بصمت، إضافة إلى إعداد واحد يبدو ضمانة وليس كذلك.
القاعدة قاعدة تقارير لا قاعدة هندسة: يُنسب الفقد إلى وصلة لها اسم، أو لا يُنسب إطلاقًا. وإنذاران يبقيان الوصلات الصامتة مرئية - تأخّر المستهلك مقيسًا بالزمن مقابل نافذة الاحتفاظ، وسياسة إعادة ضبط تفشل بدل أن تقفز.
مفتاح إزالة التكرار ليس مفتاحًا أساسيًا مريحًا يُختار عند الوجهة. بل يُسنَد قبل أي إعادة محاولة، وقت المزاد أو لحظة إنشاء الحدث، والمستقبِل لا يخترع مفتاحًا أبدًا. وطوابع وقت الوصول تبقى خارجه: إعادة المحاولة تحمل وقت وصول جديدًا ومفتاحًا جديدًا.
يجب أن يكون المفتاح متطابقًا عبر كل محاولة، وهذا يحدد أجزاءه: منصة التبادل أو الـ seat، ومعرّف المزاد، ومعرّف الظهور، ونوع الحدث. قسّم الـ topic على ذلك المفتاح، فتهبط إعادات المحاولة معًا ويصمد الترتيب لكل مفتاح أمامها. وهذه التعليمة للنقل فقط: الكلمة نفسها مطبَّقة على المخزن العمودي تعطي قسمًا لكل حدث، ويموت الإدراج عند الحد لكل كتلة. قسّم التخزين بالزمن، ورتّب بالمفتاح.
فالشكل العملي هو نقل at-least-once بمفاتيح idempotent. إزالة التكرار وقت الكتابة تبقي فاتورة التخزين معقولة؛ وإزالة التكرار وقت القراءة هي ما يجعل الرقم صحيحًا. والدمج لا يجمع أبدًا أجزاءً من أقسام مختلفة، فالتكرار الذي يهبط في القسم التالي لا يُحلّ إلا حين يسأل استعلام.
تحت الحمل الزائد أمام النظام ثلاثة خيارات: إبطاء المنتج، أو الإسقاط مع عدّاد، أو الفقد بصمت. والثالث وحده غير مقبول، وهو السلوك الافتراضي لكود لم يُسأل السؤال قط. والفقد عند الذروة طابور نما حتى نفدت الذاكرة، أو إقرار صدر قبل المتانة.
الإسقاط المصحوب بعدّاد موسوم كمية معلومة يمكن مطابقتها لاحقًا. أما الإسقاط بلا عدّاد فليس بيانات مفقودة، بل رقم مفقود.
يقول إرشاد تنفيذ OpenRTB ذلك مباشرة: التسلسل من طلب الإعلان مرورًا بالمزاد وصولًا إلى العرض والفوترة ليس معاملاتيًا في جوهره. فأطراف كثيرة تقف بين العدّين.
التأخير متوقَّع لا استثنائي. يمكن أن يحمل طلب المزايدة مدة صلاحية الظهور، وأن تحمل المزايدة التأخير الذي يحتمله المزايد، والإرشاد نفسه يعطي قواعد تقريبية تمتد من رتبة الدقيقة على الويب إلى ما هو أطول بكثير للصيغ المخزّنة داخل التطبيقات والفيديو المخيَّط.
لا أحد من الحقلين عقد. يقول الإرشاد صراحة إن إشعار فوترة يصل بعد مدة الصلاحية التي أعلنها المزايد قد يظل قابلًا للفوترة - وهو نقاش سياسات بين المزايد ومنصة التبادل لا شيء يفرضه البروتوكول.
الحدث الذي يصل بعد النافذة ليس عيبًا في خط الأحداث، بل خاصية للوسيط. والخيار الحقيقي الوحيد هو أن يتحرك الرقم علنًا ما دامت النافذة مفتوحة، أو أن يتحرك سرًّا بعد إغلاقها.
المعرّفات التي تستبدلها منصة التبادل في روابط الإشعار والتتبع هي معرّف المزاد من طلب المزايدة، ومعرّف الظهور، ومعرّف المزايدة حيث أنشأه المزايد. ولا واحد من الثلاثة مفتاح بمفرده.
تصف المواصفة معرّف المزاد بأنه فريد على مستوى منصة التبادل لا فريد عالميًا: منصتا تبادل قد تسلّمانك السلسلة نفسها في اليوم نفسه. ومعرّف الظهور فريد داخل طلب المزايدة الخاص به فقط، وكثيرًا ما يكون 1 حرفيًا. ومعرّف المزايدة اختياري.
المفتاح الذي يصمد مركّب: منصة التبادل أو الـ seat الذي تعاملت عبره، زائد معرّف المزاد، زائد معرّف الظهور. أنشئه في جانب المزايد وقت المزاد، وعامل أي شيء أقصر منه كبادئة لا كمفتاح.
إذا غابت تلك الماكروات عن الـ beacons استحالت المطابقة على مستوى الحدث، وبقيت المطابقة بالوقت والموضع والمادة الإعلانية. وما يمكنك بناؤه بدلًا من ذلك جسر من ستة أعداد، كل عدد منها يسمّي سبب اختلافه عن الخطوة التي فوقه.
النسبة المستقرة بين الخطوات هي الهدف، والتحرك غير المفسَّر هو الإنذار. داخل نظام واحد يجب أن تساوي نسب القفزات واحدًا، وأي انحراف هو الإشارة. أما عبر الحد بين المزاد والقياس فالواحد هو القراءة المريبة.
العدّادات نفسها، مقروءة كنسب، تحوّل السؤال إلى حساب: المقبول على المرسل، والمنتَج على المقبول، والمستهلَك على المنتَج، والمدرَج على المستهلَك. أربع نسب على رسم واحد تقول أين ذهبت الأحداث قبل أن يفتح أحد سجلًا. أضف رقم تسلسل من جانب المنتج لكل مصدر وقسم، فتصير الفجوة دليلًا لا شبهة.
سؤال واحد لا يجيب عنه الجسر ويجيب عنه العقد: على أي من هذه الأرقام تدفع. البائع يقيّد الإيراد على حدثه القابل للفوترة، والمشتري يضبط وتيرة إنفاقه على حدثه هو، والإرشاد يعامل الفجوة المستمرة كمحادثة دعم بين الطرفين.
قرّر مسبقًا أي عدّ هو المرجع الرسمي للإنفاق، وعند أي فجوة تتحول ملاحظة في التقرير إلى تذكرة مع منصة التبادل. العمل أعلاه يشتري نسب الفقد إلى وصلة بعينها، وتكرارات صادقة، ومطابقة مشروحة سطرًا سطرًا. وهو لا يشتري ما يلي.
خط الأحداث القادر على الإجابة عن أسئلة الإفصاح تلك لديه رواية عن سلامة البيانات. والعاجز عنها لديه رأي، والرأي هو ما يُتنازع عليه في نهاية الربع.
العطل الجدير بأن تصمم ضده ليس الساعة المفقودة التي تفتح تحقيقًا. بل النسخة الصامتة منه: وصلة تُسقط بلا عدّاد، وإدراج أُقرّ قبل أن يصير متينًا، ومطابقة على نافذة ما زالت مفتوحة.
ما تستطيع amBrain إثباته علنًا: amBrain شركة هندسة برمجيات في يريفان، أرمينيا، تبني منصات تداول منخفضة زمن الاستجابة ومحركات مطابقة وأنظمة مزايدة فورية بـ Rust. وتبني amBrain البرمجيات منذ 2019. وإعادة بناء خط قياس ليست عملًا موصوفًا هنا. وإذا توقفت الأرقام عن التطابق في جانب المزايد ومنصة التبادل - سجلات المزايدة والفوز والظهور نفسها - فتلك هي المحادثة الجديرة بالإجراء، وهي تبدأ بمنحنى الاستقرار لا بإعادة البناء.
أحضر بنيتك الحالية وسيناريو الفشل الذي يقلقك، وسنراجعه معًا خلال نصف ساعة.