Azure App Service’de aralıklı giden bağlantı sorunlarını giderme
Bu makale, Azure Uygulaması Hizmeti'nde 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 ve sorun giderme yöntemleri hakkında daha fazla bilgi sağlar. Bu makalenin herhangi bir noktasında daha fazla yardıma ihtiyacınız varsa MSDN Azure ve Stack Overflow forumlarındaki Azure uzmanlarına başvurun. Alternatif olarak, bir Azure desteği olayı da dosyala. Azure Destek 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
Neden
Aralıklı bağlantı sorunlarının en önemli nedeni, yeni giden bağlantılar yapılırken bir sınıra basmaktır. Vurabileceğiniz sınırlar şunlardır:
- TCP Bağlan: Yapılabilecek giden bağlantı sayısı 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ı oluşturuyorsa, SNAT bağlantı noktalarınızı kullanmayacaksı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ını önlemenize olanak sağlayan birkaç çözüm vardır. Bu ölçümler şunlardır:
- 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ı 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ğlan ion havuzları bu sorunu çözmenin en belirgin yollarından biridir.
Hedefiniz hizmet uç noktalarını destekleyen bir Azure hizmetiyse, bölgesel Sanal Ağ Tümleştirmesi 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ştirmesi'ni kullandığınızda ve hizmet uç noktalarını tümleştirme alt asına yerleştirdiğinizde, bu hizmetlere giden uygulama trafiğinizde 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 kodunuzu bağlantı havuzlarını kullanacak şekilde geliştirin ve tüm durumdan kaçının. 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 en iyi şekilde birleştirmektir. Geri kalanı için 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'ın giden bağlantıları belgelerinin Sorun çözme bölümünde ele alınılmıştı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
- HTTP bağlantılarını havuza alma için HttpClientFactory ile HTTP bağlantılarını havuza alma konusuna bakın.
- SQL Server bağlantı havuzu hakkında bilgi için SQL Server Bağlan ion Havuzu (ADO.NET) gözden geçirin.
Farklı çözüm yığını tarafından Bağlan ion havuzu uygulamaya yönelik bir bağlantı koleksiyonu aşağıdadı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ığıyla ilgili örnekler içeren popüler kitaplıklar verilmiştir: JDBC Bağlan ion Havuzu.
HTTP Bağlantı Havuzu
PHP
PHP bağlantı havuzunu desteklemese de arka uç sunucunuza kalıcı veritabanı bağlantıları kullanmayı deneyebilirsiniz.
MySQL sunucusu
- Daha yeni sürümler için MySQLi bağlantıları for newer versions
- PHP’nin daha eski sürümleri için mysql_pconnect
Diğer veri kaynakları
Python
Aşağıda bağlantı havuzuna yönelik popüler veritabanları ve modüller verilmiştir ve bunların nasıl uygulanacaklarına ilişkin örnekler verilmiştir.
HTTP Bağlantı Havuzu
Uygulamanızı, bağlantıları yeniden kullanacak şekilde değiştirin
- Azure işlevlerinde bağlantıları yönetme hakkında daha fazla işaretçi ve örnek için bkz. Azure İşlevleri'de bağlantıları yönetme.
Uygulamanızı, daha az agresif bir yeniden deneme mantığı kullanacak şekilde değiştirin
- Daha fazla kılavuz ve örnek için Yeniden deneme düzeni'ne bakın.
Giden boşta kalma zaman aşımını sıfırlamak için etkin tutmaları kullanma
- Node.js uygulamalar için keepalives uygulamak için Düğüm uygulamam aşırı giden çağrılar yapıyor'ı gözden geçirin.
App Service'e özgü daha fazla kılavuz:
- Yük testi , gerçek dünya verilerinin sabit bir besleme hızında simülasyonunu yapmalıdır. Gerçek dünya stresi altında uygulamaları ve işlevleri 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ı Analizler ile ilgili 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 Uygulaması Hizmeti'nde bir uygulamayı ölçeklendirme. Bir 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 yayarsanı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ı alabilirsiniz.
- Tek bir giden IP adresi 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ı bulunurken, 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ğlan ions içinde 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ı 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ızla belirleyecek kadar bilmiyorsanız, App Service'te 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 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:
- App Service tanılamalarına erişmek için Azure portalında App Service web uygulamanıza veya App Service Ortamı gidin. Sol gezinti bölmesinde Sorunları tanılama ve çözme'yi seçin.
- Kullanılabilirlik ve Performans Kategorisi'ne tıklayın
- Kategorinin altındaki kullanılabilir kutucuklar listesinde SNAT Bağlantı Noktası Tükenme kutucuğunu seçin. Uygulama, 128'in altında tutmaktır. İhtiyacınız varsa bir 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 yapmak veya SNAT bağlantı noktası ayırma ölçümüne göre otomatik ölçeklendirme yapılandırmak mümkün değildir.
TCP Bağlan ions 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ğlan ions 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ğlan ions ö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ğlan ions ölçümünü kullanmaz.
- TCP bağlantı sınırları Sanal Makineler Arası Korumalı Alan Sayısal Sınırları - TCP Bağlan ions bölümünde açıklanmıştır
- Azure Uygulaması Hizmeti kaynak bağlantı noktasından yeni giden TCP oturumları eklendiğinde mevcut TCP oturumları 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ükenirse 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 bir sorunun planlardan birinde 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.