Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

İpuçları & Hileler

Bu belge, Bulut İşlevlerini tasarlamak, uygulamak, test etmek ve dağıtmak için en iyi uygulamaları açıklar.

doğruluk

Bu bölümde, Bulut İşlevlerini tasarlamak ve uygulamak için genel en iyi uygulamalar açıklanmaktadır.

İdempotent fonksiyonları yazma

Birçok kez çağrılsa bile işlevleriniz aynı sonucu vermelidir. Bu, önceki çağırma kodunuzda yarıda başarısız olursa bir çağrıyı yeniden denemenizi sağlar. Daha fazla bilgi için, bkz. Arka plan işlevlerini yeniden deneme .

Arka plan etkinliklerine başlama

Arka plan etkinliği, işleviniz sona erdikten sonra gerçekleşen herhangi bir şeydir. Node.js arka plan işlevlerinde callback bağımsız değişkenini çağırmak gibi, işlev geri döndüğünde veya tamamlanma sinyalini verdikten sonra işlev çağırma işlemi sona erer. Zarif sonlandırmadan sonra çalıştırılan kodlar CPU'ya erişemez ve herhangi bir ilerleme kaydetmez.

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, beklenmeyen davranışlara ve teşhis edilmesi zor hatalara yol açabilir. Bir işlev sona erdikten sonra ağa erişmek genellikle bağlantıların sıfırlanmasına neden olur ( ECONNRESET hata kodu).

Arka plan etkinliği, bireysel çağrılardan alınan günlüklerde, çağrının bittiğini söyleyen satırdan sonra kaydedilen herhangi bir şey bulunarak genellikle saptanabilir. Arka plan etkinliği bazen özellikle geri aramalar veya zamanlayıcılar gibi eşzamansız işlemler olduğunda koda daha derine gömülebilir. İşlevi sonlandırmadan önce tüm eşzamansız işlemlerin tamamlandığından emin olmak için kodunuzu gözden geçirin.

Geçici dosyaları her zaman sil

Geçici dizindeki yerel disk depolama, bellek içi bir dosya sistemidir. Yazdığınız dosyalar, işleviniz için kullanılabilir belleği tüketir ve bazen çağrılar arasında kalır. Bu dosyaların açıkça silinememesi, sonunda yetersiz bellek hatasına ve ardından gelen soğuk başlatmaya neden olabilir.

GCP Konsolu'ndaki işlevler listesinden seçip Bellek kullanımı grafiğini seçerek tek bir işlev tarafından kullanılan belleği görebilirsiniz.

Geçici dizinin dışında yazmaya çalışmayın ve dosya yollarını oluşturmak için platform / OS'den bağımsız yöntemler kullandığınızdan emin olun.

Boru hattını kullanarak geçici dosyalardaki boyut kısıtlamalarını atlayabilirsiniz. Örneğin, bir okuma akışı oluşturarak, akış tabanlı bir işlemden geçirerek ve çıktı akışını doğrudan Cloud Storage'a yazarak Cloud Storage'daki bir dosyayı işleyebilirsiniz.

Araçlar

Bu bölüm, Bulut İşlevlerini uygulamak, test etmek ve bunlarla etkileşimde bulunmak için araçların nasıl kullanılacağına ilişkin yönergeler sağlar.

Yerel kalkınma

İşlev dağıtımı biraz zaman alır, bu nedenle işlev kodunuzu yerel olarak test etmek genellikle daha hızlıdır.

Firebase geliştiricileri Firebase CLI Bulut İşlevleri Emülatörünü kullanabilir .

E-posta göndermek için Sendgrid kullanın

Bulut İşlevleri, bağlantı noktası 25'te giden bağlantılara izin vermez, bu nedenle bir SMTP sunucusuna güvenli olmayan bağlantılar kuramazsınız. E-posta göndermenin önerilen yolu SendGrid kullanmaktır. SendGrid Eğitimi'nde tam bir örnek ve e-posta gönderme ile ilgili diğer seçenekleri , bir Eşgörünümden E-posta Gönderme belgesinde bulabilirsiniz.

Verim

Bu bölümde performansı optimize etmek için en iyi uygulamalar açıklanmaktadır.

Bağımlılıkları akıllıca kullanın

İşlevler vatansız olduğundan, yürütme ortamı genellikle sıfırdan başlatılır ( soğuk başlatma olarak bilinir). Soğuk başlatma meydana geldiğinde, işlevin genel bağlamı değerlendirilir.

İşlevleriniz modülleri içeri aktarıyorsa, bu modüllerin yükleme süresi soğuk başlatma sırasında başlatma gecikmesine katkıda bulunabilir. Bağımlılıkları doğru yükleyerek ve işlevinizin kullanmadığı bağımlılıkları yüklemeyerek bu gecikmeyi ve işlevinizi dağıtmak için gereken süreyi azaltabilirsiniz.

Gelecekteki çağrılarda nesneleri yeniden kullanmak için genel değişkenleri kullanma

Bulut İşlevi durumunun gelecekteki çağrılar için korunacağının garantisi yoktur. Ancak, Bulut İşlevleri genellikle önceki bir çağrının yürütme ortamını geri dönüştürür. Genel kapsamda bir değişken bildirirseniz, değeri yeniden hesaplanmak zorunda kalmadan sonraki çağrılarda yeniden kullanılabilir.

Bu şekilde, her işlev çağrısında yeniden oluşturulması pahalı olabilecek nesneleri önbelleğe alabilirsiniz. Bu gibi nesnelerin işlev gövdesinden global kapsama taşınması, önemli performans geliştirmelerine neden olabilir. Aşağıdaki örnek, işlev örneği başına yalnızca bir kez ağır bir nesne oluşturur ve bunu, belirtilen örneğe ulaşan tüm işlev çağrıları arasında paylaşır:

 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}`);
});
 

Ağ bağlantılarını, kütüphane referanslarını ve API istemci nesnelerini genel kapsamda önbelleğe almak özellikle önemlidir. Örnekler için Ağları Optimize Etme konusuna bakın.

Global değişkenlerin tembel başlatılması

Değişkenleri global kapsamda başlatırsanız, başlatma kodu her zaman bir soğuk başlatma çağrısı ile yürütülür ve işlevinizin gecikmesini artırır. Bazı nesneler tüm kod yollarında kullanılmıyorsa, istek üzerine tembel olarak başlatmayı düşünün:

 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');
});
 

Bu, özellikle tek bir dosyada birden fazla işlev tanımlarsanız ve farklı işlevler farklı değişkenler kullanırsa önemlidir. Tembel başlatmayı kullanmadığınız sürece, başlatılan ancak hiç kullanılmayan değişkenler üzerindeki kaynakları boşa harcayabilirsiniz.

Ek kaynaklar

Performansı optimize etme hakkında daha fazla bilgiyi "Google Cloud Performance Atlas" video Bulut İşlevleri Soğuk Önyükleme Süresi'nde bulabilirsiniz .