Aracılığıyla paylaş


en iyi yöntemleri ve tanılama araçlarını Dayanıklı İşlevler

Bu makalede, Dayanıklı İşlevler kullanırken bazı en iyi yöntemler ayrıntılı olarak verilmiştir. Ayrıca geliştirme, test ve üretim kullanımı sırasındaki sorunları tanılamaya yardımcı olacak çeşitli araçlar açıklanır.

En iyi yöntemler

Dayanıklı İşlevler uzantısının ve SDK'sının en son sürümünü kullanma

İşlev uygulamasının Dayanıklı İşlevler yürütmek için kullandığı iki bileşen vardır. Bunlardan biri, hedef programlama dilinizi kullanarak düzenleyici, etkinlik ve varlık işlevleri yazmanızı sağlayan Dayanıklı İşlevler SDK'dır. Diğeri, kodu gerçekten yürüten çalışma zamanı bileşeni olan Dayanıklı uzantısıdır. .NET işlem içi uygulamaları hariç, SDK ve uzantı bağımsız olarak sürümlenir.

En son uzantı ve SDK ile güncel kalmak, uygulamanızın en son performans iyileştirmelerinden, özelliklerinden ve hata düzeltmelerinden yararlanmasını sağlar. En son sürümlere yükseltmek, Azure'da bir destek olayı açtığınızda araştırma sürecini hızlandırmaya yardımcı olmak için Microsoft'un en son tanılama telemetrisini toplamasını da sağlar.

  • En son uzantı sürümünü alma yönergeleri için bkz. Dayanıklı işlevler uzantısı sürümünü yükseltme.
  • SDK'nın en son sürümünü kullandığınızdan emin olmak için kullandığınız dilin paket yöneticisini denetleyin.

Dayanıklı İşlevler kod kısıtlamalarına uyma

Orchestrator kodunun yeniden yürütme davranışı, bir orchestrator işlevinde yazabileceğiniz kod türü üzerinde kısıtlamalar oluşturur. Orchestrator işlevinizin, her yeniden oynatıldığında aynı sonucu vermesi için belirleyici API'leri kullanması gerektiğini belirten bir kısıtlama örneğidir.

Not

Dayanıklı İşlevler Roslyn Analyzer, C# kullanıcılarını belirli Dayanıklı İşlevler kod kısıtlamalarına uymaya yönlendiren canlı bir kod çözümleyicisidir. Visual Studio ve Visual Studio Code'da etkinleştirme yönergeleri için bkz. Dayanıklı İşlevler Roslyn Analyzer.

Programlama dilinizin Azure İşlevleri performans ayarlarını öğrenin

Varsayılan ayarları kullanarak, seçtiğiniz dil çalışma zamanı işlevlerinize katı eşzamanlılık kısıtlamaları uygulayabilir. Örneğin: belirli bir VM'de bir kerede yalnızca 1 işlevin yürütülmesine izin verme. Bu kısıtlamalar genellikle dilinizin eşzamanlılık ve performans ayarlarını ince ayarlayarak gevşetilebilir. Dayanıklı İşlevler uygulamanızın performansını iyileştirmek istiyorsanız bu ayarları tanımanız gerekir.

Performans ve eşzamanlılık ayarlarının ince ayarlanmasından ve bu ayarların yönergelerinden yararlanan bazı dillerin kapsamlı olmayan bir listesi aşağıdadır.

Uygulama başına benzersiz Görev Hub'ı adlarını garanti altına alma

Birden çok Dayanıklı İşlev uygulaması aynı depolama hesabını paylaşabilir. Varsayılan olarak, uygulamanın adı görev hub'ı adı olarak kullanılır ve bu da görev hub'larının yanlışlıkla paylaşılmasının gerçekleşmemesini sağlar. host.json'da uygulamalarınız için görev hub'ı adlarını açıkça yapılandırmanız gerekiyorsa, adların benzersiz olduğundan emin olmanız gerekir. Aksi takdirde, birden çok uygulama iletiler için rekabet eder ve bu da düzenlemelerin Beklemede veya Çalışıyor durumunda beklenmedik şekilde "takılması" da dahil olmak üzere tanımsız davranışlara neden olabilir.

Tek istisna, aynı uygulamanın kopyalarını birden çok bölgeye dağıtmanızdır; bu durumda, kopyalar için aynı görev hub'ını kullanabilirsiniz.

Kod değişikliklerini çalışan düzenleyicilere dağıtırken yönergeleri izleyin

Bir uygulamanın ömrü boyunca işlevlerin eklenmesi, kaldırılması ve değiştirilmesi kaçınılmazdır. Yaygın hataya neden olan değişikliklere örnek olarak etkinlik veya varlık işlevi imzalarını değiştirme ve düzenleyici mantığını değiştirme verilebilir. Bu değişiklikler, hala çalışmakta olan düzenlemeleri etkilediklerinde bir sorundur. Yanlış dağıtılırsa, kod değişiklikleri düzenlemelerin belirlenimci olmayan bir hatayla başarısız olmasına, süresiz olarak takılmasına, performans düşüşü vb. neden olabilir. Çalışan düzenlemeleri etkileyebilecek kod değişiklikleri yaparken önerilen azaltma stratejilerine bakın.

