نظرة معمارية

خريطة شاملة لبنية DCP: الواجهة، الـ API، daemon المزود، ومزامنة البيانات.

بنية المنصة

تعتمد DCP على ثلاث طبقات رئيسية:

  1. **طبقة التحكم (الويب + API)**

: واجهة Next.js على `dcp.sa` وواجهة Express API على `api.dcp.sa`.

  1. **طبقة التنفيذ (أجهزة GPU لدى المزودين)**

: برنامج `dc1_daemon.py` يستلم المهام ويشغلها على أجهزة المزود.

  1. **طبقة البيانات (SQLite + Supabase)**

: SQLite هو مصدر الكتابة الأساسي، ثم تتم مزامنة البيانات إلى Supabase لقراءات أسرع.

تدفق الطلب (مهمة مستأجر)

  1. المستأجر يرسل المفتاح عبر `x-renter-key` أو `?key=`.
  2. `POST /api/jobs/submit` ينشئ المهمة ويحجز تكلفة مبدئية (هللة).
  3. daemon لدى المزود يستطلع `GET /api/providers/:key/jobs`.
  4. بعد التنفيذ يرسل النتيجة إلى `POST /api/providers/job-result`.
  5. النظام يسوي الفوترة بنسبة `75%` للمزود و`25%` للمنصة.
  6. المستأجر يجلب المخرجات من `GET /api/jobs/:id/output`.

الخدمات الأساسية

  • **واجهة Next.js**: لوحات التحكم، التسجيل، التوثيق، وسوق الـ GPU.
  • **خادم Express**: المصادقة، المسارات، الفوترة، إدارة الطوابير، أدوات الإدارة.
  • **Daemon المزود**: heartbeat كل 30 ثانية، فحوصات الجاهزية، وتنفيذ آمن للمهام.
  • **جسر مزامنة Supabase**: نسخ دوري لبيانات التحليلات والعرض الفوري.

الأمان وحدود الثقة

  • مفاتيح API مقسمة حسب الدور: مزود، مستأجر، مدير.
  • مسارات الإدارة تتطلب `x-admin-token`.
  • مسارات المهام والـ daemon تفرض تحقق الدور وانتقالات الحالة.
  • تنسيق الأخطاء الموحد:
{ "error": "descriptive message" }

ملخص الفوترة

  • العملة: ريال سعودي، والوحدة الداخلية: هللة.
  • حجز مسبق عند إرسال المهمة.
  • تسوية نهائية عند الإكمال/الفشل.
  • توزيع الإيراد: `75%` للمزود و`25%` لـ DCP.

ملاحظات تشغيلية

  • heartbeat كل 30 ثانية يحدد حالات online/stale/offline.
  • حدود المعدل (Rate Limits) وقيود CORS مفعلة على مستوى الـ API.
  • عرض الطوابير مقيد حسب الدور للحفاظ على عزل المستأجرين.

وثائق مرتبطة