Bir çağrı nasıl çalışır?
Sınırları, hata kodlarını ve gözlemlediğiniz zamanlamayı açıklamak için tek bir çağrının gözden geçirilmesi.
1. Bir çağrının yolu
Ağ geçidi ve işlevler hizmeti bir mesaj veri yolu üzerinden konuşur. Bu veri yolundaki bir mesajın boyut sınırı vardır, bu nedenle yaklaşık 256 KiB'nin üzerindeki bir istek veya yanıt iletilmez: bkz. sınırları.
2. Çalışma zamanının içinde
- Çağrı başına bir çalışan. Kenar çalışma zamanı, her çağrı için, işlevin bellek sınırı ve zaman aşımı ile birlikte yeni bir yalıtılmış V8 çalışanını başlatır. Bellekteki hiçbir şey bir çağrıdan diğerine hayatta kalmaz: durumu bir değişkende tutmayın. Veritabanınızı veya Depolama alanınızı kullanın.
- Kod birkaç saniyeliğine önbelleğe alınır. Çalışma zamanı, bir işlevin kodunu ve sınırlarını 5 saniye boyunca tutar ve dağıttığınızda bunları bırakır. Değişkenler her çağrıda okunur.
- İsteğiniz yeniden oluşturuldu. Çalışma zamanı tanımladığınız isteği oluşturur (
method,path,headers,body) ve bunuDeno.serveişleyicinize iletir. Bu nedenle bir işlev herhangi bir HTTP sunucusu gibi davranır. - Çalışma zamanı zaman aşımını zorlar.
timeout_secssüresi dolduğunda, çalışanı iptal eder; arayan kişi bu gecikmeden sonra bir hata görür. - WASM işlevleri bellek, zaman ve talimatlarla ilgili sınırlamalarla hizmetin içinde çalışır. Bir WASM işlevi, yanıtın
logsalanında görünen günlük satırlarını raporlayabilir; bir Deno işlevi olamaz.
3. Zarf ve ham mod
Hizmetin, işlevinizin yanıtını döndürmenin X-Aurabase-Invoke-Mode istek başlığı tarafından seçilen iki yolu vardır.
| Zarf (varsayılan) | Ham (raw) | |
|---|---|---|
| HTTP durumu | Her zaman 200 | Fonksiyonun kendi durumu |
| Vücut | { data: { status, headers, body, logs, duration_ms }, meta } | Fonksiyonun baytları |
| İçerik | JSON veya UTF-8 metni | İkili dahil her şey |
| Kullanan | responseType: 'json', Stüdyo | 'text', 'blob', 'arrayBuffer', doğrudan HTTP |
Zarf, bir JSON yanıtının çağrının durumunu, başlıklarını ve süresini taşıyabilmesi için mevcuttur. Sınırı, baytların JSON'da seyahat edememesidir: ikili yanıtın ham moda ihtiyaç duymasının nedeni budur. SDK, modu responseType arasından seçer.
Ham modda hizmet, işlevinizin yanıtlarına x-aurabase-invoke-origin: function ekler. Ağ geçidinden veya çalışma zamanından gelen bir hata onu taşımaz. SDK, FunctionsHttpError'yi (işleviniz yanıtlandı) FunctionsRelayError'den (platform başarısız oldu) bu şekilde ayırır.
4. Zaman, ölçüm ve arızalar
Üç zaman aşımı iç içe yerleştirilmiştir, böylece hiçbiri içindekinden önce bitmez:
Hizmet, timeout_secs artı bir kenar boşluğu için çalışma zamanını bekler. Çalışma zamanı timeout_secs adresindeki çalışanı iptal ettiğinden normalde o anda işlevde bir hata görürsünüz ve yalnızca çalışma zamanının kendisi yanıt vermeyi durdurduğunda 504 TIMEOUT hatasını görürsünüz. Dolayısıyla bir 504, fonksiyonunun başlatıldığı ve etkileri olabileceği anlamına gelir: idempotent olmayan bir çağrıyı körü körüne tekrarlamayın.
Ölçüm ve kota:
- Çağrıdan önce hizmet, plan kotasından bir çağrı ayırır. Kotanın dolması durumunda çağrı burada
403ile durdurulur. - Çağrıdan sonra çağrıyı ve süresini milisaniye cinsinden kaydeder.
- İşleviniz yanıt vermeden çağrı başarısız olursa rezervasyon iptal edilir ve hiçbir şey sayılmaz.
5. Kodunuz için aşağıdakiler
- Her aramayı kısa ve durumsuz tutun. Uzun çalışma için, bir işi kuyruğa alır.
- İstekleri ve yanıtları küçük tutun; dosyaları Depolama alanına koyun ve bir referans iletin.
- İşlevleri bağımsız hale getirin: yeniden denenen bir iş, bir ağ hatasından sonra bir istemcinin yeniden denemesi veya yinelenen bir cron teslimi, kodunuzu iki kez çalıştırabilir.
- Platformun kimlik başlıklarında yetkilendirme yapın çünkü bunlar, arayanın taklit edemeyeceği tek değerlerdir. güvenliği konusuna bakın.
- Kendi gecikme sürenizi ölçün: her çağrı, bir çalışanın işe başlaması için ödeme yapar. Minimal bir işlev, yerel bir yığında
duration_ms: 74bildirdi.