نشر المهندس الخطي مفيد أمجد وصفًا تفصيليًا لكيفية إعادة صياغة الشركة لخط التكامل المستمر الخاص بها بعد أن قام وكلاء تشفير الذكاء الاصطناعي بتحويل CI إلى أسوأ عنق الزجاجة - مما أدى إلى خفض وقت انتظار طلب السحب من أكثر من ست دقائق إلى ما يزيد قليلاً عن خمس دقائق بينما تضاعفت مجموعات الاختبار الخاصة بها أربع مرات تقريبًا منذ بداية العام.

بدأ المنشور، الذي نُشر على مدونة Linear الهندسية في 21 سبتمبر، كما تفعل هذه الأشياء غالبًا، بتذكرة مقتضبة من الأعلى. في وقت سابق من هذا العام، افتتح أمجد Linear ليجد أن توماس، مدير التكنولوجيا التنفيذي بالشركة، قد كلفه بمسألة بعنوان "تكاليف CI مرتفعة" - وطلب منه جعل CI أسرع أثناء قيامه بذلك. لمزيد من السياق حول هذه القصة، راجع [تغطية صناعة الذكاء الاصطناعي] المستمرة لدينا (https://aibuzzwire.news).

عندما يتجاوز الوكلاء عملية التحقق من الصحة

فالمشكلة هيكلية وليست عرضية. كتب أمجد: "لقد جعل الوكلاء عملية إرسال التعليمات البرمجية أسرع بشكل كبير، لكن التحقق من صحة هذه التغييرات لم يستمر بنفس المعدل". لا يزال يتعين على كل طلب سحب أن يمر عبر CI، لذلك مع تسارع التطوير، تصبح CI نقطة الاختناق - مما يؤدي إلى ارتفاع تكاليف البنية التحتية وترك المطورين ووكلائهم في انتظار فترة أطول للحصول على التعليقات.

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

ينقسم العمل بشكل عام إلى أربع فئات: ترقية البنية التحتية والأدوات، وتحسين الوظائف التي تربط أعمال أخرى، وتقليل الإعداد المتكرر، وجعل تنفيذ الاختبار أكثر كفاءة. قاعدة التعليمات البرمجية الخاصة بـ Linear هي في المقام الأول TypeScript، ولكن يتم تطبيق العديد من التحسينات عبر اللغات وسلاسل الأدوات.

آلات أسرع ومترجم أصلي

لم تتطلب بعض المكاسب المبكرة تقريبًا أي تحسين لـ CI نفسها. إن نقل أعباء العمل من إجراءات GitHub إلى مشغلي الطرف الثالث مع وحدات المعالجة المركزية (CPU) الأسرع والتخزين العالي الأداء والبنية التحتية الأفضل لذاكرة التخزين المؤقت قد أتى بثماره على الفور: في مقارنة مثل بالمثل بين اليومين على جانبي المحول، تم تشغيل المهام بشكل أسرع بنسبة 34% في المتوسط، مع انخفاض بعض أعباء العمل مثل "tsc" بنسبة 52%.

أدى تحديث سلسلة الأدوات إلى تفاقم الفوز. أدى التبديل إلى `tsgo`، وهو مترجم TypeScript الأصلي، إلى خفض المتوسط ​​الأسبوعي للتحقق من الكتابة بنسبة 73% - وهي نسبة كبيرة بما يكفي لإزالة عنق الزجاجة من عملية التحقق من الكتابة بالكامل.

عملية الفحص بدون الرسم البياني للنوع

كان Linting هدفًا مبكرًا آخر. تعتمد مجموعة من قواعد ESLint المخصصة لـ Linear على معلومات نوع TypeScript، والتي تجبر كل عملية تشغيل للوبر على إنشاء رسم بياني كامل للنوع قبل تقييمها - مما يجعل عملية الفحص واحدة من أكثر وظائف CI التي تستهلك الذاكرة.

أعاد الفريق كتابة القواعد لاستخدام التحليل الثابت عبر شجرة بناء الجملة المجردة، وتحديد البنيات المشابهة للوظيفة وأنماط الحماية دون أي معلومات عن النوع. يسمح ذلك لـ ESLint بإسقاط TypeScript بالكامل، مما يقلل وقت فحص واجهة برمجة التطبيقات (API) بنسبة 68% ووقت فحص المستودع الكامل بنسبة 55%، مع انخفاض استخدام الذاكرة بشكل كبير. كما أنه سهّل عملية الترحيل اللاحقة إلى Oxlint، مما أدى إلى تقليل دقائق عداء CI التي يقضيها في عملية الفحص.

تقليص المسار الحرج

من خلال إجراء عمليات فحص فردية بشكل أسرع، تم تصغير الخط الخطي ومعاملة CI كنظام. وقد لفت ذلك الانتباه إلى الوظائف الصغيرة التي تجلس أمام كل شيء آخر - اكتشاف تغيير المسار وذاكرة التخزين المؤقت لنتائج الاختبار التي تتحقق من تلك البوابة على مستوى الوظيفة، مما يعني أنه لا يمكن لأي جزء من أجزاء اختبار واجهة برمجة التطبيقات الثمانية البدء حتى تنتهي.

كانت الإصلاحات حبيبية ولكنها إضافية. استغرق تحديد عمق الجلب أبطأ بوابة من 94 ثانية إلى 20. أدت إزالة الخروج بالكامل من المهام التي لم تحتاج أبدًا إلى شجرة عاملة إلى خفض هذه المدة من 27 ثانية إلى 7. وقد وفرت عملية الدفع المتناثرة الخالية من البقع ذات التاريخ المحدود 11 ثانية إضافية أخرى لأحداث الدفع وقائمة انتظار الدمج. بشكل إجمالي، انخفض متوسط مدة مهمة الكشف عن التغيير من 26 ثانية إلى 8، وp90 من 31 إلى 12، وأبطأ تشغيل لها من 138 ثانية إلى 37.

كانت موثوقية الدفع بحاجة إلى العمل أيضًا: نظرًا لأن مشغلي الطرف الثالث يجلسون خارج شبكة GitHub ويعتمدون على رابط IP مباشر، فإن تدهور الارتباط المتقطع يؤدي في بعض الأحيان إلى توقف عمليات الجلب. استبدل Linear `actions/checkout` بالإجراء المركب الخاص به الذي يعيد المحاولة مع التراجع، ويضبط `GIT_HTTP_LOW_SPEED_LIMIT` و`GIT_HTTP_LOW_SPEED_TIME` بحيث يتم إحباط الاتصال المتوقف بعد حوالي 30 ثانية بدلاً من تعليقه، ويستخدم ذاكرة تخزين مؤقت للخروج تحافظ على مرآة git مستمرة على قرص ثابت.

أدى أحد الإصلاحات الدقيقة إلى إزالة الوقت الضائع في قائمة انتظار الدمج: تمت كتابة علامات ذاكرة التخزين المؤقت كجزء من الفحص النهائي قبل الدمج، بحيث يمكن للعلاقات العامة البقاء في قائمة الانتظار حتى بعد اجتياز اختباراتها. يؤدي نقل هذه الكتابة إلى مهمة غير بوابة إلى تقليص 42 ثانية من مسار الدمج لكل طلب سحب لواجهة برمجة التطبيقات (API) وإدخال قائمة انتظار الدمج. معًا، استغرقت هذه التغييرات حوالي دقيقة واحدة من عمليات التحقق المطلوبة لـ API PRs عند فقدان ذاكرة التخزين المؤقت مع تقليل عمليات تشغيل العداء.

ثواني ضائعة أقل لكل مهمة

تتكرر تكلفة الإعداد للهجوم على الفئة الأخيرة في كل وظيفة. تستغرق كل قطعة اختبار لواجهة برمجة التطبيقات (API) من 7 إلى 8 ثوانٍ في تثبيت نفس عميل Postgres مع apt في كل تشغيل؛ إن نقلها إلى صورة قاعدة CI صغيرة جنبًا إلى جنب مع Node يعني أن الأجزاء يمكن أن تبدأ جاهزة للتشغيل. أضاف الفريق لاحقًا رؤوس البناء الأصلية إلى الصورة بعد اكتشاف أن تنزيلها أثناء الإعداد قد يتعطل أحيانًا.

لماذا صدى؟

أثار هذا المنشور توترًا لدى المطورين: فقد وصل إلى الصفحة الأولى من Hacker News، حيث اجتذب ما يقرب من 250 نقطة وحوالي 280 تعليقًا في غضون يوم واحد. من السهل تفسير رد الفعل، حيث تشير تجربة Linear إلى تكلفة التطوير بمساعدة الذكاء الاصطناعي التي تواجهها معظم المؤسسات الهندسية في الوقت الحالي فقط. لا يزال الوكلاء الذين يقومون بإنشاء طلبات السحب في دقائق ينتظرون مسارات التحقق المصممة للإيقاع البشري، ويتم مضاعفة كل دقيقة من هذا الانتظار عبر كل وكيل يعمل بالتوازي.

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

---

ابقَ في طليعة الذكاء الاصطناعي

احصل على آخر الأخبار والتحليلات والإنجازات في مجال الذكاء الاصطناعي — كل ذلك في مكان واحد.

اقرأ المزيد من أخبار الذكاء الاصطناعي →