Azure App Service’de aralıklı giden bağlantı sorunlarını giderme

Bu makale, Azure App Service aralıklı bağlantı hatalarını ve ilgili performans sorunlarını gidermenize yardımcı olur. Kaynak ağ adresi çevirisi (SNAT) bağlantı noktalarının tükenmesi ile ilgili daha fazla bilgi ve sorun giderme yöntemleri sağlar. Bu makalenin herhangi bir noktasında daha fazla yardıma ihtiyacınız varsa MSDN Azure ve Stack Overflow forumlarında Azure uzmanlarına başvurun. Alternatif olarak, bir Azure desteği olayı da dosyala. Azure Desteği sitesine gidin ve Destek Al'ı seçin.

Belirtiler

Azure Uygulaması hizmetinde barındırılan Uygulamalar ve İşlevler aşağıdaki belirtilerden birini veya daha fazlasını gösterebilir:

  • Hizmet planındaki örneklerin tümünde veya bazılarında yavaş yanıt süreleri.
  • Aralıklı 5xx veya Hatalı Ağ Geçidi hataları
  • Zaman aşımı hata iletileri
  • Dış uç noktalara (SQLDB, Service Fabric, diğer Uygulama hizmetleri vb.) bağlanılamıyor

Nedeni

Aralıklı bağlantı sorunlarının en önemli nedeni, yeni giden bağlantılar yaparken bir sınıra basmaktır. Vurabileceğiniz sınırlar şunlardır:

  • TCP Bağlantıları: Yapılabilecek giden bağlantı sayısında bir sınır vardır. Giden bağlantı sınırı, kullanılan çalışanın boyutuyla ilişkilidir.
  • SNAT bağlantı noktaları: Azure'daki giden bağlantılar , SNAT bağlantı noktası kısıtlamalarını ve bunların giden bağlantıları nasıl etkilediğini açıklar. Azure, genel IP adresleriyle iletişim kurmak için kaynak ağ adresi çevirisi (SNAT) ve Yük Dengeleyiciler (müşterilere sunulmaz) kullanır. Azure Uygulaması hizmetindeki her örneğe başlangıçta önceden ayrılmış 128 SNAT bağlantı noktası verilir. SNAT bağlantı noktası sınırı, aynı adres ve bağlantı noktası bileşimine açılan bağlantıları etkiler. Uygulamanız adres ve bağlantı noktası birleşimlerinin bir karışımına bağlantılar oluşturursa, SNAT bağlantı noktalarınızı kullanmazsınız. Aynı adres ve bağlantı noktası bileşimine tekrarlanan çağrılar yaptığınızda SNAT bağlantı noktaları tükenir. Bağlantı noktası serbest bırakıldıktan sonra gerektiğinde yeniden kullanılabilir. Azure Ağ yük dengeleyici, kapalı bağlantılardan SNAT bağlantı noktasını ancak 4 dakika bekledikten sonra geri alır.

Uygulamalar veya işlevler hızla yeni bir bağlantı açtığında, önceden ayrılmış 128 bağlantı noktası kotasını hızla tüketebilir. Daha sonra, dinamik olarak daha fazla SNAT bağlantı noktası ayırarak veya geri kazanılmış bir SNAT bağlantı noktasını yeniden kullanarak yeni bir SNAT bağlantı noktası kullanıma sunulana kadar engellenirler. Uygulamanızda SNAT bağlantı noktaları tükenirse, aralıklı giden bağlantı sorunları olur.

Sorundan kaçınma

SNAT bağlantı noktası sınırlamalarından kaçınmanıza olanak sağlayan birkaç çözüm vardır. Bunlara aşağıdakiler dahildir:

  • bağlantı havuzları: Bağlantılarınızı havuza alarak, aynı adrese ve bağlantı noktasına yapılan çağrılar için yeni ağ bağlantılarını açmaktan kaçınmış olacaksınız.
  • hizmet uç noktaları: Hizmet uç noktalarıyla güvenliği sağlanan hizmetler için SNAT bağlantı noktası kısıtlamanız yoktur.
  • özel uç noktalar: Özel uç noktalarla güvenliği sağlanan hizmetler için SNAT bağlantı noktası kısıtlamanız yoktur.
  • NAT ağ geçidi: NAT ağ geçidiyle, üzerinden trafik gönderen kaynaklar tarafından kullanılabilen 64k giden SNAT bağlantı noktalarınız vardır.

SNAT bağlantı noktası sorununu önlemek için, aynı konak ve bağlantı noktasına tekrar tekrar yeni bağlantılar oluşturulmasını engellersiniz. Bağlantı havuzları, bu sorunu çözmenin en belirgin yollarından biridir.

