Hyperdrive هي خدمة مدارة لتجميع الاتصالات (connection-pooling) تتيح لـ Workers التحدث مباشرة مع قواعد بيانات PostgreSQL – بما في ذلك تلك التي تستخدم ملحق pgvector للبحث باستخدام المتجهات (vector search). من خلال الاحتفاظ بمجموعة قابلة لإعادة الاستخدام من اتصالات قاعدة البيانات بالقرب من الخادم، يقلل Hyperdrive من عبء عملية المصافحة (handshake overhead) الذي أعاق لفترة طويلة أعباء عمل الذكاء الاصطناعي عند الحافة (edge AI workloads).

لماذا يحدث تعارض بين Workers و PostgreSQL

تعمل Cloudflare Workers كـ وظائف JavaScript قصيرة العمر في عشرات المواقع عند الحافة (edge locations). تبدأ كل عملية طلب واردة عملية جديدة، والنمط المعتاد هو فتح اتصال TCP جديد بقاعدة البيانات الخلفية. ومع ذلك، تتوقع PostgreSQL اتصالاً مستقراً لكل عملية عميل وتضع حداً للعدد الإجمالي للاتصالات المتزامنة. والنتيجة هي مشكلتان:

  • تكلفة اتصال عالية – يتطلب إنشاء اتصال عدة رحلات ذهاب وإياب (round trips) للمصادقة والتفاوض على البروتوكول. وتضيف هذه الرحلات زمن انتقال (latency) إلى كل طلب.
  • حدود الاتصال – يمكن لـ Workers التوسع إلى آلاف التنفيذات المتزامنة، مما يؤدي بسرعة إلى استنفاد مجمع اتصالات PostgreSQL واحتمال تعطل قاعدة البيانات.

كيف يسد Hyperdrive هذه الفجوة

يقع Hyperdrive بين Worker وقاعدة البيانات، حيث يحافظ على مجمع من الاتصالات المستمرة على خادم قريب شبكياً من مثيل (instance) PostgreSQL. من وجهة نظر Worker، التغيير الوحيد هو سلسلة اتصال (connection string) جديدة. داخلياً، يعيد البروكسي (proxy) استخدام اتصال موجود لكل استعلام وارد، مما يلغي تكلفة المصافحة (handshake).

الإعداد خفيف الوزن عن قصد:

  1. قم بتشغيل Wrangler CLI (أداة سطر الأوامر من Cloudflare) لإنشاء مثيل Hyperdrive، مع تزويده برابط (URL) قاعدة البيانات الأصلي.
  2. أضف ارتباط Hyperdrive (Hyperdrive binding) الذي تم إنشاؤه إلى ملف التكوين wrangler.toml.
  3. استخدم برنامج تشغيل (driver) متوافقاً مثل node-postgres في كود Worker؛ حيث يرى برنامج التشغيل نقطة نهاية Hyperdrive كخادم PostgreSQL عادي.

بما أن كلمة مرور قاعدة البيانات توجد فقط في تكوين Hyperdrive، فإنها لا تظهر أبداً في كود المصدر الخاص بـ Worker، مما يقلل من سطح الهجوم (attack surface).

تتضمن أعباء عمل البحث باستخدام المتجهات التي تستخدم pgvector مصفوفات أرقام عشرية (floating-point arrays) كبيرة تميل إلى التغير مع كل استعلام. يتضمن السلوك الافتراضي لـ Hyperdrive ذاكرة تخزين مؤقت للقراءة (read cache)، والتي قد تتعارض مع البيانات التي تتغير باستمرار. للحفاظ على حداثة النتائج، قم بإنشاء تكوين Hyperdrive ثانٍ مع تعطيل التخزين المؤقت (caching).

تعد المعاملات (transactions) طويلة الأمد فخاً آخر. إن الاحتفاظ باتصال قاعدة بيانات أثناء انتظار استجابة نموذج ذكاء اصطناعي خارجي يشغل مكاناً في المجمع ويبطل الغرض من تجميع الاتصالات. النمط الموصى به هو:

  • افتح معاملة (transaction).
  • نفذ الاستعلام.
  • قم بالتثبيت (Commit) فوراً.
  • استدعِ نموذج الذكاء الاصطناعي خارج المعاملة.

يمكن إجراء ضبط دقيق لمعلمات pgvector (على سبيل المثال، إعداد hnsw.ef_search الذي يتحكم في دقة البحث) باستخدام جملة SET LOCAL داخل معاملة قصيرة. يضمن ذلك تطبيق التغيير فقط على الاستعلام الحالي ولا يؤثر على الـ Workers الآخرين الذين يتشاركون المجمع.

الحدود التي تظل قائمة

لا يقوم Hyperdrive بنقل قاعدة البيانات نفسها. إذا كان خادم PostgreSQL يقع في منطقة سحابية بعيدة، فسيظل زمن الانتقال (latency) محدوداً بتلك المسافة الفيزيائية. يمكن لميزة "Smart Placement" من Cloudflare المساعدة عن طريق توجيه Workers إلى أقرب عقدة حافة (edge node) تحتوي أيضاً على مثيل Hyperdrive، ولكن لا يمكنها القضاء على رحلة الذهاب والإياب للشبكة الأساسية.

طبقة التخزين المؤقت (caching layer)، رغم فائدتها للقراءات الثابتة، ستفشل في العثور على البيانات (cache miss) بشكل متكرر في بيانات المتجهات التي تتغير مع كل طلب. يحتاج المطورون إلى الموازنة بين نجاح التخزين المؤقت (cache hits) وحداثة نتائج البحث.

متى تختار بديلاً

إذا كان التطبيق يحتاج فقط إلى تخزين متجهات نقي دون عمليات ربط علاقية (relational joins)، توفر Cloudflare خدمة مخصصة تسمى Vectorize. تقوم Vectorize بتخزين المتجهات مباشرة عند الحافة وتزيل الحاجة إلى قاعدة بيانات PostgreSQL خلفية. يظل Hyperdrive هو الخيار الأفضل عندما يجب ربط المتجهات بجداول علاقية موجودة، مثل ملفات تعريف المستخدمين أو سجلات المعاملات.

الخلاصة

يمنح Hyperdrive مطوري الحافة (edge developers) أداة عملية لتشغيل عمليات البحث الشعاعي المدفوعة بالذكاء الاصطناعي دون تجاوز حدود اتصالات PostgreSQL الخاصة بهم. فهو يقلل من زمن انتقال المصافحة، ويوحد بيانات الاعتماد، ويوفر تحكماً دقيقاً في التخزين المؤقت وطول المعاملة. لا تمحو الخدمة المسافة الأساسية بين الحافة وقاعدة البيانات، وتظل حالات فشل التخزين المؤقت (cache-misses) مصدر قلق، ولكن بالنسبة لأعباء العمل التي تتطلب كلاً من الربط العلاقي وتشابه المتجهات، فإن Hyperdrive هو المسار الأكثر مباشرة إلى بنية تحتية (stack) عند الحافة قابلة للتوسع ومنخفضة زمن الانتقال.