نظرة معمارية
خريطة شاملة لبنية DCP: الواجهة، الـ API، daemon المزود، ومزامنة البيانات.
بنية المنصة
تعتمد DCP على ثلاث طبقات رئيسية:
- **طبقة التحكم (الويب + API)**
: واجهة Next.js على `dcp.sa` وواجهة Express API على `api.dcp.sa`.
- **طبقة التنفيذ (أجهزة GPU لدى المزودين)**
: برنامج `dc1_daemon.py` يستلم المهام ويشغلها على أجهزة المزود.
- **طبقة البيانات (SQLite + Supabase)**
: SQLite هو مصدر الكتابة الأساسي، ثم تتم مزامنة البيانات إلى Supabase لقراءات أسرع.
تدفق الطلب (مهمة مستأجر)
- المستأجر يرسل المفتاح عبر `x-renter-key` أو `?key=`.
- `POST /api/jobs/submit` ينشئ المهمة ويحجز تكلفة مبدئية (هللة).
- daemon لدى المزود يستطلع `GET /api/providers/:key/jobs`.
- بعد التنفيذ يرسل النتيجة إلى `POST /api/providers/job-result`.
- النظام يسوي الفوترة بنسبة `75%` للمزود و`25%` للمنصة.
- المستأجر يجلب المخرجات من `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.
- عرض الطوابير مقيد حسب الدور للحفاظ على عزل المستأجرين.