أعلنت Cloudflare إتاحة تنميط استخدام المعالج والذاكرة عند الطلب لخدمات Workers وDurable Objects، بحيث يستطيع المطورون جمع ملفات تعريف من بيئة الإنتاج نفسها وعرضها في صورة مخططات لهب تفاعلية. وتتيح الميزة تحديد الدوال التي تستهلك وقت المعالج أو تخصص أكبر قدر من الذاكرة، بدلاً من الاعتماد على السجلات والمؤشرات الإجمالية وحدها.
يمكن تشغيل التنميط من صفحة Workers Observability في لوحة Cloudflare، أو عبر واجهة سطر الأوامر. ويحدد المطور نوع الملف، CPU أو memory، ومدة الجمع، كما يستطيع اختيار إصدارات مختلفة من Worker. وبعد انتهاء الجلسة، يمكن استعراض المخطط التفاعلي وتنزيل ملف التنميط لتحليله بأدوات أخرى.
ما الذي تعرضه مخططات اللهب؟
يمثل كل مستطيل في المخطط استدعاءً لدالة، بينما يعكس عرضه مقدار وقت المعالج أو الذاكرة المرتبط بها. ويمكن النقر على الدوال لتوسيع التركيز عليها، أو استخدام عرض الجدول لترتيب النتائج وفق عدد العينات. توصي Cloudflare بالتقاط أكثر من ملف والبحث عن الدوال الأوسع، مع تفعيل source maps في مشاريع TypeScript حتى لا تظهر أسماء الدوال بصورة مبهمة.
يتطلب التنميط اختيار نسخة منشورة تتلقى حركة مرور كافية؛ فالخدمة لا تنشئ عزلاً جديداً لغرض القياس، لأن الهدف هو مراقبة التنفيذ الحقيقي في الإنتاج. ويمكن استخدام الأمر التالي لالتقاط ملف CPU مدته خمس ثوانٍ:
cf workers versions profile latest --worker-id "$WORKER_ID_OR_NAME" --duration-ms 5000 --profile-type cpu > worker-cpu.pprof
نتائج عملية عرضتها Cloudflare
استخدمت Cloudflare الأداة لتحليل Worker يطبق ربط R2. أظهر التنميط أن الدالة genericR2JsonReplacer كانت تعيد اجتياز شجرة JSON أثناء تنفيذ JSON.stringify، ما أدى إلى معالجة قيمة متداخلة خمس مرات في بعض الحالات. أدى إصلاح ذلك إلى جعل الدالة أسرع 2.7 مرة. كما كشف التنميط عن استدعاء مكرر لـ metrics، وكان تخزين النتيجة وإعادة استخدامها كافياً لتقليل استهلاك المعالج.
وفي حالة أخرى، كان أحد Workers يتجاوز حد الذاكرة البالغ 128 ميغابايت، إذ بلغ استهلاك P999 نحو 133 ميغابايت وتسبب ذلك في أخطاء “Exceeded Memory”. أظهر ملف heap أن كود Prometheus المسؤول عن نحو 66.7% من التخصيصات كان لا يزال يعمل جزئياً رغم الاعتقاد بأنه معطل. وبعد إزالة مسار الكود بالكامل، انخفض P999 من 133 إلى 118 ميغابايت، بينما تراجع P50 من 70 إلى 54 ميغابايت.
ما الذي يتغير عملياً؟
تمنح الميزة فرق التطوير رؤية مباشرة إلى تنفيذ Workers في ظروفه الفعلية، حيث قد تختلف حركة المرور وتوزيع العُزَل عن بيئة التطوير المحلية. وتتعامل المنصة مع تعقيد توزيع Workers على مراكز بيانات وأجهزة متعددة، بينما يستطيع المطور في Durable Objects تحديد الكائن بالاسم للحصول على ملف للعزل الذي يشغله تحديداً.
تحافظ آلية التنفيذ على استمرار استقبال الطلبات أثناء الجمع؛ إذ يُحتجز قفل العزل فقط عند بدء المنميط وإيقافه، ثم تُجمع عينات CPU بفاصل ميلي ثانية واحدة خلال المدة المحددة. أما Durable Objects فتستفيد من طبيعتها ذات الحالة لتوجيه طلب التنميط إلى العزل والجهة المالكة للكائن المحدد.
القيود والخطوة التالية
لا يبدأ التنميط تلقائياً، ولذلك قد تفوت الجلسة فترات قصيرة أو نادرة يحدث فيها الخلل. كما يعرض منميط الذاكرة التخصيصات التي وقعت خلال نافذة القياس فقط، ولن يلتقط بالضرورة الاستهلاك الناتج عن بدء التشغيل. تقول Cloudflare إنها تعمل على التنميط المستمر، الذي سيجمع العينات تلقائياً ويتيح استعراضها لاحقاً من لوحة التحكم.
كيف أعددنا هذا الخبر؟
اعتمد الخبر على المصدر الأصلي الموضح أعلاه. قد نستخدم أدوات آلية للمساعدة في الاستخراج والتصنيف والصياغة،
لكن النشر يخضع لقواعد تمنع المحتوى المكرر والقصير أو الروتيني منخفض القيمة.
اقرأ سياستنا التحريرية.