获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

İ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.

Idempotent fonksiyonları yaz

İşlevleriniz, birden çok kez çağrılsalar bile aynı sonucu vermelidir. Bu, önceki çağırma kodunuz aracılığıyla yarı yolda başarısız olursa bir çağırmayı yeniden denemenizi sağlar. Daha fazla bilgi için bkz. olaya dayalı işlevleri yeniden deneme .

Arka plan etkinliklerine başlama

Arka plan etkinliği, işleviniz sonlandırıldıktan sonra gerçekleşen herhangi bir şeydir. Node.js olay güdümlü işlevlerde callback bağımsız değişkenini çağırmak gibi, işlev geri döndüğünde veya başka bir şekilde tamamlanma sinyali verdiğinde, işlev çağrısı sona erer. Zarif sonlandırmadan sonra çalıştırılan herhangi bir kod, CPU'ya erişemez ve herhangi bir ilerleme kaydetmez.

Ek olarak, aynı ortamda bir sonraki çağrı yürütüldüğünde, arka plan etkinliğiniz devam ederek yeni çağrıya müdahale eder. Bu, beklenmeyen davranışlara ve teşhis edilmesi zor hatalara yol açabilir. Bir işlev sona erdikten sonra ağa erişim genellikle bağlantıların sıfırlanmasına yol açar ( ECONNRESET hata kodu).

Arka plan etkinliği, çağrının bittiğini söyleyen satırdan sonra günlüğe kaydedilen herhangi bir şey bulunarak, bireysel çağrılardan gelen günlüklerde sıklıkla tespit edilebilir. Özellikle geri aramalar veya zamanlayıcılar gibi eşzamansız işlemler mevcut olduğunda, arka plan etkinliği bazen kodun daha derinlerine gömülebilir. İşlevi sonlandırmadan önce tüm eşzamansız işlemlerin bittiğinden emin olmak için kodunuzu gözden geçirin.

Geçici dosyaları her zaman sil

Geçici dizindeki yerel disk depolaması, bir bellek içi dosya sistemidir. Yazdığınız dosyalar, işlevinizin kullanabileceği belleği tüketir ve bazen çağrılar arasında kalır. Bu dosyaların açık bir şekilde silinmemesi, sonunda bir yetersiz bellek hatasına ve ardından bir soğuk başlatmaya neden olabilir.

Tek bir işlev tarafından kullanılan belleği, GCP Konsolundaki işlevler listesinden seçip Bellek kullanım grafiğini seçerek görebilirsiniz.

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 kullandığınızdan emin olun.

Ardışık düzen kullanarak daha büyük dosyaları işlerken bellek gereksinimlerini azaltabilirsiniz. Örneğin, bir okuma akışı oluşturarak, onu akış tabanlı bir süreçten geçirerek ve çıktı akışını doğrudan Bulut Depolamaya yazarak Bulut Depolama üzerinde bir dosyayı işleyebilirsiniz.

Aletler

Bu bölüm, Bulut İşlevlerini uygulamak, test etmek ve bunlarla etkileşim kurmak 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şlevinizin kodunu yerel olarak test etmek genellikle daha hızlıdır.

Firebase geliştiricileri, Firebase CLI Cloud Functions Emulator'ı kullanabilir.

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

Cloud Functions, 25 numaralı bağlantı noktasında giden bağlantılara izin vermez, dolayısıyla bir SMTP sunucusuna güvenli olmayan bağlantılar kuramazsınız. E-posta göndermenin önerilen yolu SendGrid kullanmaktır. Google Compute Engine için Bir Örnekten E-posta Gönderme eğitiminde e-posta göndermeye ilişkin diğer seçenekleri bulabilirsiniz.

Verim

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 sıfırdan başlatılır ( soğuk başlatma olarak bilinen işlem sırasında). Bir soğuk başlatma meydana geldiğinde, fonksiyonun global bağlamı değerlendirilir.

İşlevleriniz modülleri içe aktarırsa, bu modüllerin yükleme süresi, soğuk başlatma sırasında başlatma gecikmesine neden olabilir. Bağımlılıkları doğru bir şekilde 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 kullanın

Bir Bulut İşlevinin durumunun gelecekteki çalıştırmalar için korunacağına dair hiçbir garanti yoktur. Ancak Cloud Functions, genellikle önceki bir başlatmanın yürütme ortamını geri dönüştürür. Global kapsamda bir değişken bildirirseniz, değeri yeniden hesaplamaya gerek 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 tür nesneleri işlev gövdesinden genel kapsama taşımak, önemli performans iyileştirmeleriyle sonuçlanabilir. Aşağıdaki örnek, işlev örneği başına yalnızca bir kez ağır bir nesne oluşturur ve bunu verilen örneğe ulaşan tüm işlev çağrıları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ı, kitaplık referanslarını ve API istemci nesnelerini küresel kapsamda önbelleğe almak özellikle önemlidir. Örnekler için bkz. Ağ İletişimini Optimize Etme .

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ı yoluyla yürütülür ve işlevinizin gecikmesi artar. Belirli durumlarda, bir try / catch bloğunda uygun şekilde işlenmezlerse, çağrılan servislerde aralıklı zaman aşımlarına neden olur. Bazı nesneler tüm kod yollarında kullanılmıyorsa, bunları istek üzerine yavaş yavaş 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 birkaç işlev tanımlıyorsanız ve farklı işlevler farklı değişkenler kullanıyorsa önemlidir. Tembel başlatma kullanmazsanız, başlatılan ancak hiç kullanılmayan değişkenlerde kaynakları boşa harcayabilirsiniz.

Minimum örnek sayısını ayarlayarak soğuk başlatmaları azaltın

Varsayılan olarak Cloud Functions, örnek sayısını gelen isteklerin sayısına göre ölçeklendirir. Cloud Functions'ın istekleri sunmaya hazır tutması gereken minimum örnek sayısını ayarlayarak bu varsayılan davranışı değiştirebilirsiniz. Minimum örnek sayısı ayarlamak, uygulamanızın soğuk başlatmalarını azaltır. Uygulamanız gecikmeye duyarlıysa, minimum örnek sayısı belirlemenizi öneririz.

Bu çalışma zamanı seçenekleri hakkında daha fazla bilgi için Ölçekleme davranışını denetleme konusuna bakın.

Ek kaynaklar

"Google Cloud Performans Atlası" videosunda performansı optimize etme hakkında daha fazla bilgi edinin. Cloud Functions Cold Boot Time .