انتقل إلى المحتوى
use-cases / push-one-build-to-thirty-ci-workers / hero
PIPE · تفرّع CI

ادفع بناءً واحداً إلى ثلاثين عاملاً في CI دفعة واحدة

مصفوفة الـ CI تتفرّع عبر ثلاثين مُشغِّل اختبار. كل واحد يحتاج نفس الصورة بحجم 800 ميجابايت. بثّ ملف tar إلى مسار أنبوب واحد بـ ?n=30. كل الثلاثين عاملاً يطلبون نفس الرابط بـ curl. البايتات تمرّ مرّة واحدة، الخادم لا يحتفظ بشيء، ولا تُدوَّر بيانات اعتماد سجلّ.

اقرأ توثيق Pipe
use-cases / push-one-build-to-thirty-ci-workers / mechanism

كيف تصبح ثلاثون طلب curl بثّاً واحداً

الأنبوب موجِّه فان-آوت بدون قرص. POST من المرسِل إلى /api/v1/pipe/[path]?n=30 يبقى محصوراً حتى يتّصل ثلاثون مستقبِلاً بنفس الرابط ونفس قيمة n. ثم تتدفّق البايتات من حاوية البناء مباشرةً إلى كل مُشغِّل، في الوقت ذاته، بسرعة أبطأ مستقبِل.

ثلاث خطوات. لا سجلّ، لا S3، لا cache action.PIPE · ?n=30
01

البناء يبثّ مرّة واحدة

tar c | curl -T - https://pipe/.../build?n=30

حاوية البناء تُمرِّر ملف tar مباشرة إلى curl. لا ملف يُكتب، لا سجلّ يُدفع إليه.

02

الأنبوب ينتظر الأسطول

POST /api/v1/pipe/[path]?n=30

الخادم يحتفظ بالمرسِل حتى يتّصل الثلاثون مستقبِلاً. عدم تطابق n يُرجع 400. المستقبِلون المتّصلون مسبقاً مقبولون.

03

الثلاثون يسحبون نفس الرابط

curl https://pipe/.../build?n=30 | tar x

كل مُشغِّل يستقبل بايتات متطابقة. الضغط العكسي يأتي من أبطأ مستقبِل، لا من عرض نطاق المرسِل.

لا شيء يثبت. لا شيء يُخزَّن. الأنبوب يوسّط الاتّصال، ثم يتنحّى جانباً. حين ينتهي أبطأ مُشغِّل، ينتهي النقل — والرابط يختفي.

use-cases / push-one-build-to-thirty-ci-workers / numbers

ما يكلّفه هذا للمصفوفة

بسذاجة: ثلاثون سحبة من السجلّ لنفس ملف tar بحجم 800 ميجابايت، ثلاثون ذاكرة مؤقّتة باردة، ثلاثون رحلة شبكة. مع Pipe: خروج واحد، نقل واحد، أبطأ مستقبِل يضبط الإيقاع.

زمن الجدار

12 ثانية

خروج واحد بسرعة الخط. أبطأ مستقبِل يضبط الإيقاع، لكن لا أحد يُعيد التنزيل.

خروج البيانات

1× / بناء

البايتات تغادر البنّاء مرّة واحدة، تتفرّع عند الأنبوب. لا رسوم S3 GET، لا سحبات Docker Hub.

تخزين

0 بايت

الأنبوب لا يحتفظ بشيء على القرص. لا سجلّ يجب تنظيفه، لا مفتاح ذاكرة مؤقّتة يجب إبطاله.

رقم زمن الجدار يفترض مصفوفة من 30 على نفس الشبكة الإقليميّة لحاوية البناء؛ النقل عبر المناطق محدود بعرض النطاق بين المناطق، لا بالأنبوب.

use-cases / push-one-build-to-thirty-ci-workers / powers

ما يُتيحه التفرّع

حين يصبح البناء رابطاً واحداً وثلاثين طلب curl، تختفي حزمة من سقّالات CI. لا تخزين قطع أثرية يجب تجاوز عمره. لا بيانات اعتماد سجلّ يجب تدويرها. لا cache action يجب تنقيحه.

أبطأ مستقبِل يضبط الإيقاع

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

لا بيانات اعتماد سجلّ يجب تدويرها

لا شيء يُدفع إلى سجلّ، إذاً لا شيء يحتاج المصادقة عليه. الرابط نفسه هو الاعتماد — قصير العمر، محدود بنقلٍ واحد، يُلغى حين ينتهي البناء.

لا فاتورة S3، لا مفاجأة خروج

البايتات تغادر البنّاء مرّة واحدة. الأنبوب يبثّ. تدفع خروجاً واحداً لكل بناء بدلاً من ثلاثين سحبة سجلّ لكل تشغيل مصفوفة.

لا مفتاح ذاكرة مؤقّتة يجب إبطاله

الأنبوب لكل بناء، لا لكل مفتاح. لا توجد ذاكرة GitHub Actions يمكن أن تخطئ، لا لغز طبقة buildx، لا ملف tar قديم من بناء main الأسبوع الماضي.

يصلح لأي ملف tar، لا للصور فقط

النمط نفسه يُعالج node_modules، و.pnpm-store، وtarget/، وذاكرة wheel، وشريحة بيانات. إن كان يُبثّ، فإنّه يتفرّع.

use-cases / push-one-build-to-thirty-ci-workers / punchline

مرسِل واحد. ثلاثون مستقبِلاً. صفر فواتير S3.

دفعة من 30 جهة استغرقت تسعين ثانية وضربةً على S3 صارت تستغرق اثنتي عشرة ثانية وخروجاً واحداً. لا أحد يُعيد التنزيل. لا تُدوَّر بيانات اعتماد سجلّ. الرابط يُلغي نفسه حين تنتهي المصفوفة.

  • خروج 1
  • 30 مستقبِلاً
  • 0 تخزين
  • 0 اعتمادات
افتح Pipe API
use-cases / push-one-build-to-thirty-ci-workers / replaces

ما يستبدله هذا

القطع التي يجب أن يجمعها تدفّق CI مصفوفي عادةً — سجلّ، cache action، مرآة، خطوة رفع مخصّصة. الأنبوب يطويها كلّها في رابط واحد.

  • AWS S3 (تخزين سجلّ + خروج)30× رسوم GET لكل بناء، سياسة طرد، دور IAM
  • ذاكرة GitHub Actionsسقف 10 جيجابايت، تصادمات مفاتيح، نطاق لكل فرع
  • سحبات Docker Hubمحدودة المعدّل، مرآة مدفوعة لتفادي الخنق
  • مرآة سجلّ npm / pnpmVerdaccio مستضاف ذاتياً فقط لتجاوز السجلّ العامّ
  • cache action مخصّص لـ CIلصاقة Bash، SDK لـ S3، منطق انتهاء، مناوبة حين يتعطّل
  • تصدير ذاكرة طبقات Buildxخصائص تنسيق طبقات، إخفاقات ذاكرة عبر المُشغِّلين
use-cases / push-one-build-to-thirty-ci-workers / cta

توقّف عن دفع نفس ملف tar ثلاثين مرّة. ادفعه مرّة واحدة. دع ثلاثين طلب curl يتقاسمون البثّ.

اقرأ Pipe API
use-cases / push-one-build-to-thirty-ci-workers / related

اقرأ الآخرين