نظرة تحت الغطاء: تصميم البنية القابلة للتوسع لـ Rabetly
مع تزايد حركة المرور وتعقيد أنماط الاستخدام، يجب أن تكون خدمة تقصير الروابط متينة وعالية الأداء وسهلة الصيانة. في هذا المقال، نفصّل مكوّنات Rabetly الرئيسية التي تحافظ على كفاءتها عند التوسع.
1. Nginx على الحافة
- نقطة دخول موحدة: HTTP لملفات robots.txt و sitemap.xml، وHTTPS (443) للمستخدمين.
- توجيه حسب النطاق: ملفات ثابتة ↔ واجهة Ember ↔ خدمة إعادة التوجيه.
- الأمان: شهادات Let’s Encrypt تتجدد تلقائيًا عبر ACME DNS-01.
2. Gunicorn و Django
- ٣ عمليات عامل لكل خادم، متصلة بمقبس UNIX.
--capture-outputيرسل جميع الأخطاء إلى/var/log/gunicorn/error.log.- systemd يضمن إعادة التشغيل التلقائي وجمع السجلات.
3. Celery و RabbitMQ
- مهام إثراء بيانات النقر، البحث الجغرافي، وتنبيهات البريد.
- Redis لتخزين حالات المهام وإعادة المحاولة الآمنة.
4. تحليلات عالية الحجم بـ Kafka و TimescaleDB
- أحداث النقر الخام → مواضيع Kafka → جداول PostgreSQL مُجزأة.
- المقاييس المجمعة في TimescaleDB باستعلامات أقل من 100 مل ثانية.
- أرشفة الأجزاء القديمة إلى S3.
5. النطاقات المخصصة وأتمتة SSL
عند إضافة نطاق عميل جديد، يتم التحقق عبر Cloudflare API وإعادة تحميل Nginx بسلاسة دون توقف.
6. المراقبة والتنبيه
- Prometheus يجمع المقاييس، وGrafana تعرضها.
- Alertmanager يرسل تنبيهات عند ارتفاع أخطاء 5xx.
- ELK يدمج سجلات Nginx وGunicorn وCelery للتتبع.
تابعونا في الجزء الثاني حول تحسين مخطط قاعدة البيانات وتعزيز الأمان.