كيفية عمل الاستدعاء
جولة عبر مكالمة واحدة لشرح الحدود ورموز الخطأ والتوقيت الذي تراعيه.
1. مسار المكالمة
تتحدث البوابة وخدمة الوظائف عبر ناقل الرسائل. الرسالة الموجودة على هذا الناقل لها حد للحجم، ولهذا السبب لا يمر طلب أو استجابة أعلى من حوالي 256 كيلو بايت: راجع حدود.
2. داخل وقت التشغيل
- عامل واحد لكل مكالمة. يبدأ وقت تشغيل الحافة عامل V8 معزولًا جديدًا لكل استدعاء، مع حد الذاكرة ومهلة الوظيفة. لا شيء في الذاكرة يبقى على قيد الحياة من مكالمة إلى أخرى: لا تحتفظ بالحالة في متغير. استخدم قاعدة البيانات الخاصة بك أو التخزين.
- يتم تخزين الكود مؤقتًا لبضع ثوان. يحتفظ وقت التشغيل بالرمز وحدود الوظيفة لمدة 5 ثوانٍ ويسقطها عند النشر. تتم قراءة المتغيرات في كل مكالمة.
- تمت إعادة بناء طلبك. ينشئ وقت التشغيل الطلب الذي وصفته (
method,path,headers,body) ويسلمه إلى معالجDeno.serveالخاص بك. وبالتالي فإن الوظيفة تتصرف مثل أي خادم HTTP. - يفرض وقت التشغيل المهلة. عند انقضاء
timeout_secs، فإنه يلغي العامل؛ يرى المتصل خطأً بعد هذا التأخير. - تعمل وظائف WASM داخل الخدمة نفسها، مع حدود للذاكرة والوقت والتعليمات. يمكن لوظيفة WASM الإبلاغ عن أسطر السجل، التي تظهر في حقل
logsللاستجابة؛ لا يمكن لوظيفة Deno.
3. المغلف والوضع الخام
لدى الخدمة طريقتان لإرجاع إجابة وظيفتك، والتي يتم اختيارها بواسطة رأس الطلب X-Aurabase-Invoke-Mode.
| المغلف (الافتراضي) | خام (raw) | |
|---|---|---|
| حالة HTTP | دائما 200 | حالة الوظيفة الخاصة |
| الجسم | { data: { status, headers, body, logs, duration_ms }, meta } | بايتات الدالة |
| المحتوى | نص JSON أو UTF-8 | أي شيء، بما في ذلك ثنائي |
| يستخدم من قبل | responseType: 'json'، الاستوديو | 'text', 'blob', 'arrayBuffer', HTTP مباشر |
يوجد المغلف بحيث يمكن لاستجابة JSON واحدة أن تحمل حالة المكالمة ورؤوسها ومدتها. حدها هو أن البايتات لا يمكنها الانتقال في JSON: ولهذا السبب تحتاج الاستجابة الثنائية إلى الوضع الأولي. يختار SDK الوضع من responseType.
في الوضع الأولي تضيف الخدمة x-aurabase-invoke-origin: function إلى إجابات وظيفتك. الخطأ الذي يأتي من البوابة أو وقت التشغيل لا يحمله. هذه هي الطريقة التي يفصل بها SDK FunctionsHttpError (الإجابة على وظيفتك) عن FunctionsRelayError (فشل النظام الأساسي).
4. الوقت والقياس والفشل
يتم دمج ثلاث مهلات بحيث لا تنتهي أي مهلة قبل المهلة الموجودة بداخلها:
تنتظر الخدمة وقت التشغيل لـ timeout_secs بالإضافة إلى هامش. نظرًا لأن وقت التشغيل يلغي العامل عند timeout_secs، فإنك ترى عادةً خطأ من الوظيفة في تلك اللحظة، و504 TIMEOUT فقط إذا توقف وقت التشغيل نفسه عن الاستجابة. وبالتالي فإن 504 يعني أن الوظيفة قد بدأت وربما كان لها تأثيرات: لا تكرر مكالمة غير فعالة بشكل أعمى.
القياس والحصص:
- قبل المكالمة، تحتفظ الخدمة باستدعاء واحد من حصة الخطة. إذا تم استنفاد الحصة، فستتوقف المكالمة هنا مع
403. - بعد المكالمة، يقوم بتسجيل الاستدعاء ومدته بالمللي ثانية.
- إذا فشلت المكالمة قبل أن تجيب وظيفتك، فسيتم تحرير الحجز ولا يتم احتساب أي شيء.
5. ما يلي بالنسبة للتعليمات البرمجية الخاصة بك
- اجعل كل مكالمة قصيرة وعديمة الحالة. للعمل الطويل، أدرج مهمة.
- اجعل الطلبات والاستجابات صغيرة؛ وضع الملفات في التخزين وتمرير مرجع.
- جعل الوظائف غير فعالة: يمكن لإعادة محاولة المهمة، أو إعادة المحاولة للعميل بعد حدوث خطأ في الشبكة، أو تسليم cron مكرر، تشغيل التعليمات البرمجية الخاصة بك مرتين.
- قم بالتفويض على رؤوس هوية النظام الأساسي، لأنها القيم الوحيدة التي لا يستطيع المتصل تزويرها. راجع الأمان.
- قم بقياس زمن الوصول الخاص بك: كل مكالمة تدفع مقابل بداية العامل. تم الإبلاغ عن الحد الأدنى من الوظائف
duration_ms: 74على مكدس محلي.