نظرة عامة على البنية التحتية
تقدم هذه المقالة نظرة شاملة على البنية التحتية التي تدعم موقع Thinvent العام. سنغطي حزمة التكنولوجيا الكاملة، من خادم الويب إلى طبقة قاعدة البيانات، ونشرح كيف تعمل جميع المكونات معًا لتقديم تجربة تجارة إلكترونية سريعة وموثوقة وقابلة للتوسع.
حزمة تطبيق الويب
Flask - الأساس
تم بناء موقعنا على Flask، وهو إطار عمل ويب خفيف الوزن ومرن بلغة Python. يوفر Flask النواة الأساسية للتوجيه، ومعالجة الطلبات/الاستجابات، ونظام المخططات (blueprints) الذي ينظم تطبيقنا إلى مكونات معيارية.
ميزات Flask الرئيسية التي نستخدمها:
-
المخططات (Blueprints): تنظيم التطبيق إلى وحدات منطقية (web, api, cart, product, إلخ.)
-
قوالب Jinja2: توليد HTML من جانب الخادم مع توريث القوالب
-
سياق الطلب (Request context): التعامل التلقائي مع طلبات HTTP والجلسات
-
Werkzeug: خادم التطوير ووظائف الأداة المساعدة
يتم تهيئة تطبيق Flask في وحدة الويب حيث نقوم بما يلي:
-
إنشاء مخطط الويب (web blueprint)
-
تهيئة Babel للتدويل
-
تكوين تخزين جلسات Valkey
-
إعداد معالجات السياق (context processors) لمتغيرات القوالب
Gunicorn - خادم الإنتاج
للإنتاج، نستخدم Gunicorn (Green Unicorn)، وهو خادم HTTP لـ WSGI بلغة Python. يقوم Gunicorn بتشغيل تطبيق Flask الخاص بنا مع عمليات عامل متعددة.
يتم إدارة Gunicorn بواسطة systemd، مما يضمن إعادة تشغيله تلقائيًا في حالة تعطله أو إعادة تشغيل الخادم. وهذا يمنحنا توافرًا عاليًا دون تدخل يدوي.
Nginx - الوكيل العكسي وموزع الحمل
يعمل Nginx كموزع الحمل والوكيل العكسي لدينا. يجلس أمام Gunicorn ويتعامل مع:
-
إنهاء SSL/TLS: تشفير وفك تشفير HTTPS
-
خدمة الملفات الثابتة: ملفات CSS، JavaScript، الصور (يتم تقديمها مباشرة من القرص)
-
الوكيل العكسي: توجيه الطلبات الديناميكية إلى Gunicorn
-
تحديد معدل الطلبات: الحماية من سوء الاستخدام
-
ضغط الطلبات: ضغط Gzip لنقل أسرع
Ubuntu - نظام التشغيل
تعمل جميع مثيلات EC2 على نظام Ubuntu، وهو توزيعة Linux المختارة لدينا. نفضل استخدام حزم Python الخاصة بـ Ubuntu عندما تكون متاحة، بدلاً من pip.
تدفق الطلب النموذجي هو:
flowchart LR
A[متصفح العميل] -->|طلب HTTPS| B[Nginx]
B -->|وكيل إلى| C[Gunicorn]
C -->|WSGI| D[تطبيق Flask]
D -->|استعلام| E[ذاكرة التخزين المؤقت Valkey]
E -->|فقدان (Miss)| F[DynamoDB]
F -->|استجابة| E
E -->|إصابة (Hit)| G[استجابة]
G --> B
B -->|استجابة| ACloudFront - شبكة توصيل المحتوى
CloudFront هو شبكة توصيل المحتوى (CDN) الخاصة بنا، وتوفر:
-
حماية من هجمات DDoS: حماية مدمجة ضد الهجمات الموزعة
-
حماية المصدر (Origin shielding): تحمي خوادمنا الأصلية من طفرات حركة المرور
يحتوي توزيع CloudFront الخاص بنا على مصدرين:
-
خادم الواجهة الخلفية (Backend): تطبيق Flask للواجهة الخلفية
-
S3: دلو S3 للأصول الثابتة
سلوكيات التخزين المؤقت المكونة:
-
/s/*- الأصول الثابتة (CSS، JS، الصور) مع وقت صلاحية (TTL) 24 ساعة -
/ds/*.pdf- أوراق البيانات مع وقت صلاحية (TTL) 24 ساعة -
/api/*- نقاط نهاية API بدون تخزين مؤقت -
/cart- عربة التسوق مع وقت صلاحية (TTL) 24 ساعة -
/set-language- بدون تخزين مؤقت (ديناميكي)
طبقة البيانات
DynamoDB - قاعدة البيانات الأساسية
نستخدم Amazon DynamoDB كقاعدة بياناتنا الأساسية. DynamoDB هي قاعدة بيانات NoSQL.
تشمل جداول DynamoDB الخاصة بنا:
-
التوصيات: توصيات المنتجات التي تم إنشاؤها بواسطة الذكاء الاصطناعي
-
أوصاف المنتجات: أوصاف المنتجات بلغات متعددة
-
صفحات الاستعلام: صفحات الاستعلام المحللة لتحسين محركات البحث (SEO)
نستخدم PynamoDB، وهو ORM بلغة Python لـ DynamoDB، والذي يوفر:
- تعريفات النماذج: فصول Python لجداول قاعدة البيانات
Valkey - ذاكرة التخزين المؤقت في الذاكرة
Valkey (فرع من Redis) هو طبقة ذاكرة التخزين المؤقت في الذاكرة لدينا، ويوفر:
-
تخزين الجلسات: جلسات المستخدم مع انتهاء صلاحية منزلق لمدة 30 يومًا
-
البيانات التي يتم الوصول إليها بشكل متكرر: أعداد المنتجات، الاستعلامات الشائعة
-
ذاكرة التخزين المؤقت للإكمال التلقائي: اقتراحات البحث
-
بيان الصور: مواقع صور المنتج
يوفر Valkey فوائد أداء كبيرة:
-
أسرع بمقدار 100 مرة من DynamoDB لعمليات القراءة
-
تقليل الحمل على قاعدة البيانات: عمليات إصابة ذاكرة التخزين المؤقت تتجنب استعلامات DynamoDB
-
استمرارية الجلسة: جلسات مدعومة بـ Valkey عبر الطلبات
نستخدم Valkey من أجل:
-
الجلسات: حالة تسجيل دخول المستخدم، بيانات عربة التسوق
-
التخزين المؤقت: الاستعلامات الشائعة، اقتراحات الإكمال التلقائي
-
العدادات: أعداد مخزون المنتجات (مخزنة مؤقتًا للأداء)
-
قوائم الانتظار: معالجة المهام في الخلفية
S3 - تخزين الكائنات
Amazon S3 هي خدمة تخزين الكائنات الخاصة بنا.
نستخدم S3 من أجل:
-
صور المنتجات: صور المنتجات عالية الدقة
-
أوراق البيانات: مواصفات المنتجات بصيغة PDF
-
الأصول الثابتة: ملفات CSS، JS، الصور
نظام أسماء النطاقات (DNS) والتوجيه
Route53 - إدارة النطاقات
يتعامل Route53 مع إدارة DNS الخاصة بنا:
- تسجيل النطاق: thinvent.in والنطاقات ذات الصلة
توجيه Nginx
يقوم Nginx بتوجيه الطلبات بناءً على أنماط URL:
-
/→ تطبيق Flask (الصفحة الرئيسية، المنتجات، عربة التسوق، الدفع) -
/q/→ تطبيق Flask (صفحات الاستعلام، نتائج البحث) -
/api/→ تطبيق Flask (نقاط نهاية API) -
/static/→ CloudFront/S3 (الأصول الثابتة)
البنية التحتية للبحث والذكاء الاصطناعي
خدمة البحث
نقوم بتشغيل تطبيق Flask مستقل لوظيفة البحث. توفر هذه الخدمة:
-
بحث المتجهات: التشابه الدلالي للاستعلامات ذات الصلة
-
الإكمال التلقائي: اقتراحات البحث القائمة على البادئة
-
الاستعلامات الشائعة: أكثر المصطلحات التي يتم البحث عنها
-
استخراج عوامل التصفية: تحليل استعلامات البحث للحصول على الجوانب (facets)
تستخدم خدمة البحث:
-
Valkey RediSearch: بحث تشابه المتجهات
-
SentenceTransformer: توليد التضمينات (embeddings)
-
تعيينات العبارات: استخراج عوامل التصفية عبر مطابقة السلاسل الجزئية
مزودو الذكاء الاصطناعي
نستخدم عدة مزودين للذكاء الاصطناعي لمهام مختلفة:
DeepSeek
-
النموذج: deepseek-chat
-
حالات الاستخدام: أوصاف المنتجات، محتوى صفحات الاستعلام، الترجمة
-
API: واجهة برمجة تطبيقات DeepSeek مع Together.ai كبديل احتياطي
-
التخزين المؤقت: مطالبات النظام (System prompts) لكفاءة تخزين المطالبات مؤقتًا
Gemini
-
النموذج: Gemini (نموذج محدد)
-
حالات الاستخدام: توليد المحتوى
-
التكامل: مكالمات API مباشرة
Amazon Bedrock
-
النماذج: Nova Pro
-
حالات الاستخدام: الدردشة الداخلية
-
التكامل: boto3 SDK
Amazon Bedrock
-
النماذج: Nova Lite
-
حالات الاستخدام: روبوت المحادثة للعملاء
-
التكامل: boto3 SDK
تدفق الطلب الكامل
إليك كيف يتدفق الطلب النموذجي عبر بنيتنا التحتية:
flowchart TD
A[متصفح العميل] -->|استعلام DNS| B[Route53]
B -->|عنوان IP| C[CloudFront]
C -->|فحص ذاكرة التخزين المؤقت| D{هل هناك إصابة في ذاكرة التخزين المؤقت؟}
D -->|نعم| E[إرجاع المحتوى المخزن مؤقتًا]
D -->|لا| F[Nginx]
F -->|وكيل| G[Gunicorn]
G -->|WSGI| H[تطبيق Flask]
H -->|فحص ذاكرة التخزين المؤقت| I[Valkey]
I -->|إصابة| J[إرجاع البيانات المخزنة مؤقتًا]
I -->|فقدان| K[DynamoDB]
K -->|استعلام| L[إرجاع البيانات]
L --> I
J --> M[بناء الاستجابة]
E --> M
M --> N[إرسال إلى العميل]المراقبة والصحة
UptimeRobot - المراقبة الخارجية
نستخدم UptimeRobot للمراقبة الخارجية لجميع نقاط النهاية المتاحة للجمهور:
-
خادم الواجهة الخلفية: موقع الويب الخلفي
-
www.thinvent.in: موقع الويب العام
فحوصات الصحة
-
Gunicorn: systemd يدير عمليات إعادة التشغيل
-
Flask: نقطة النهاية
/healthتُرجع الحالة -
Valkey: يتم مراقبة صحة الاتصال
-
DynamoDB: يتم مراقبة زمن الوضع والإنتاجية
التسجيل (Logging)
-
سجلات التطبيق: Gunicorn error.log
-
سجلات الوصول: Gunicorn access.log
-
البريد الإلكتروني: إشعارات فورية للأحداث الحرجة مع تتبع Python
الملخص
تم تصميم بنيتنا التحتية من أجل:
-
الأداء: طبقات تخزين مؤقت متعددة، CDN، استعلامات محسنة
-
القدرة على التوسع: قواعد بيانات ذات توسع تلقائي، موازنة الحمل
-
الفعالية من حيث التكلفة: الدفع مقابل الاستخدام، التخزين المؤقت لتقليل حمل قاعدة البيانات
يوفر مزيج Flask وGunicorn وNginx وUbuntu وDynamoDB وValkey وCloudFront وUptimeRobot أساسًا قويًا وقابلًا للتوسع لمنصة التجارة الإلكترونية الخاصة بنا.
مقالات ذات صلة
-
بنية التحليلات - تعرف على نهجنا الهجين للتحليلات
-
خط أنابيب تحسين محركات البحث (SEO) - افهم كيف تتحول استعلامات البحث إلى صفحات منتجات
-
بنية خدمة البحث - تعمق في بنية البحث الخاصة بنا
-
استراتيجية التخزين المؤقت - استكشف التخزين المؤقت في جميع الطبقات
-
بنية النشر - شاهد كيف يتم نشر النظام
-
اعتبارات الأمان - راجع إجراءات الأمان