أعلنت Cloudflare الإتاحة العامة لدعم MySQL في Hyperdrive، وهي خدمة توجّهها إلى مستخدمي Workers لتجميع اتصالات قواعد البيانات وإعادة استخدامها عبر شبكة الشركة. جاء الانتقال من الإصدار التجريبي إلى الإتاحة العامة بعد معالجة نحو 20 خللاً، من بينها مشكلة نادرة في التخزين المؤقت لنتائج الاستعلامات أدت إلى استجابات فارغة رغم توقع وجود بيانات.
كانت المشكلة تظهر بمعدل يقارب 0.001%، ما جعل رصدها عبر سجلات التتبع أمراً صعباً. واكتشفت Cloudflare أن الخلل لا يظهر إلا عند تفعيل التخزين المؤقت، وبعد أن أبلغ عنه العميل الأعلى استخداماً لخدمة MySQL خلال المرحلة التجريبية.
كيف يعمل Hyperdrive؟
يبقي Hyperdrive اتصالات SQL دافئة ومفتوحة على شبكة Cloudflare، ثم يشاركها بين طلبات Workers بدلاً من إنشاء اتصال جديد لكل طلب. كما يستطيع تخزين نتائج الاستعلامات الشائعة في ذاكرة CDN المحلية، الأمر الذي يقلل زمن الوصول والضغط على قاعدة البيانات الأصلية.
تتكون بنية الخدمة من عقدة Client تعمل قرب Worker، وعقدة Endpoint تدير تجمع الاتصالات وتوجد في مركز بيانات قريب من قاعدة البيانات الأصلية. وقد تشترك العقدتان في ذاكرة التخزين المؤقت نفسها عندما تعملان في مركز البيانات ذاته.
الخلل كان في اختلاف صيغة بروتوكول MySQL
تتعامل Hyperdrive مع MySQL من جهتين مختلفتين: فهي تعمل كخادم أمام Worker، وكعميل أمام قاعدة البيانات الأصلية. وبما أن قدرات البروتوكول التي يتفاوض عليها Worker قد تختلف عن القدرات التي تستخدمها Hyperdrive مع قاعدة البيانات، يتعين على الخدمة إعادة صياغة رسائل النتائج لتناسب العميل النهائي.
ركز التحقيق على طريقة إنهاء مجموعات النتائج. فبعض مكتبات MySQL، ومنها مكتبة mysql2 الشائعة في Node.js، لا تدعم قدرة CLIENT_DEPRECATE_EOF. وعند غياب هذه القدرة يستخدم الخادم حزم EOF، بينما يستبدلها سلوك البروتوكول الأحدث بحزمة OK في نهاية مجموعة النتائج.
كانت عقدة Client تخزن أحياناً البايتات بعد ترجمتها لتناسب قدرات Worker، في حين أن عقدة Endpoint تتوقع نسخة معيارية بقدرات Hyperdrive. وعندما تقرأ إحدى العقدتين نتيجة خزنتها الأخرى، قد تتعامل مع الرسائل بصيغة غير مناسبة، ما يؤدي إلى EOF مبكر أو تعليق أو نتيجة فارغة.
ما الذي تغير عملياً؟
أصلحت Cloudflare المشكلة بجعل جميع العقد تكتب إلى الذاكرة المؤقتة نسخة معيارية من نتيجة الاستعلام، مشفرة دائماً وفق قدرات Hyperdrive، بغض النظر عن العقدة التي خزنتها. وبعد طرح الإصلاح، اختفت مشكلة الصفوف الفارغة ووصل معدل نجاح اتصالات Client إلى 99.99%، وفق Cloudflare.
كما عالجت الشركة مشكلات أخرى ظهرت أثناء الاختبار، منها خطأ في ترميز الرموز التعبيرية. فقد كان استخدام utf8 يشير عملياً إلى utf8mb3، الذي لا يدعم جميع نقاط Unicode ذات الأربعة بايتات. وانتقلت الخدمة إلى utf8mb4. كذلك أعادت ضبط الترميز بعد تنفيذ الأمر COM_RESET_CONNECTION، لأن هذا الأمر يعيد الاتصال إلى الإعداد الافتراضي للخادم، والذي قد يكون latin1.
التوفر والقيود
أصبح دعم MySQL متاحاً عموماً اليوم عبر لوحة Cloudflare أو أداة wrangler، ويمكن استخدامه مع قواعد بيانات MySQL المتوافقة، بما في ذلك الاتصال بقاعدة بيانات PlanetScale جديدة. وتوضح الحالة أن تجميع الاتصالات والتخزين المؤقت في طبقة وسيطة لا يعتمد فقط على صحة SQL، بل يتطلب أيضاً تطابقاً دقيقاً بين حالات البروتوكول والصيغة التي تتوقعها كل طبقة.
كيف أعددنا هذا الخبر؟
اعتمد الخبر على المصدر الأصلي الموضح أعلاه. قد نستخدم أدوات آلية للمساعدة في الاستخراج والتصنيف والصياغة،
لكن النشر يخضع لقواعد تمنع المحتوى المكرر والقصير أو الروتيني منخفض القيمة.
اقرأ سياستنا التحريرية.