İpuçları & Hileler

Bu belge, Cloud Functions'ı tasarlamaya, uygulamaya, test etmeye ve dağıtmaya yönelik en iyi uygulamaları açıklar.

doğruluk

Bu bölüm, Bulut İşlevlerini tasarlamaya ve uygulamaya yönelik genel en iyi uygulamaları açıklar.

idempotent işlevleri yaz

İşlevleriniz birden çok kez çağrılsalar bile aynı sonucu vermelidir. Bu, önceki çağrı kodunuz boyunca 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 her şeydir. Bir işlev çağrısı, işlev geri döndüğünde veya başka bir şekilde, örneğin Node.js arka plan işlevlerinde callback bağımsız değişkeninin çağrılmasıyla tamamlandığını bildirdiğinde sona erer. Hassas sonlandırmadan sonra çalıştırılan hiçbir kod CPU'ya erişemez ve herhangi bir ilerleme kaydedemez.

Ayrıca, aynı ortamda sonraki bir ç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 neden olur ( 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 bularak, bireysel çağrılardan alınan günlüklerde genellikle tespit edilebilir. Arka plan etkinliği, özellikle geri aramalar veya zamanlayıcılar gibi eşzamansız işlemler mevcut olduğunda, bazen kodun daha derinlerine gömülebilir. İşlevi sonlandırmadan önce tüm zaman uyumsuz işlemlerin bittiğinden emin olmak için kodunuzu gözden geçirin.

Her zaman geçici dosyaları sil

Geçici dizindeki yerel disk depolama, bir bellek içi 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 silinmemesi, sonunda bellek yetersiz hatasına ve ardından soğuk başlatmaya neden olabilir.

GCP Konsolu'ndaki işlevler listesinde bu işlevi 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ışı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 Cloud Storage'a yazarak Cloud Storage'da bir dosyayı işleyebilirsiniz.

Araçlar

Bu bölüm, Cloud Functions'ı 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, bu nedenle 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öndermek için diğer seçenekleri bulabilirsiniz.

Verim

Bu bölüm, performansı optimize etmek için en iyi uygulamaları açıklar.

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

İşlevler durumsuz olduğundan, yürütme ortamı genellikle sıfırdan başlatılır ( soğuk başlatma olarak bilinen şey sırasında). Soğuk başlatma gerçekleştiğinde, işlevin genel 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 eklenebilir. 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 çağrılar için korunacağının garantisi yoktur. Ancak Cloud Functions, genellikle önceki bir çağrını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ş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, 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}`);
});

Küresel kapsamda ağ bağlantılarını, kitaplık referanslarını ve API istemci nesnelerini önbelleğe almak özellikle önemlidir. Örnekler için Ağ İletişimini Optimize Etme bölümüne bakın.

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

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 gecikmesini artırır. Belirli durumlarda bu, 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, istek üzerine bunları tembelce 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ç fonksiyon tanımlıyorsanız ve farklı fonksiyonlar farklı değişkenler kullanıyorsa önemlidir. Tembel başlatma kullanmadığınız sürece, kaynakları başlatılan ancak hiç kullanılmayan değişkenlere harcayabilirsiniz.

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

Varsayılan olarak Cloud Functions, gelen isteklerin sayısına göre örnek sayısını ö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ı belirlemek, uygulamanızın soğuk başlatması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 bkz. Ölçekleme davranışını kontrol edin.

Ek kaynaklar

"Google Bulut Performans Atlası" videosunda performansı optimize etme hakkında daha fazla bilgi edinin Bulut İşlevleri Soğuk Başlatma Süresi .