انتقل إلى المحتوى
النوعإمكان جديد
المرحلةأسطول
مستوى الصعوبةمتوسط
المهمةSaaS متعدد المستأجرين
لـفرق التطوير
لـمطورو الواجهة الخلفية
الخدماتCron
الخدماتالحاويات
لماذا Hoodyاقتصاديات الحاوية
لماذا Hoodyعزل المعدن العاري
لماذا Hoodyأصيل لـ HTTP
الصناعةSaaS
النوعإمكان جديد
المرحلةأسطول
مستوى الصعوبةمتوسط
المهمةSaaS متعدد المستأجرين
لـفرق التطوير
لـمطورو الواجهة الخلفية
الخدماتCron
الخدماتالحاويات
لماذا Hoodyاقتصاديات الحاوية
لماذا Hoodyعزل المعدن العاري
لماذا Hoodyأصيل لـ HTTP
الصناعةSaaS
النوعإمكان جديد
المرحلةأسطول
مستوى الصعوبةمتوسط
المهمةSaaS متعدد المستأجرين
لـفرق التطوير
لـمطورو الواجهة الخلفية
الخدماتCron
الخدماتالحاويات
لماذا Hoodyاقتصاديات الحاوية
لماذا Hoodyعزل المعدن العاري
لماذا Hoodyأصيل لـ HTTP
الصناعةSaaS
النوعإمكان جديد
المرحلةأسطول
مستوى الصعوبةمتوسط
المهمةSaaS متعدد المستأجرين
لـفرق التطوير
لـمطورو الواجهة الخلفية
الخدماتCron
الخدماتالحاويات
لماذا Hoodyاقتصاديات الحاوية
لماذا Hoodyعزل المعدن العاري
لماذا Hoodyأصيل لـ HTTP
الصناعةSaaS
SaaS متعدّد المستأجرين / جدولة لكل عميل

crontab منفصل لكلّ عميل، تلقائياً

تتيح SaaS الخاصّة بك لكلّ عميل جدولة توليد تقاريره. التصميم الساذج: مُجدوِل واحد مشترك، معرّف العميل في حمولة المهمّة، أصابع متشابكة لئلّا يجوّع أحدهم الآخر. تصميم Hoody يمنح كلّ مستأجر حاويته الخاصّة وخدمة hoody-cron الخاصّة به.

اقرأ التوثيق

ثلاث حالات لدورة الحياة، واجهة HTTP API واحدة. PROVISION يضيف الإدخالات، نبضات cron تشغّلها، DELETE يعلِّقها. cron كل مستأجر يعيش داخل حاويته الخاصة — لا قائمة انتظار مشتركة، لا خطر جار مزعج.

مكالمة PUT واحدة تُهيّئ crontab المستأجر بالكامل

كلّ حاوية عميل تكشف API الـ HTTP لـ hoody-cron. لتحديد جدوله، تستبدل crontab بـ PUT واحد. لا طابور مشترك، لا مسار أولويّة، لا إعداد مُجدوِل تعيد نشره.

POST إدخال مُدار — ينشئ مهمة cron مع UUID وحالة enabled وحقل schedule_human مقروء.POST /تجهيز
request
# POST managed entry for acme-corp tenant
POST acme-cron.hoody.com/users/root/entries
Content-Type: application/json

{
  "schedule": "0 9 * * *",
  "command": "/usr/local/bin/digest.sh",
  "comment": "daily digest",
  "enabled": true
}
response
HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": "7d3f2a1b-8c4e-4f9a-b2d5",
  "schedule": "0 9 * * *",
  "schedule_human": "At 09:00",
  "enabled": true,
  "user": "root"
}
201 Created. يُعاد معرّف الإدخال لاستخدامه لاحقاً مع PATCH أو DELETE. يؤكد schedule_human أن التعبير قد تم تحليله بشكل صحيح.

تستبدل النقطة crontab بأكمله ذرّيّاً. تُعاد القيود المحذوفة في الردّ ليتمكّن مستوى التحكّم لديك من تدقيق الانحراف. cron كلّ مستأجر يعيش داخل حاويته الخاصّة؛ لا شيء من جدول acme-corp مرئيّ لـ globex-saas، ومهمّة هاربة في حاوية لا يمكنها تجويع المُجدوِل في أخرى.

ما تفتحه crontabs المرتبطة بالحاوية

ثلاث خصائص تنبثق من التصميم مجّاناً، لأنّ العزل هو الأساس، لا ميزة كتبتها.

تفصيل فوترة الأسطولالتكلفة لكل مستأجر = الخادم مقسوماً على المستأجرين
مستأجروك
acme-corpSM
globex-saasMD
initech-incLG
+ 57 إضافي
خادم بسعر ثابت / شهر$29خادم bare-metal واحد. 60 حاوية. الفاتورة تبقى ثابتة.
÷المستأجرون
تكلفة المستأجر<$0.49تنخفض كلما زاد عدد المستأجرين

