كل ميزانية latency كتبتُها في وثيقة تصميم تعفّنت بهدوء في ركن من wiki. الوحيدة التي نجحت لم تكن ذكية — كانت رقم p99 واحد، مثبَّتاً على endpoint واحد، يملكه فريق واحد، ومُفرَضاً بلوحة تحكّم واحدة لا يستطيع أحد حذفها بهدوء. هذا المنشور قصة لماذا نجحت تلك حين لم تنجح الأخريات.

تلك التي لم تنجح

كل فريق انضممتُ إليه كان عنده ميزانية latency في مكان ما. عادةً في وثيقة تصميم من قبل 18 شهراً، قبل ثلاثة أصحاب، بعنوان شيء كـPerformance SLOs, v2. عادةً كانت تحتوي على:

  • جدول من 40 endpoint، لكل منها هدف p50/p95/p99/p99.9.
  • صف “service-level objective” لكل خدمة.
  • مقياس “تجربة مستوى المنتج” مجمَّع.
  • ملاحظة في الأسفل تقول “هذه أهداف، لا ضمانات.”

كل صف كان معقولاً. لم يستطع أحد الجدال مع أي رقم منفرد. ومع ذلك في كل مرة شغّلتُ استعلاماً ضد الأرقام الفعلية في الإنتاج، كنا نخرق نصفها بهدوء — لا إنذارات، لا متابعة، لا محادثة. الميزانية كانت للزينة.

نمط الفشل ليس أن الأرقام كانت خاطئة. نمط الفشل هو أن لم يملك أحد أياً منها بصوت عالٍ كافٍ. رقم لا مشكلة لأحد ليس مشكلة لأحد.

الواحدة التي نجحت

في منصّة معيّنة — أحد تلك جهود التحديث event-driven التي قمتُ بها مع فريق متعدّد الفِرق — استمررنا في محاولة كتابة وثيقة SLO الصحيحة. لم تنجُ من أي sprint. في النهاية استسلمنا وفعلنا شيئاً شعر بأنه صغير جداً ليعمل.

اخترنا endpoint واحداً. الذي عند الجميع رأي فيه — تدفّق الانضمام لمباراة في backend لعبة في الوقت الحقيقي. كتبنا رقماً واحداً على السبّورة: p99 < 250ms. وضعنا اسم شخص واحد بجانبه. أنشأنا رابط لوحة تحكّم واحداً. دبّسنا رابط لوحة التحكّم في قناة Slack للفريق وأضفناه إلى قالب تسليم الاستعداد.

تلك كانت الميزانية كاملاً. رقم واحد. Endpoint واحد. مالك واحد. لوحة تحكّم واحدة.

نجحت لثلاث سنوات. أخطأناه، تعافينا، خرقناه مجدداً، أصلحناه مجدداً. الرقم تحرّك (أولاً نزل إلى 180ms، ثم صعد إلى 220ms حين أضفنا ميزة تستحق التكلفة). لكن كان دائماً على جدول الأعمال — لأنه كان واحداً فقط، والجميع عرف من يُنبّه.

لماذا فازت النسخة الأبسط

أربعة أسباب، بترتيب مدى تقدير قيمتها:

1. الحمل المعرفي. أربعون رقماً أقل مما تتخيّل للآلة وأكثر مما يستطيع الإنسان الاهتمام به بصورة مستدامة. رقم واحد على ملصق على حاسوب شخص ما. أربعون رقماً في جدول في وثيقة في مجلد في wiki.

2. وضوح الملكية. “فريق المنصة يملك ذلك” ليس ملكية. إنه أثر المتفرّج مع طبقة امتثال. “جوليا تملك p99 على join-a-match” يعني جوليا تُنبَّه. جوليا إما تُصلح أو تُسلّمه صراحةً. الرقم عنده وجه.

3. ملاءمة الإنذار. يمكنك إعداد إنذار جيّد لرقم واحد. لا تستطيع إعداد إنذار جيّد لأربعين رقماً مترابطاً — إما تُطلق زائداً أو تقلّ، ولن تعرف أيهما حتى يصبح الـpager ضريبة شعبية. (انظر منشوري الأخير حول سبب جعل ضريبة الـpager الشعبية لدورتك تتفكّك.)

4. الإثبات الاجتماعي أثناء الخرق. حين يُخرَق الرقم، الناس يتعرّفون عليه. “p99 على join-a-match وصل للتو إلى 380” جملة يُومئ لها الناس. “SLO latency المنصّة أصفر في الربع 3 من لوحة grafana” جملة تختبئ. لا تستطيع التعبئة حول جملة تختبئ.

السؤال الذي أصلح نظافة اجتماعاتنا

بعد تبنّي نهج الرقم الواحد، أبقينا سؤالاً متكرّراً في كل اجتماع أسبوعي: “هل الرقم أحمر، أصفر، أم أخضر؟”

  • أخضر: تخطّاه. لا مسرح حالة.
  • أصفر: المالك يقول جملة واحدة عمّا يفعله.
  • أحمر: نُسقط جدول الأعمال ونضع خطّة.

هذا استبدل ما يقارب 30 دقيقة من “تحديثات حالة الأداء” أسبوعياً بفحص 60 ثانية. يعني أيضاً أنه حين كانت الأمور سيئة فعلاً، لاحظنا خلال أسبوع لا خلال ربع.

ما الرقم الواحد ليس عليه

  • ليس الصورة الكاملة. هناك عشرات المقاييس الأخرى التي تهتمّ بها. تعيش في لوحات تحكّم، في إنذارات، في دراسات حالة بعد الحوادث. الرقم الواحد هو العمود الفقري؛ كل شيء آخر هو العضلات.
  • ليس هدفاً لكل endpoint. 90% من endpoints الخاصة بك لا تستحق ميزانية. الميزانية مكلفة للصيانة — أعطها للتي تهمّ فعلاً للمنتج، ثم انسَ الأخريات حتى تظهر في سجلات الأخطاء.
  • ليس ثابتاً. ستُعلّيه وتُخفّضه. كلاهما مقبول. ميزانية لا تتحرّك أبداً هي ميزانية لا ينظر إليها أحد.

كيف تبدأ

إن كنتَ تفكّر في كتابة وثيقة SLO أداء صحيحة الآن: لا تفعل. بدلاً من ذلك، الليلة، قبل أن تنسى:

  1. اختر الـendpoint الأكثر ظهوراً للمستخدم في منتجك.
  2. اسحب p99 الخاص به للـ30 يوماً الماضية.
  3. أجمع الأعلى. هذا رقمك الابتدائي.
  4. ضع اسم شخص واحد بجانبه. على الأرجح اسمك.
  5. دبّس رابط لوحة التحكّم في قناة الفريق الأكثر استخداماً.
  6. أضف “ما هو الرقم؟” إلى اجتماعك الأسبوعي.

هذا هو الأسبوع الأول. في الأسبوع الثاني، إما تلاحظ أن الرقم خاطئ، أو تلاحظ أنه جيّد. في كلتا الحالتين، أنت الآن تملكه. هذا أبعد مما تصل إليه معظم وثائق SLO على الإطلاق.

لحظة التفاخر

سأقول الجزء الهادئ: هذا النهج جعلني أبدو جيداً جداً بسرعة كبيرة. “محمد خير خفّض p99 لدينا بنسبة 63%” عنوان يستطيع مديري قوله بصوت عالٍ في تقييم أداء. “محمد خير صان وثيقة SLO” ليس كذلك. اختر الرقم المحدَّد، استلم التحسّن المحدَّد. مديرك لا يستطيع ترقية وثيقة.