Hedefiniz hizmet uç noktalarını destekleyen bir Azure hizmetiyse, bölgesel sanal ağ tümleştirmesini ve hizmet uç noktalarını veya özel uç noktaları kullanarak SNAT bağlantı noktası tükenme sorunlarını önleyebilirsiniz. Bölgesel sanal ağ tümleştirmesini kullandığınızda ve hizmet uç noktalarını tümleştirme alt asına yerleştirdiğinizde, bu hizmetlere giden uygulama trafiğinde giden SNAT bağlantı noktası kısıtlamaları olmaz. Benzer şekilde, bölgesel sanal ağ tümleştirmesi ve özel uç noktalar kullanıyorsanız, bu hedefe giden SNAT bağlantı noktası sorunlarınız olmaz.

Hedefiniz Azure dışında bir dış uç noktaysa NAT ağ geçidi kullanmak size 64.000 giden SNAT bağlantı noktası sağlar. Ayrıca, kimseyle paylaşmadığınız ayrılmış bir giden adresi de sağlar.

Mümkünse bağlantı havuzlarını kullanmak ve tüm durumdan kaçınmak için kodunuzu geliştirin. Bu durumu azaltmak için kodu yeterince hızlı değiştirmek her zaman mümkün değildir. Kodunuzu zamanında değiştirememe durumları için diğer çözümlerden yararlanın. Sorunun en iyi çözümü, tüm çözümleri olabildiğince birleştirmektir. Azure hizmetleri ve nat ağ geçidi için hizmet uç noktalarını ve özel uç noktaları kullanmayı deneyin.

SNAT bağlantı noktası tükenmesini azaltmaya yönelik genel stratejiler, Azure belgelerinin Giden bağlantıları konusunun Sorun çözme bölümünde ele alınmaktadır. Bu stratejilerden aşağıdakiler, Azure Uygulaması hizmetinde barındırılan uygulamalar ve işlevler için geçerlidir.

Uygulamanızı, bağlantı havuzu kullanacak şekilde değiştirin

Aşağıda, farklı çözüm yığını tarafından Bağlantı havuzu uygulamaya yönelik bir bağlantı koleksiyonu yer almaktadır.

Düğüm

Varsayılan olarak NodeJS bağlantıları canlı tutulmaz. Aşağıda bağlantı havuzu için popüler veritabanları ve paketler, ayrıca bunların nasıl uygulanacağına ilişkin örnekler verilmiştir.

HTTP Etkin Tutma

Java

Aşağıda, JDBC bağlantı havuzu için kullanılan ve bunların nasıl uygulandığına ilişkin örnekler içeren popüler kitaplıklar verilmiştir: JDBC Bağlantı Havuzu.

HTTP Bağlantı Havuzu

PHP

PHP bağlantı havuzunu desteklemese de arka uç sunucunuzda kalıcı veritabanı bağlantıları kullanmayı deneyebilirsiniz.

Python

Aşağıda, bağlantı havuzuna yönelik popüler veritabanları ve modülleri verilmiştir. Bu veritabanları ve modüller, bunların nasıl uygulanacaklarına ilişkin örnekler içerir.

HTTP Bağlantı Havuzu

  • İstekler modülünde etkin tutma ve HTTP bağlantı havuzu varsayılan olarak etkindir.
  • Urllib3

Uygulamanızı, bağlantıları yeniden kullanacak şekilde değiştirin

Uygulamanızı, daha az agresif bir yeniden deneme mantığı kullanacak şekilde değiştirin

Giden boşta kalma zaman aşımını sıfırlamak için etkin tutmaları kullanma

App Service özgü daha fazla kılavuz:

  • Yük testi, gerçek dünyadaki verilerin simülasyonunu sabit bir besleme hızında gerçekleştirmelidir. Uygulamaları ve işlevleri gerçek dünya stresi altında test etmek, SNAT bağlantı noktası tükenme sorunlarını önceden belirleyebilir ve çözebilir.
  • Arka uç hizmetlerinin yanıtları hızlı bir şekilde döndürediğinden emin olun. Azure SQL Veritabanı ile ilgili performans sorunlarını gidermek için Akıllı İçgörüler ile Azure SQL Veritabanı performans sorunlarını giderme makalesini gözden geçirin.
  • App Service planının ölçeğini daha fazla örneğe genişletme. Ölçeklendirme hakkında daha fazla bilgi için bkz. Azure App Service'de bir uygulamayı ölçeklendirme. App Service planındaki her çalışan örneğine bir dizi SNAT bağlantı noktası ayrılır. Kullanımınızı daha fazla örneğe dağıtırsanız, benzersiz uzak uç nokta başına önerilen 100 giden bağlantı sınırının altında örnek başına SNAT bağlantı noktası kullanımı elde edebilirsiniz.
  • Tek bir giden IP adresinin atandığı ve bağlantılarla SNAT bağlantı noktalarının sınırlarının daha yüksek olduğu App Service Ortamı (ASE) bölümüne geçmeyi göz önünde bulundurun. ASE'de örnek başına SNAT bağlantı noktası sayısı , Azure yük dengeleyici ön yükleme tablosunu temel alır. Örneğin, 1-50 çalışan örneği olan bir ASE'de örnek başına 1024 önceden ayrılmış bağlantı noktası varken, 51-100 çalışan örneğine sahip bir ASE'de örnek başına 512 önceden ayrılmış bağlantı noktası vardır.