تختفي حوادث الجار المزعج

حين يتعطل scrape.js الخاص بـ initech-inc، يُطلق ملخّص acme-corp في الساعة التاسعة صباحاً كالعادة. crontabs مختلفة، شجرات عمليات مختلفة، أنظمة ملفات مختلفة.

تغييرات الجدولة تنتشر فوراً

POST إدخال جديد فيلتقطه خدمة hoody-cron الخاصة بالمستأجر فوراً. لا مجدول مركزي لإعادة تحميله، لا بث للإرسال.

سجلات لكل مستأجر، حاوية واحدة

حين يسأل globex-saas لماذا تشغّل ملخّصهم لسادسة مساءً مرتين، تقرأ سجل حاوية واحدة — لا grep مشترك عبر جدول مركزي على تسع آلات.

مُجدوِل مشترك مقابل crontab مرتبط بالحاوية

ثلاثة محاور يفرض فيها التصميم القديم ضرائب على فريقك، ولا يفعل تصميم Hoody.

المحورمُجدوِل مشتركمرتبط بالحاوية
العزل
tenant_id في حمل المهمةصفّ سيّئ واحد، طابور كلّ مستأجر يُحجَب
Separate /etc/crontab per containerالعَلَقات محلّيّة. دائماً.
التهيئة
INSERT INTO scheduled_jobsاقتران ترحيلات، قفل مخطّط
PUT /users/root/crontabمكالمة HTTP واحدة، استبدال ذرّيّ
التدقيق
grep tenant_id=42 logs/*9 أجهزة، ملفّ سجلّ واحد لكلّ منها
GET ctr_8a3f1c/cron/logحاوية واحدة، سجلّ واحد، حقيقة واحدة

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

السعة عند الأطراف

ما يفعله صندوق معدن عارٍ واحد من Hoody حين يحصل كلّ عميل على crontab الخاصّ به.

  1. مستأجرون لكلّ صندوق60

    ستّون حاوية عميل على عقدة معدن عارٍ واحدة، لكلّ منها خدمة hoody-cron تعمل. لا مُجدوِل مشترك يُشكّل عنق الزجاجة.

  2. انتشار الجدول<1s

    من طلب PUT حتى أوّل نبضة من الجدول الجديد، مُلاحظة عبر أسطول من 60 حاوية على عقدة 64-core نموذجيّة.

  3. طوابير عابرة للمستأجرين0

    حرفيّاً لا يوجد طابور مشترك أو مسار أولويّة أو خيط مُجدوِل يتنافس عليه مستأجران. العزل هو الأساس.

أرقام السعة قيم نموذجيّة مُلاحظة على عقدة معدن عارٍ 64-core / 256GB تعمل بكثافة حاويات Hoody القياسيّة. السعة الفعليّة تتوقّف على ميزانيّات CPU والذاكرة لكلّ مستأجر وعلى ما تفعله كلّ مهمّة cron. الصفر في الطوابير العابرة للمستأجرين بنيويّ، ليس قياساً.

cron عميل لا يستطيع تجويع cron عميل آخر لأنّهما ليسا على نفس crontab.

قبل / مُجدوِل مشتركبعد / مرتبط بالحاوية
مشتركscheduled_jobs WHERE tenant_id = 42صفّ واحد في جدول يقرأ منه الجميع
لكلّ مستأجرPUT acme-cron.hoody.com/users/root/crontabمكالمة HTTP واحدة، حاوية واحدة، crontab واحد
اقرأ API الـ cron

ما يحلّ محلّه

البِنى التي تشيّدها الفرق لمشاركة crontab واحد بين المستأجرين. Hoody يضع كلّ مستأجر في crontab الخاصّ به — لا موجّه، لا طابور إنصاف، لا جار مزعج.

  • crontabs متعدّدة المستأجرين مشتركةتعبير regex سيّئ يجوّع 400 عميل
  • عزل مستأجرين مخصّصمُجدوِل بـ tenant_id على كلّ صفّ
  • Postgres pg_cronمرتبط بقاعدة البيانات؛ ترقية واحدة وينكسر الجميع
  • Quartz scheduler مع مرشّحاتJVM وطابور مُجزّأ لكلّ منطقة
  • طوابير المستأجرين في Sidekiqاثنا عشر طابوراً، اثنا عشر ملفّ إعداد
  • Kubernetes CronJobs لكلّ مستأجرnamespace، دور RBAC، YAML، مناوب

كفّ عن كتابة tenant_id في كلّ مكان. امنح كلّ عميل حاويته الخاصّة ودع cron يفعل ما يفعله cron دائماً، في عزلة.

اقرأ التوثيق

اقرأ حالات أخرى