لو الـ API عندك بيرد في 80ms متوسط، وعميل بيتصل يقولك إن صفحة الطلبات بتعلّق عنده، إنت مش هتلاقي حاجة في الـ Grafana. المشكلة إن المتوسط بيخفي كارثة بتحصل لـ 1 من كل 100 طلب — ودي بالظبط الكارثة اللي بتكسر ثقة 5% من قاعدة مستخدميك.
Tail Latency: المعدل بيخبّي الكارثة
المشكلة باختصار
في كل API بتقدّمه، فيه ذيل (tail) من الطلبات بتاخد زمن أعلى بكتير من المتوسط. ده مش noise، وده مش edge case هتتجاهله. ده اللي بيحدّد تجربة فعلية لشريحة من مستخدميك. كل 100 طلب فيهم 5 طلبات أبطأ من P95، وواحد بيتعدى P99. لو P50 = 80ms و P99 = 2400ms، إنت في إنتاج بيقع — بس ما حدش لسه بيشوفه في الـ metrics.
مثال بسيط للمبتدئ قبل الكلام العلمي
تخيل خط إنتاج بيركّب 1000 موبايل في الساعة. لو مدير المصنع بيقولك "متوسط زمن التركيب 36 ثانية"، الكلام ده مفيد للتسويق. لكن لو 10 موبايلات في الساعة بياخدوا 5 دقايق لأن في عقدة في الـ pipeline (آلة بتسخن، أو عامل بياخد break)، العملاء اللي استلموا الـ 10 دول هم اللي هيكتبوا review سيء. المتوسط مش بيشوفهم. P99 بيشوفهم.
الفكرة بالظبط زي كده في الـ API. متوسط الاستجابة بيقولك إن "الجو حلو". P99 بيقولك "في حد بيتعذّب".
التعريف العلمي للنسب المئوية
الـ Latency Percentiles هي توزيع statistical لزمن الاستجابة. P50 (الوسيط) هو القيمة اللي 50% من الطلبات أسرع منها. P99 = 99% من الطلبات أسرع، يعني 1% من الطلبات أبطأ. الفجوة بين P50 و P99 اسمها tail.
الافتراض المهم: زمن الاستجابة في إنتاج مش بيتبع توزيع طبيعي (Normal Distribution). التوزيع long-tailed، يعني الفرق بين P50 و P99 ممكن يوصل 10x أو أكتر. ده مش رأي شخصي، ده مرصود من عشرات الشركات ومؤرّخ في ورقة Jeffrey Dean و Luiz André Barroso بعنوان "The Tail at Scale" (CACM، فبراير 2013).
السيناريو الواقعي بالأرقام
افترض إن service عندك بيخدّم 5000 طلب/ثانية. P50 = 80ms، P99 = 2400ms. في كل ثانية، 50 طلب بياخدوا أكتر من 2.4 ثانية. في ساعة واحدة، 180,000 طلب بطيء. في يوم، 4.3 مليون طلب. مش edge case — ده شريحة كاملة من تجربة الاستخدام بتتدمّر يوميًا.
والـ trade-off اللي مش معلن في معظم الأنظمة: لو عندك 10 microservices متسلسلة في رحلة الطلب الواحد وكل واحدة P99 = 100ms، الـ end-to-end P99 مش 100ms. هو أقرب لـ 700ms لأن احتمال إن طلب واحد على الأقل يقع في tail خدمة من الـ 10 بيتراكم بشكل multiplicative. ده اللي خلّى Dean و Barroso يحذّروا من "tail amplification" في الورقة.
]]>