الخلاصة

  • يقول GitHub إن حادث 17 أغسطس استمر 7 ساعات و47 دقيقة. بلغت أخطاء الويب وواجهات API نحو 20% عند الذروة، وبلغت أخطاء تنزيل الأرشيف والمحتوى الخام قرابة 50%، مع تأثر Issues وPull Requests وActions وخدمات الهوية وCopilot.
  • تعزو الشركة البداية إلى وصول sidecar يعمل بـIstio إلى حد التزامن من دون توسع مناسب. ثم استنفدت أربع عقد HAProxy حدود التدفق، ورفعت إعادة المحاولة حركة Copilot Token Service من المعدل الطبيعي البالغ 7–9 آلاف طلب في الثانية إلى 70–100 ألف.

نجح GitHub في خدمة جزء من الحركة من Northern Virginia بعدما كانت تفشل في Central US. إلا أن الوجهة البديلة استقبلت طلبات يتزايد عددها كلما تأخر الرد.

تحدد التحديثات التفصيلية للحادث zkxwbgr0cnmx فترة التأثير من 13:28 إلى 21:15 بالتوقيت العالمي في 17 أغسطس. شهدت Issues وPull Requests وواجهات API وActions وCopilot أخطاء أو زمناً أطول للاستجابة. وقدر GitHub ذروة الأخطاء بنحو 20% للويب وAPI وبنحو 50% لتنزيل الأرشيف والملفات الخام من المستودعات.

امتد الأثر إلى أدوات التحكم المؤسسية. شملت القائمة مصادقة SAML وOIDC، وخدمتي SCIM وTeam Sync. كما تأثرت مسارات Actions في GitHub Enterprise Cloud مع إقامة البيانات عندما اعتمدت على تعريفات عامة لخطوات العمل مستضافة في GitHub.com. هذا لا يثبت خروج البيانات من المنطقة المختارة ولا خرق التزام التخزين؛ بل يحدد اعتماداً تشغيلياً على سطح خدمة آخر.

ترجع الشركة السبب المباشر إلى تشبع الشبكة عند موازنات الحمل في مركز Central US خلال ذروة جديدة للحركة. وصل pod جانبي لـIstio إلى حد التزامن. وكانت سياسة التوسع تراقب الخدمة المضيفة ولا تراقب حد الـsidecar، لذلك لم تضف سعة إلى المكوّن الذي أصبح عنق الزجاجة.

انتشر القيد حتى استنفدت أربع عقد HAProxy حدود التدفق. تراجعت قدرة مسار المصادقة في البوابة، واتسعت حالات التأخر وفشل الدخول. ويقول GitHub إن إيقاف HAProxy على تلك العقد في وقت واحد أدى إلى تعافٍ واسع وفوري.

نُقل جزء من الحركة المتعثرة إلى Northern Virginia، حيث خُدمت بنجاح أثناء فحص العطل في Central US. عادت معظم الخدمات بحلول 16:36 بالتوقيت العالمي، بينما بقيت Actions متدهورة حتى قرابة 18:03.

استغرق Copilot وقتاً أطول لأن الرد البطيء كان يولد حركة جديدة. أدى تأخر نقطة داخلية واحدة إلى تشغيل خلل كامن في إعادة المحاولة داخل VS Code. كان فشل عملية token قادراً على إنشاء طلبات إضافية والدخول في حلقة. ارتفعت حركة Copilot Token Service من 7–9 آلاف طلب في الثانية عادة إلى 70–100 ألف.

احتاج التعافي إلى وقف التضخيم، لا إلى إضافة وجهة فحسب. خفض GitHub مؤقتاً إعادة المحاولة عند البوابة، وأعاد HTTP 403 لبعض طلبات Copilot token عند موازنات الحمل، ثم أعاد الحركة تدريجياً لكل موقع. اكتمل تعافي خدمة token قرابة 21:02، وأُغلق سجل الحادث عند 21:15.

أفاد GitHub أيضاً بأن عدة هجمات scraping استهدفت نقاط codeload وعقدت الاستجابة. لم تحدد الشركة مقدار مساهمتها في التشبع أو زمن التعافي، ولم تعرضها بوصفها الشرارة الأولى. السلسلة المنشورة تبدأ بحد الـsidecar وسياسة التوسع الناقصة، ثم نفاد تدفقات HAProxy وتضخيم إعادة المحاولة.

توضح الوثائق كيف تعبر وظائف مختلفة الحدود نفسها. يمكن لـمسارات العمل القابلة لإعادة الاستخدام استدعاء تعريفات محفوظة في مستودعات عامة عندما تسمح السياسة بذلك. وتسرد وثيقة runners المستضافة نطاق GitHub.com وواجهة API ونطاقات Actions وcodeload.github.com ضمن الوجهات اللازمة لتنفيذ المهام وتنزيل actions.

الهوية جزء من المسار الحرج كذلك. يستخدم GitHub SAML SSO وSCIM للتحكم في الوصول ودورة حياة الحسابات. وتشرح وثيقة Enterprise Cloud مع إقامة البيانات النطاقات الفرعية المخصصة في GHE.com وخيارات المناطق. مكان تخزين البيانات لا يحدد وحده كل مسارات المصادقة أو تنزيل تعريفات العمل اللازمة لاستخدامها.

تشمل إجراءات GitHub المعلنة جعل التوسع يدرك سعة الـsidecar، وتدقيق حدود Istio، ومراجعة إعادة المحاولة وbackoff في البوابات والعملاء، ومعالجة سلوك VS Code، وتحسين مراقبة الموازنات والحماية عند التحويل بين المناطق. هذه التزامات مستقبلية، وليست دليلاً بعد على التنفيذ أو الفاعلية.

يمكن للعميل تقسيم اختبار العودة إلى وظائف منفصلة: قراءة المستودع، واستدعاء API، وتسجيل الدخول الموحد، ومزامنة الفريق، وتنزيل تعريف عام، وتشغيل runner، والحصول على Copilot token. عودة صفحة الويب لا تثبت رجوع كل هذه المسارات معاً.

كما توصي ممارسات REST API باحترام Retry-After ووقت إعادة ضبط الحد وزيادة الانتظار بعد الفشل المتكرر. تتناول الوثيقة تكاملات العملاء ولا تصف منطق الحادث الداخلي، لكنها تؤكد المبدأ نفسه: إعادة المحاولة بلا سقف تحول التأخر إلى طلب إضافي.

المصدر