İşlev girişlerini ve çıkışlarını mümkün olduğunca küçük tutun

Dayanıklı İşlevler API'lere büyük giriş ve çıkışlar sağlarsanız bellek sorunlarıyla karşılaşabilirsiniz.

Dayanıklı İşlevler API'lerine yönelik girişler ve çıkışlar düzenleme geçmişinde serileştirilir. Bu, büyük girişlerin ve çıkışların zaman içinde ilişkisiz büyüyen bir düzenleyici geçmişine büyük ölçüde katkıda bulunabileceği ve bu da yeniden yürütme sırasında bellek özel durumlarına neden olma riski doğurabileceği anlamına gelir.

Büyük girişlerin ve çıkışların API'lere etkisini azaltmak için bazı işleri alt düzenleyicilere devretmeyi seçebilirsiniz. Bu, tek bir düzenleyiciden birden çok düzenleyiciye geçmiş bellek yükünün yük dengelemesine yardımcı olur ve bu nedenle tek tek geçmişlerin bellek ayak izini küçük tutar.

Bununla birlikte, büyük verilerle ilgilenmek için en iyi uygulama, verileri dış depolamada tutmak ve gerektiğinde yalnızca Etkinlikler'in içinde bu verileri gerçekleştirmektir. Bu yaklaşımı benimserken, verilerin kendisini Dayanıklı İşlevler API'lerinin girdileri ve/veya çıkışları olarak iletmek yerine, Etkinliklerinizde gerektiğinde bu verileri dış depolama alanından almanıza olanak tanıyan bazı basit tanımlayıcılar geçirebilirsiniz.

Varlık verilerini küçük tutma

Dayanıklı İşlevler API'lerine yönelik giriş ve çıkışlarda olduğu gibi, bir varlığın açık durumu çok büyükse bellek sorunlarıyla karşılaşabilirsiniz. Özellikle, bir Varlık durumunun herhangi bir istekte depolama alanından seri hale getirilmesi ve seri durumdan çıkarılması gerekir, bu nedenle büyük durumlar her çağrıya serileştirme gecikmesi ekler. Bu nedenle, bir Varlığın büyük verileri izlemesi gerekiyorsa verileri dış depolama alanına boşaltmanız ve gerektiğinde verileri depolama alanından gerçekleştirmenize olanak tanıyan varlıktaki bazı basit tanımlayıcıları izlemeniz önerilir.

Dayanıklı İşlevler eşzamanlılık ayarlarınıza ince ayar yapma

Tek bir çalışan örneği, verimliliği artırmak için birden çok iş öğesini eşzamanlı olarak yürütebilir. Ancak, çok fazla iş öğesinin eşzamanlı olarak işlenmesi, CPU kapasitesi, ağ bağlantıları vb. gibi kaynakların tükenme riskiyle karşı karşıyadır. Çoğu durumda, iş öğelerini ölçeklendirme ve sınırlama sizin için otomatik olarak işlenmediğinden bu sorun oluşturmamalıdır. Buna göre, performans sorunlarıyla karşılaşıyorsanız (düzenleyicilerin bitmesi çok uzun sürüyor, beklemede takılıyor vb.) veya performans testi yapıyorsanız, host.json dosyasında eşzamanlılık sınırlarını yapılandırabilirsiniz.

Not

Bu, Azure İşlevleri dil çalışma zamanınızın performans ve eşzamanlılık ayarlarının ince ayarının yerini almaz. Dayanıklı İşlevler eşzamanlılık ayarları, belirli bir VM'ye bir kerede yalnızca ne kadar çalışma atanabileceğini belirler, ancak VM içinde çalışan işlemede paralellik derecesini belirlemez. İkincisi, dil çalışma zamanı performans ayarlarının ince ayarlanmasını gerektirir.

Dış olaylarınız için benzersiz adlar kullanma

Etkinlik işlevlerinde olduğu gibi dış olayların da en az bir kez teslim garantisi vardır. Bu, bazı nadir koşullarda (yeniden başlatmalar, ölçeklendirme, kilitlenmeler vb.) uygulamanızın aynı dış olayın yinelenenlerini alabileceği anlamına gelir. Bu nedenle, dış olayların düzenleyicilerde el ile çoğaltılmasını sağlayan bir kimlik içermesini öneririz.

Not

MSSQL depolama sağlayıcısı dış olayları kullanır ve orchestrator durumunu işlem yoluyla güncelleştirir, bu nedenle bu arka uçta varsayılan Azure Depolama depolama sağlayıcısının aksine yinelenen olaylar riski olmamalıdır. Bununla birlikte, kodun arka uçlar arasında taşınabilir olması için dış olayların benzersiz adlara sahip olması önerilir.

Stres testlerine yatırım yapma

Performansla ilgili her şeyde olduğu gibi, uygulamanızın ideal eşzamanlılık ayarları ve architechture'i de uygulamanızın iş yüküne bağlıdır. Bu nedenle, kullanıcıların beklenen iş yüklerinin benzetimini yapan bir performans testi koşumlarına yatırım yapmalarını ve bunu uygulamaları için performans ve güvenilirlik denemeleri çalıştırmak için kullanmalarını öneririz.

