Bu belgede, Çevik yaklaşımın tasarımı, uygulanması, test edilmesi Cloud Functions'ı dağıtmanızı sağlar.
Doğruluk
Bu bölümde, tasarım ve uygulamaya ilişkin genel en iyi uygulamalar Cloud Functions.
Iempotent fonksiyonlar yazma
Fonksiyonlarınız, birden çok çağrılsa bile aynı sonucu üretmelidir. kez. Bu sayede, önceki çağrı başarısız olursa çağrıyı yeniden deneyebilirsiniz. öğrenmeniz gerekir. Daha fazla bilgi için bkz. etkinliğe dayalı işlevleri yeniden deneyin.
Arka plan etkinlikleri başlatma
Arka plan etkinliği, işleviniz sonlandırıldıktan sonra gerçekleşen her şeydir.
İşlev geri döndüğünde veya başka bir şekilde sinyal verdiğinde işlev çağrısı biter
Örneğin, Node.js etkinliğe dayalı callback
bağımsız değişkenini çağırarak tamamlama
işlevlerine dahildir. Kontrollü sonlandırmadan sonra çalıştırılan kodlar CPU'ya erişemez ve
herhangi bir ilerleme kaydetmeyecek.
Ayrıca aynı ortamda sonraki bir çağrı yürütüldüğünde
arka plan etkinliğiniz devam eder ve yeni çağrıyı engeller. Bu,
beklenmedik davranışlara ve teşhis edilmesi zor hatalara neden olabilir. Erişme
bir işlev sona erdikten sonra ağ, genellikle bağlantıların sıfırlanmasına yol açar
(ECONNRESET
hata kodu).
Arka plan etkinliği genellikle bağımsız çağrılarla günlüklerde algılanabilir. şunu söyleyen satırdan sonra günlüğe kaydedilen herhangi bir şeyi bularak tamamlandı. Arka plan etkinliği bazen kodun daha derinlerine gömülebilir. özellikle de geri çağırma veya zamanlayıcı gibi eşzamansız işlemler bulunduğunda. Kopyalamadan önce tüm eşzamansız işlemlerin tamamlandığından emin olmak için kodunuzu inceleyin. fonksiyonu sonlandırın.
Geçici dosyaları her zaman sil
Geçici dizindeki yerel disk depolama alanı, bellek içi dosya sistemidir. Dosyalar depoladığınız yerler, işlevinizin kullanabileceği belleği tüketir ve bazen çağrılır. Bu dosyaların açıkça silinmemesi, bellek dolması hatasına ve bunun sonucunda baştan başlatmaya yol açabilir.
Tek bir işlev tarafından kullanılan belleği işlev listesini Google Cloud Console'da Bellek kullanımı grafiğini seçin.
Geçici dizinin dışına yazmaya çalışmayın ve Dosya yolları oluşturmak için platformdan/işletim sisteminden bağımsız yöntemler.
Ardışık düzen kullanarak daha büyük dosyaları işlerken bellek gereksinimlerini azaltabilirsiniz. Örneğin, okuma akışı oluşturarak Cloud Storage'da bir dosyayı işleyebilir. akış tabanlı bir süreçten geçirme ve çıkış akışı yazma doğrudan Cloud Storage'a aktarabilir.
Functions Framework
Bir işlev dağıttığınızda, Functions Çerçevesi otomatik olarak bağımlılığından bahsedeceğiz. Aynı bağımlılıkların farklı ortamlarda tutarlı olarak yüklü olduğundan, işlevinizi Functions Çerçevesi'nin belirli bir sürümüne sabitlediğinizden emin olun.
Bunu yapmak için, tercih ettiğiniz sürümü ilgili kilit dosyasına ekleyin
(örneğin, Node.js için package-lock.json
veya Python için requirements.txt
).
Araçlar
Bu bölümde uygulama, test ve kontrol araçlarının nasıl kullanılacağı Cloud Functions ile etkileşime geçin.
Yerel gelişim
İşlev dağıtımı biraz zaman aldığından kodu test etmek genellikle daha hızlıdır yerel olarak ayarlayabilirsiniz.
Firebase geliştiricileri, Firebase CLI Cloud Functions Emülatörü.E-posta göndermek için Sendgrid'i kullanma
Cloud Functions, bağlantı noktası 25 üzerinde giden bağlantılara izin vermediğinden şunları yapamazsınız: SMTP sunucusuna güvenli olmayan bağlantılar kurma. İletinizi göndermek için önerilen yöntem SendGrid'i kullanmaktır. Diğer seçenekleri e-posta gönderdiğiniz için Örnekten E-posta Gönderme Google Compute Engine eğiticisi.
Performans
Bu bölümde, performansı optimize etmeye yönelik en iyi uygulamalar açıklanmaktadır.
Bağımlılıkları akıllıca kullanın
İşlevler durum bilgisiz olduğundan yürütme ortamı genellikle başlatılır. en baştan (baştan başlatma olarak bilinen süre içinde). Soğuk başlatma gerçekleştiğinde fonksiyonun genel bağlamı değerlendirilir.
Fonksiyonlarınız modülleri içe aktarıyorsa, bu modüllerin yükleme süresi baştan başlatma sırasında çağrı gecikmesi. Bu gecikmeyi kendiniz de bağımlılıkları doğru yükleyerek ve oluşturarak işlevinizi dağıtmak için kullanmadığı bağımlılıkları yüklemez.
Gelecekteki çağrılarda nesneleri yeniden kullanmak için global değişkenler kullanma
Cloud Functions işlevinin durumunun çağrılır. Ancak Cloud Functions, yürütme sürecini genellikle geri dönüştürür. ortamına ekleyebilirsiniz. Global kapsamda bir değişken bildirirseniz gerek kalmadan sonraki çağrılarda yeniden kullanılabilir. yeniden hesaplandı.
Bu şekilde, her bir sistemde yeniden oluşturulması pahalı olabilecek nesneleri işlev çağrısı. Bu tür nesneleri işlev gövdesinden global kapsama taşıma önemli performans artışları sağlayabilir. Aşağıdaki örnek her işlev örneği için yalnızca bir kez ağır bir nesne oluşturur ve bunu tüm belirtilen örneğe ulaşan işlev çağrıları:
Node.js
console.log('Global scope'); const perInstance = heavyComputation(); const functions = require('firebase-functions'); exports.function = functions.https.onRequest((req, res) => { console.log('Function invocation'); const perFunction = lightweightComputation(); res.send(`Per instance: ${perInstance}, per function: ${perFunction}`); });
Python
import time from firebase_functions import https_fn # Placeholder def heavy_computation(): return time.time() # Placeholder def light_computation(): return time.time() # Global (instance-wide) scope # This computation runs at instance cold-start instance_var = heavy_computation() @https_fn.on_request() def scope_demo(request): # Per-function scope # This computation runs every time this function is called function_var = light_computation() return https_fn.Response(f"Instance: {instance_var}; function: {function_var}")
Bu HTTP işlevi, bir istek nesnesini (flask.Request
) alır ve
veya yanıt metnine dönüştürülebilecek herhangi bir değer kümesi
Response
nesne kullanılıyor
make_response
.
Özellikle ağ bağlantılarını, kitaplık referanslarını, ve API istemci nesnelerini kapsar. Örnekler için Ağ İletişimini Optimize Etme bölümüne bakın.
Genel değişkenlerin geç ilk kullanıma hazırlanması
Global kapsamdaki değişkenleri başlatırsanız başlatma kodu her zaman
işlevinizin gecikmesini artırarak baştan başlatma çağrısıyla yürütülür.
Bazı durumlarda bu, çağrılan hizmetlerin zaman aşımına uğramasına neden olur.
try
/catch
blokunda uygun şekilde işlenmezse. Eğer
bazı nesneler tüm kod yollarında kullanılmıyor. Bunları geç başlatmanızı öneririz
isteğe bağlı:
Node.js
const functions = require('firebase-functions'); let myCostlyVariable; exports.function = functions.https.onRequest((req, res) => { doUsualWork(); if(unlikelyCondition()){ myCostlyVariable = myCostlyVariable || buildCostlyVariable(); } res.status(200).send('OK'); });
Python
from firebase_functions import https_fn # Always initialized (at cold-start) non_lazy_global = file_wide_computation() # Declared at cold-start, but only initialized if/when the function executes lazy_global = None @https_fn.on_request() def lazy_globals(request): global lazy_global, non_lazy_global # This value is initialized only if (and when) the function is called if not lazy_global: lazy_global = function_specific_computation() return https_fn.Response(f"Lazy: {lazy_global}, non-lazy: {non_lazy_global}.")
Bu HTTP işlevi, geç başlatılan genel değerleri kullanır. Bir istek nesnesini alır
(flask.Request
) gibi bir komut alır ve yanıt metnini ya da
dönüştürülebilir ve Response
nesnesine dönüştürülebilir.
make_response
.
Bu, özellikle tek bir dosyada birden fazla işlev tanımlarsanız ve farklı işlevler farklı değişkenler kullanır. Tembel kullanmadıkça yoksa ilk kullanıma hazır hale getirilmiş değişkenler için de kaynak israf edebilirsiniz hiç kullanılmadı.
Minimum örnek sayısı ayarlayarak baştan başlatma sayısını azaltın
Varsayılan olarak Cloud Functions, örnek sayısını şuna göre ölçeklendirir: gelen istek sayısıdır. Bu varsayılan davranışı bir Cloud Functions tarafından hazır tutulması gereken minimum örnek sayısı sunma isteklerini kabul eder. Minimum örnek sayısı ayarlamak, baştan başlatma sayısını azaltır en iyi yoludur. Aşağıdaki durumlarda minimum örnek sayısı belirlemenizi öneririz: uygulaması gecikmeye duyarlıdır.
Görüntüleyin Ölçeklendirme davranışını kontrol etme bu çalışma zamanı seçenekleri hakkında daha fazla bilgi edinin.Ek kaynaklar
"Google Cloud Performansı" bölümünde performansı optimize etme hakkında daha fazla bilgi Atlas" görüntülü Cloud Functions Soğuk Başlatma Süresi.