
ستون حاوية على خادم واحد
صندوق معادن عارية واحد يشغل عشرات إلى مئات حاويات Hoody. يجعل KSM و BTRFS dedup التكلفة الإضافية قريبة من الصفر.
كلّ ليلة عند الواحدة صباحاً، قيد cron يستدعي بـ curl رابط exec. السكربت يُنفّذ SQL التجميع على رابط sqlite ويكتب الجدول اليوميّ. لا Airflow Postgres، لا ملفّ DAG، لا لوحة مُجدوِل بـ 14 عنصراً، لا مناوب للمُنسِّق نفسه.
SELECT date_trunc('day', created_at) AS d,
count(*) AS n
FROM events
WHERE created_at >= 'today'
GROUP BY 1 -- the whole pipelineاللوحة هي المُنسِّق. رابط واحد. جدول واحد.
خطّ الإنتاج كلّه قيد cron واحد يشير إلى رابط exec واحد. قيد cron هو POST إلى /users/root/entries. رابط exec سكربت صغير يفتح رابط sqlite، يُنفّذ SQL التجميع، ويعيد الصفوف الجديدة. هذا كامل الـ DAG.
// كل ليل بـ 01:00 UTC
POST /users/root/entries
{
"schedule": "0 1 * * *",
"command": "curl -fsS https://exec.containers.hoody.com/scripts/rollup/run"
}// جسم خط الأنابيب بالكامل
import { Database } from "bun:sqlite";
const db = new Database("events.db");
db.run(`INSERT INTO rollup_daily
SELECT date_trunc('day', created_at), count(*)
FROM events GROUP BY 1;`);
return { ok: true, rows: db.query("SELECT * FROM rollup_daily").all() };إن فشل التجميع، تقول سجلّات cron ذلك. إن احتجت تعويض الأمس، تستدعي رابط exec يدويّاً بـ curl مع وسيط تاريخ. لا نظام ثانٍ تتعلّمه، لا قاعدة بيانات مُجدوِل تُبقيها حيّة، لا ملفّ DAG تلتزم به. المُنسِّق قيد cron يشير إلى رابط.
Hoody Kit يشحن المُجدوِل وبيئة التشغيل والتخزين كخدمات HTTP عاديّة. خطّ الإنتاج هو مكالمة curl بينها — لا شيء آخر.
hoody-cron يخزّن الجداول كموارد على /users/root/entries. لا قاعدة بيانات تعريفيّة في Postgres تنسخها احتياطيّاً، لا حاوية مُجدوِل تُبقيها صحّيّة، لا مستودع DAG تنشره. أرسل POST صفّاً، وينطلق التشغيل.
hoody-exec يُنفّذ سكربت التجميع عند الطلب على exec.containers.hoody.com/scripts/rollup/run. cron يستدعيه بـ curl، يحصل على 200، يُسجّل الردّ. لا طابور عامل، لا وسيط، لا رسم بياني مهامّ مُسلسَل.
كلّ مكالمة exec تعيد الصفوف الجديدة بصيغة JSON ويُسجّلها cron مع الحالة والطابع الزمنيّ والـ stdout. التعويضات والإخفاقات وإعادات التشغيل تعيش كلّها في نفس الرابطين — لا شيء إضافيّ تشحنه إلى مُجمّع سجلّات.
خطّ الإنتاج رابطان ومعامل تاريخ. إعادة تشغيل الأمس بنفس الشكل كالتشغيل الليليّ، فقط مع ?date=2026-04-30 على رابط exec. لا واجهة إعادة تشغيل، لا تذمّرات مُجدوِل.
إن أعاد تشغيل الواحدة صباحاً غير 2xx، يعرض سجلّ آخر تشغيل للقيد على hoody-cron رمز الخروج وجسم الردّ المُلتقط. لا خدمة تنبيه منفصلة تُربطها — أرسل GET للقيد واقرأها.
يقبل السكربت معامل تاريخ. أعطه تاريخ الأمس فيُعيد حساب صفّ تجميع ذلك اليوم، ويستبدل المكسور بـ INSERT OR REPLACE. أمر واحد، لا واجهة إعادة تحفيز DAG.
exec يعيد صفّ التجميع المكتوب حديثاً بصيغة JSON. قارنه بما توقّعت ثمّ امضِ. لا شيء آخر تتحقّق منه — رابط اللوحة يقدّم نفس الجدول الذي كتبته للتوّ.
ثلاثة أرقام تصف النظام بأكمله. قارنها بما يبدو عليه نشر Airflow في مستودعك اليوم.
دقيقة، ساعة، يوم من الشهر، شهر، يوم من الأسبوع. هذا كامل سطح الإعداد لمتى ينطلق التشغيل.
POST واحد لتسجيل الجدول، GET واحد يُشغّل السكربت. هذا كامل خطّ الإنتاج القابل للنشر.
لا عمليّة مُجدوِل تُبقيها حيّة، لا قاعدة بيانات تعريفيّة، لا بِركة عمّال. Hoody Kit يحمل الجداول ويُشغّل السكربت.
الأرقام تصف نموذج cron + exec على Hoody Kit. خطّ الإنتاج الحاليّ لديك يحتوي غالباً قطعاً متحرّكة أكثر؛ هذه نقطة المقارنة.
المُنسِّق قيد cron يشير إلى رابط.
طبقة التنسيق تنطوي إلى cron من سطر واحد. الـ DAG يعيش في سكربتك.
كفّ عن تشغيل مُنسِّق. شغّل قيد cron.