انتقل إلى المحتوى
use-cases / inter-container-ipc-without-the-broker / hero
أنبوب · حاوية إلى حاوية

IPC بين الحاويات بدون وسيط

الخدمة A تُمرّر مخرجاتها إلى مسار. الخدمة B تسحب من المسار نفسه. الأنبوب يوجّه البايتات بين الحاويتين في الزمن الحقيقيّ. لا Redis، لا مجموعة مستهلِكين، لا daemon وسيط لرعايته.

اقرأ توثيق pipe
use-cases / inter-container-ipc-without-the-broker / mechanism

كيف يستبدل الأنبوب الوسيط

فعلَا HTTP ومسار واحد. أيّ طرف يستطيع الاتصال أوّلاً؛ الأنبوب ينتظر حتى خمس دقائق للنظير ثمّ يبثّ البايتات. لا قائمة انتظار، لا offset، لا مجموعة.

01 · مصافحة

أيّ طرف يستطيع الاتصال أوّلاً

المُنتِج غير متّصل؟ المستهلِك يُرسل GET وينتظر. المستهلِك غير متّصل؟ المُنتِج يُرسل PUT وينتظر. الأنبوب يُمسك الاتصال حتى خمس دقائق إلى أن يحضر النظير.

02 · ضغط عكسيّ

اتّصال TCP هو قائمة الانتظار

عندما يكون المستهلِك بطيئاً، يُبطئ النواة بثّ المُنتِج. لا عمق قائمة لمراقبته، لا high-watermark للضبط. المقبس هو المخزن المؤقّت.

03 · بدون حالة

ينسى الرسائل بعد التسليم

المقايضة الصريحة: لا شيء يُحفظ. للقوائم الدائمة، هذا ليس الحلّ. للتفرّع السريع بين الحاويات، الوسيط اختفى للتوّ.

producer.sh · consumer.sh
# الحاوية A — خدمة منتج المرسل إلى الأنبوب
service-a | curl -T - https://api.hoody.com/api/v1/pipe/jobs

# الحاوية B — خدمة المستهلك تقرأ من نفس المسار
curl https://api.hoody.com/api/v1/pipe/jobs | service-b

# أي جانب يستطيع أن يتصل أولاً.
# الأنبوب يحمل الاتصال حتى 5 دقائق
# حتى يصل نظيره، ثم البث خلاله.

PUT (أو POST) يُرسل. GET يستقبل. البايتات لا تهبط على القرص في أيّ مكان — تعبر السلك من المُنتِج إلى المستهلِك مع تمرير الأنبوب لها أثناء الطيران.

use-cases / inter-container-ipc-without-the-broker / fanout

أضف قارئاً ثالثاً. ثمّ رابعاً.

عندما يحتاج logger أو جامع مقاييس نفس الأحداث، ارفع ?n وأضف curl. لا إعداد وسيط، لا مجموعة مستهلِكين، لا سرّ مصادقة لتدويره. القارئ الجديد يوجد فقط.

pipe/jobs · القرّاء?n=4 · تفرُّع كامل
  • + مُضاف
    consumer-aloggermetricsaudit
    curl ?n=4 — ينضمّ إلى التفرّع
  • = ثابت
    producer
    service-a | curl -T - ?n=4
  • − مُزال
    redisconsumer-group.ymlbroker.conf
    لا وسيط، لا إعداد

قارئ بطيء واحد يطبّق ضغطاً عكسيّاً على المُنتِج؛ لا يُعطّل الآخرين. حتى 256 قارئاً لكلّ مسار.

use-cases / inter-container-ipc-without-the-broker / advantages

ما يمنحك إيّاه الرابط ممّا أخذه الوسيط

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

  • لا daemon لتشغيله

    لا شيء للنشر، أو المراقبة، أو الترقية. الأنبوب هو المنصّة؛ الرابط هو الـ API الوحيد.

  • مصادقة Bearer، لا اعتمادات وسيط

    رمز Hoody واحد، مُحدّد بنطاق المشروع. لا اسم مستخدم، أو كلمة مرور، أو ملفّ ACL لكلّ وسيط.

  • نفس السلك، أيّ لغة

    أيّ شيء يتحدّث HTTP يستطيع الإنتاج أو الاستهلاك — bash، Python، Go، هاتف، متصفّح. لا مكتبة عميل.

  • لا حالة محفوظة

    الرسائل تعيش أثناء الطيران، لا في الراحة. لا قرص يمتلئ، لا سياسة احتفاظ، لا سؤال GDPR حول البيانات في القائمة.

  • الضغط العكسيّ هو البروتوكول

    TCP يُبطئ المُنتِج عندما يتأخّر أبطأ مستهلِك. لا لوحات تأخّر لأنّه لا يوجد تأخّر — فقط معدّل البثّ.

  • الحاويات تبقى مُفكَّكة

    المُنتِج والمستهلِك لا يريان IP بعضهما أبداً. يتشاركان رابطاً. انقل أيّاً منهما إلى مضيف آخر دون إعادة توصيل.

use-cases / inter-container-ipc-without-the-broker / punchline

الوسيط هو الرابط. الرابط هو الوسيط.

الطبقة الوسطى تنطوي. ما كان daemon ذا حالة باعتمادات وعملاء ودليل تشغيل صار مساراً. مخطّط البنية فيه صندوق أقلّ.

كان هناك
  • مجموعة redisمصادقة، نسخ متماثلة، failover
  • consumer-group.ymloffsets، أقسام
  • SDK وسيط في كلّ خدمةمكتبة عميل لكلّ لغة
هناك
/api/v1/pipe/jobs

رابط واحد، curl واحد، فعل HTTP واحد

اقرأ توثيق pipe
use-cases / inter-container-ipc-without-the-broker / replaces

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

البنية التحتيّة التي تلجأ إليها الفِرَق عندما تحتاج حاوية أن تسلّم بايتات إلى أخرى. كلّ واحدة تضيف daemon، وإعداداً، ومناوبة on-call. الأنبوب لا يفرض شيئاً من ذلك.

  • Redis pub/subDaemon، مصادقة، عملاء لكلّ لغة
  • RabbitMQمجموعة لتشغيلها لبايتات أثناء الطيران
  • NATSبروتوكول آخر، sidecar آخر
  • ZeroMQمكتبة في كلّ خدمة، لا رابط
  • خوادم توجيه مخصّصةخدمة مفصّلة لإبقائها حيّة
  • خدمات gRPC streamingمخطّط، codegen، تكلفة TLS متبادل
  • وسطاء Apache Kafkaطبقة تخزين لرسائل لا تحتفظ بها
use-cases / inter-container-ipc-without-the-broker / cta

تُقيم Redis للتحدّث بين حاويتين؟ أم تُشارك رابطاً.

اطّلع على pipe API
use-cases / inter-container-ipc-without-the-broker / related

اقرأ الآخرين