Sınırlar çalışanınızın boyutuna göre ayarlandığından, giden TCP sınırlarından kaçınmak daha kolaydır. Vm'ler Arası Korumalı Alan Sayısal Sınırları - TCP Bağlantıları'nda sınırları görebilirsiniz

Sınır adı Açıklama Küçük (A1) Orta (A2) Büyük (A3) Yalıtılmış katman (ASE)
Bağlantılar Vm'nin tamamında bağlantı sayısı 1920 3968 8064 16.000

Giden TCP sınırlarını önlemek için çalışanlarınızın boyutunu artırabilir veya ölçeği yatay olarak genişletebilirsiniz.

Sorun giderme

İki tür giden bağlantı sınırını bilmek ve uygulamanızın ne yaptığını bilmek, sorun gidermeyi kolaylaştırmalıdır. Uygulamanızın aynı depolama hesabına çok sayıda çağrı yaptığını biliyorsanız bir SNAT sınırından şüpheleniyor olabilirsiniz. Uygulamanız İnternet'in her yerinde uç noktalara çok sayıda çağrı oluşturursa, VM sınırına ulaştığınızdan şüphelenebilirsiniz.

Uygulama davranışını nedenini hızlı bir şekilde belirleyecek kadar bilmiyorsanız, App Service'de bu belirlemeye yardımcı olacak bazı araçlar ve teknikler vardır.

SNAT bağlantı noktası ayırma bilgilerini bulma

SNAT bağlantı noktası ayırma bilgilerini bulmak ve bir App Service sitesinin SNAT bağlantı noktası ayırma ölçümünü gözlemlemek için App Service Tanılama'yı kullanabilirsiniz. SNAT bağlantı noktası ayırma bilgilerini bulmak için aşağıdaki adımları izleyin:

  1. App Service tanılamaya erişmek için App Service web uygulamanıza veya Azure portal App Service Ortamı gidin. Sol gezinti bölmesinde Sorunları tanılama ve çözme'yi seçin.
  2. Kullanılabilirlik ve Performans Kategorisi'ne tıklayın
  3. Kategorinin altındaki kullanılabilir kutucuklar listesinde SNAT Bağlantı Noktası Tükenme kutucuğunu seçin. Uygulama, 128'in altında tutmaktır. İhtiyaç duyarsanız yine de destek bileti açabilirsiniz ve destek mühendisi sizin için ölçümü arka uçtan alır.

SNAT bağlantı noktası kullanımı ölçüm olarak kullanılamadığından, SNAT bağlantı noktası kullanımına göre otomatik ölçeklendirme veya SNAT bağlantı noktası ayırma ölçümüne göre otomatik ölçeklendirmeyi yapılandırmak mümkün değildir.

TCP Bağlantıları ve SNAT Bağlantı Noktaları

TCP bağlantıları ve SNAT bağlantı noktaları doğrudan ilişkili değildir. Tcp bağlantıları kullanım algılayıcısı, herhangi bir App Service uygulamasının Sorunları Tanılama ve Çözme yönetim sayfasına eklenir. Bulmak için "TCP bağlantıları" ifadesini arayın.

  • SNAT Bağlantı Noktaları yalnızca dış ağ akışları için kullanılırken, toplam TCP Bağlantıları yerel geri döngü bağlantıları içerir.
  • SNAT bağlantı noktası, akışlar protokolde, IP adresinde veya bağlantı noktasında farklıysa farklı akışlar tarafından paylaşılabilir. TCP Bağlantıları ölçümü her TCP bağlantısını sayar.
  • TCP bağlantıları sınırı, çalışan örneği düzeyinde gerçekleşir. Azure Ağ giden yük dengelemesi, SNAT bağlantı noktası sınırlaması için TCP Bağlantıları ölçümünü kullanmaz.
  • TCP bağlantı sınırları Korumalı Alan VM'ler Arası Sayısal Sınırlar - TCP Bağlantıları bölümünde açıklanmıştır
  • Mevcut TCP oturumları, Azure App Service kaynak bağlantı noktasından yeni giden TCP oturumları eklendiğinde başarısız olur. Çakışmaları önlemek için tek bir IP kullanabilir veya arka uç havuzu üyelerini yeniden yapılandırabilirsiniz.
Sınır adı Açıklama Küçük (A1) Orta (A2) Büyük (A3) Yalıtılmış katman (ASE)
Bağlantılar Vm'nin tamamında bağlantı sayısı 1920 3968 8064 16.000

Web İşleri ve Veritabanı bağlantıları

SNAT bağlantı noktaları tükendiyse ve Web İşleri SQL Veritabanı bağlanamıyorsa, her bir web uygulaması işlemi tarafından açılan bağlantı sayısını gösteren bir ölçüm yoktur. Sorunlu Web İşini bulmak için, durumun iyileşip iyileşmediğini veya planlardan birinde bir sorunun kalıp kalmadiğini görmek için birkaç Web İşini başka bir App Service planına taşıyın. Sorunlu Web İşini bulana kadar işlemi yineleyin.

Ek bilgiler