
ستون حاوية على خادم واحد
صندوق معادن عارية واحد يشغل عشرات إلى مئات حاويات Hoody. يجعل KSM و BTRFS dedup التكلفة الإضافية قريبة من الصفر.
الخدمة A تُمرّر مخرجاتها إلى مسار. الخدمة B تسحب من المسار نفسه. الأنبوب يوجّه البايتات بين الحاويتين في الزمن الحقيقيّ. لا Redis، لا مجموعة مستهلِكين، لا daemon وسيط لرعايته.
POST للدخول. GET للخروج. القفزة الوسيطة هي عنوان URL.
فعلَا HTTP ومسار واحد. أيّ طرف يستطيع الاتصال أوّلاً؛ الأنبوب ينتظر حتى خمس دقائق للنظير ثمّ يبثّ البايتات. لا قائمة انتظار، لا offset، لا مجموعة.
المُنتِج غير متّصل؟ المستهلِك يُرسل GET وينتظر. المستهلِك غير متّصل؟ المُنتِج يُرسل PUT وينتظر. الأنبوب يُمسك الاتصال حتى خمس دقائق إلى أن يحضر النظير.
عندما يكون المستهلِك بطيئاً، يُبطئ النواة بثّ المُنتِج. لا عمق قائمة لمراقبته، لا high-watermark للضبط. المقبس هو المخزن المؤقّت.
المقايضة الصريحة: لا شيء يُحفظ. للقوائم الدائمة، هذا ليس الحلّ. للتفرّع السريع بين الحاويات، الوسيط اختفى للتوّ.
# الحاوية 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 يستقبل. البايتات لا تهبط على القرص في أيّ مكان — تعبر السلك من المُنتِج إلى المستهلِك مع تمرير الأنبوب لها أثناء الطيران.
عندما يحتاج logger أو جامع مقاييس نفس الأحداث، ارفع ?n وأضف curl. لا إعداد وسيط، لا مجموعة مستهلِكين، لا سرّ مصادقة لتدويره. القارئ الجديد يوجد فقط.
قارئ بطيء واحد يطبّق ضغطاً عكسيّاً على المُنتِج؛ لا يُعطّل الآخرين. حتى 256 قارئاً لكلّ مسار.
الوسيط وُجد لأنّ حاويتين لم تستطيعا التحدّث مباشرةً. مع الأنبوب، تستطيعان. كلّ ما أضافه الوسيط — مصادقة، عملاء، عمليّات — يسقط.
لا شيء للنشر، أو المراقبة، أو الترقية. الأنبوب هو المنصّة؛ الرابط هو الـ API الوحيد.
رمز Hoody واحد، مُحدّد بنطاق المشروع. لا اسم مستخدم، أو كلمة مرور، أو ملفّ ACL لكلّ وسيط.
أيّ شيء يتحدّث HTTP يستطيع الإنتاج أو الاستهلاك — bash، Python، Go، هاتف، متصفّح. لا مكتبة عميل.
الرسائل تعيش أثناء الطيران، لا في الراحة. لا قرص يمتلئ، لا سياسة احتفاظ، لا سؤال GDPR حول البيانات في القائمة.
TCP يُبطئ المُنتِج عندما يتأخّر أبطأ مستهلِك. لا لوحات تأخّر لأنّه لا يوجد تأخّر — فقط معدّل البثّ.
المُنتِج والمستهلِك لا يريان IP بعضهما أبداً. يتشاركان رابطاً. انقل أيّاً منهما إلى مضيف آخر دون إعادة توصيل.
الوسيط هو الرابط. الرابط هو الوسيط.
الطبقة الوسطى تنطوي. ما كان daemon ذا حالة باعتمادات وعملاء ودليل تشغيل صار مساراً. مخطّط البنية فيه صندوق أقلّ.
رابط واحد، curl واحد، فعل HTTP واحد
البنية التحتيّة التي تلجأ إليها الفِرَق عندما تحتاج حاوية أن تسلّم بايتات إلى أخرى. كلّ واحدة تضيف daemon، وإعداداً، ومناوبة on-call. الأنبوب لا يفرض شيئاً من ذلك.
تُقيم Redis للتحدّث بين حاويتين؟ أم تُشارك رابطاً.