Girişlerde, çıkışlarda ve özel durumlarda hassas verilerden kaçının

Dayanıklı İşlevler API'lerine ve api'lerinden gelen girişler ve çıkışlar (özel durumlar dahil) tercih edilen depolama sağlayıcınızda kalıcı olarak kalıcı hale gelir. Bu girişler, çıkışlar veya özel durumlar hassas veriler (gizli diziler, bağlantı dizesi, kişisel bilgiler vb.) içeriyorsa depolama sağlayıcınıza ait kaynaklara okuma erişimi olan herkes bunları edinebilir. Hassas verilerle güvenli bir şekilde başa çıkmak için kullanıcıların etkinlik işlevleri içindeki verileri Azure Key Vault'tan veya ortam değişkenlerinden getirmeleri ve bu verileri düzenleyicilere veya varlıklara hiçbir zaman doğrudan iletmeleri önerilir. Bu, hassas verilerin depolama kaynaklarınıza sızmasını önlemeye yardımcı olur.

Not

Bu kılavuz, istek ve yanıt yüklerini depolama alanında da kalıcı hale getirmek için CallHttp orchestrator API'sine de uygulanır. Hedef HTTP uç noktalarınız kimlik doğrulaması gerektiriyorsa ve bu da hassas olabilir, kullanıcıların http çağrısını bir etkinliğin içinde gerçekleştirmeleri veya tarafından CallHttpsunulan yerleşik yönetilen kimlik desteğini kullanmaları önerilir. Bu destek, depolama alanında hiçbir kimlik bilgisi saklamaz.

İpucu

Benzer şekilde, günlüklerinize okuma erişimi olan herkes (örneğin Application Insights'ta) bu gizli dizileri edinebileceği için gizli diziler içeren verileri günlüğe kaydetmekten kaçının.

Tanılama araçları

Sorunları tanılamanıza yardımcı olacak çeşitli araçlar vardır.

Dayanıklı İşlevler ve Dayanıklı Görev Çerçevesi Günlükleri

Dayanıklı İşlevler Uzantısı

Dayanıklı uzantısı, bir düzenlemenin uçtan uca yürütülmesini izlemenizi sağlayan izleme olayları yayar. Bu izleme olayları Azure portalındaki Application Insights Analytics aracı kullanılarak bulunabilir ve sorgulanabilir. Yayılan izleme verilerinin ayrıntı düzeyi, host.json dosyasının logger (İşlevler 1.x) veya logging (İşlev 2.0) bölümünde yapılandırılabilir. Yapılandırma ayrıntılarına bakın.

Dayanıklı Görev Çerçevesi

Dayanıklı uzantısının v2.3.0'dan başlayarak, temel alınan Dayanıklı Görev Çerçevesi (DTFx) tarafından yayılan günlükler de koleksiyon için kullanılabilir. Bu günlüklerin nasıl etkinleştirileceğine ilişkin ayrıntılara bakın.

Azure portal

Sorunları tanılama ve çözme

Azure İşlev Uygulaması Tanılama, uygulamanızdaki olası sorunları izlemek ve tanılamak için Azure portalında yararlı bir kaynaktır. Ayrıca, tanılamaya göre sorunların çözülmesine yardımcı olacak öneriler sağlar. Bkz. Azure İşlev Uygulaması Tanılama.

düzenleme izlemelerini Dayanıklı İşlevler

Azure portalı, her düzenleme örneğinin durumunu anlamanıza ve uçtan uca yürütmeyi izlemenize yardımcı olmak için düzenleme izleme ayrıntıları sağlar. Azure İşlevleri uygulamanızın içindeki işlevlerin listesine baktığınızda izlemelerin bağlantılarını içeren bir İzleyici sütunu görürsünüz. Bu bilgileri almak için uygulamanızda Applications Insights'ın etkinleştirilmesi gerekir.

İzleyici Uzantısını Dayanıklı İşlevler

Bu, düzenleme örneklerinizi izlemeye, yönetmeye ve hata ayıklamaya yönelik bir kullanıcı arabirimi sağlayan bir Visual Studio Code uzantısıdır .

Roslyn Çözümleyicisi

Dayanıklı İşlevler Roslyn Analyzer, C# kullanıcılarını belirli Dayanıklı İşlevler kod kısıtlamalarına uymaya yönlendiren bir canlı kod çözümleyicisidir. Visual Studio ve Visual Studio Code'da etkinleştirme yönergeleri için bkz. Dayanıklı İşlevler Roslyn Analyzer.

Destek

Sorular ve destek için aşağıdaki GitHub depolarından birinde bir sorun açabilirsiniz. Etkilenen örnek kimlikleri, sorunu gösteren UTC'deki zaman aralıkları, uygulama adı (mümkünse) ve dağıtım bölgesi gibi bilgiler de dahil olmak üzere Azure'da bir hata bildirildiğinde araştırmalarda büyük hız sağlanır.