2 يوليو 2024
البرمجة اللامركزية (Serverless): التعامل مع قواعد البيانات العلائقية
استخدام الدوال السحابية (مثل AWS Lambda) مع قواعد البيانات العلائقية (مثل PostgreSQL) وكيفية التغلب على مشكلة تجمع الاتصالات (Connection Pooling).
يُعد الحوسبة اللامركزية (Serverless) ثورة في عالم تطوير الخلفيات، حيث تدفع فقط مقابل وقت التشغيل الفعلي. لكن التعامل مع قواعد البيانات العلائقية (Relational Databases) في هذا النمط يواجه تحديًا كبيرًا: **إدارة الاتصالات**.
## مشكلة "الباردة" والاتصالات
في بيئة الخادم التقليدية، يتم الاحتفاظ بمجموعة ثابتة من الاتصالات (Connection Pool) مفتوحة وجاهزة للاستخدام. في Serverless، قد يتم تشغيل مثيل جديد من دالة Lambda لكل طلب، وكل مثيل يحاول فتح اتصال جديد بقاعدة البيانات. هذا يؤدي إلى:
* **إجهاد قاعدة البيانات:** كثرة الاتصالات تستهلك موارد قاعدة البيانات.
* **بطء التشغيل:** يستغرق إنشاء اتصال جديد وقتًا طويلاً، مما يؤدي إلى "بدء تشغيل بارد" أبطأ.
### حلول إدارة الاتصالات
1. **استخدام Prisma Data Proxy:** هذا الخيار المفضل. هو خدمة مدارة تتولى مهمة تجميع الاتصالات وتوجيهها بشكل ذكي إلى قاعدة البيانات، مما يحل المشكلة كليًا دون الحاجة إلى تعديلات كبيرة في الشيفرة.
2. **استخدام AWS RDS Proxy:** خدمة شبيهة توفرها AWS لتجميع اتصالات قواعد بيانات RDS وتعدد إرسالها (multiplexing).
3. **الحفاظ على الاتصال (Keep-Alive):** في بيئات Node.js، محاولة إبقاء كائن `PrismaClient` حيًا ومتاحًا لإعادة استخدامه في نفس المثيل (Container Reuse).
> **ملاحظة أمنية:** تأكد من أن دوال Lambda الخاصة بك والقاعدة البيانية تقعان ضمن شبكة VPC خاصة، ولا تستخدما نقاط نهاية عامة، لضمان أعلى مستويات الأمان.