عندما يقوم الفرق بعمل تقييم لأداء منصات خالية من الخادم، عادة ما يتحدثون عن الأوقات الباردة كما لو أن كل وظيفة لها نفس الشكل. لكنها ليست كذلك. إن عملية Node.js التي تدير وقت تشغيل أكبر وشجرة اعتماد مختلفة هي آلة مختلفة عن وقت التشغيل المعزول الذي يبدأ بسطح واجهة برمجة أصغر وفروق تكلفة عملية أقل بكثير.
لهذا السبب غالبًا ما تشعر عزل V8 بالسرعة عند الأطراف. إنها لا تستخدم السحر. إنها تبدأ من نموذج أضيق.
لماذا يبدأ عزل V8 بشكل أسرع
يعتبر وقت التشغيل المعزول مناسبًا بشكل أفضل عندما تكون منطق الطلب قصير الأجل وغالبًا ما يكون خفيفًا على وحدة المعالجة المركزية:
- التحقق من الهوية والبوت
- إعادة كتابة العناوين وملفات تعريف الارتباط
- تخصيص A/B
- التوجيه المعتمد على الموقع الجغرافي
- قراءة علم الميزات
يبدو شكل البرمجيات الوسيطة الشائعة كالتالي:
export default async function middleware(request: Request) {
const country = request.headers.get("x-country") ?? "unknown";
const bucket = country === "DE" ? "eu-homepage" : "global-homepage";
return new Response(null, {
status: 307,
headers: {
Location: `/${bucket}`,
},
});
}
تستفيد هذه المنطق من سرعة البدء، والتوزيع العالمي، وانخفاض تكلفة كل طلب. إنها لا تحتاج إلى وحدات Node الأصلية، أو الوصول إلى نظام الملفات المحلي، أو نافذة تنفيذ طويلة.
ما الذي تتخلى عنه
التجارة حقيقية:
- عدد أقل من واجهات برمجة التطبيقات الخاصة بـ Node
- حدود وقت تشغيل أكثر تقييدًا
- تحمل أقل للاعتمادات الثقيلة
- مزيد من الاحتكاك إذا كنت بحاجة إلى وحدات أصلية أو عمل خلفي طويل الأمد
وهذا يعني أن أوقات التشغيل المعزولة ليست بديلاً عالميًا لوظائف الخادم التقليدية. إذا كانت الأحمال تعالج الصور أو تنشئ ملفات PDF أو تستخدم متصفحات بدون واجهة أو تحتاج إلى وصول معقد للبيانات، فإن وقت تشغيل العملية الكامل غالبًا ما يكون مناسبًا بشكل أفضل حتى لو كانت الأوقات الباردة أعلى.
القاعدة العملية
استخدم العزلة عندما يكون الطلب قريبًا من حافة الشبكة وللمنطق التجاري حجم صغير، وحتمي، وحساس للفترات الزمنية. استخدم وقت التشغيل الكامل عندما يحتاج المعالج إلى قدرات منصة أوسع.
الفرق التي تتخذ هذا القرار بشكل جيد عادة ما تتوقف عن السؤال، "أي منصة أسرع؟" وتبدأ في السؤال، "ما هو نموذج التنفيذ الذي يتناسب مع مسار الطلب هذا؟"
قراءة إضافية