Aracılığıyla paylaş


Ön uç istemci iletişimi

İpucu

Bu içerik, .NET Docs'ta veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan Azure için Buluta Özel .NET Uygulamaları Tasarlama adlı e-Kitap'tan bir alıntıdır.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Bulutta yerel bir sistemde, ön uç istemcileri (mobil, web ve masaüstü uygulamaları) bağımsız arka uç mikro hizmetleriyle etkileşime geçmek için bir iletişim kanalı gerektirir.

Seçenekler nelerdir?

İşleri basit tutmak için, bir ön uç istemcisi Şekil 4-2'de gösterilen arka uç mikro hizmetleriyle doğrudan iletişim kurabilir.

Direct client to service communication

Şekil 4-2. İstemciyi hizmet iletişimine doğrudan gönderme

Bu yaklaşımla, her mikro hizmetin ön uç istemcileri tarafından erişilebilen bir genel uç noktası vardır. Üretim ortamında, mikro hizmetlerin önüne bir yük dengeleyici yerleştirerek trafiği orantılı olarak yönlendirmeniz gerekir.

Basit bir uygulama olsa da doğrudan istemci iletişimi yalnızca basit mikro hizmet uygulamaları için kabul edilebilir. Bu düzen, ön uç istemcilerini temel arka uç hizmetleriyle sıkı bir şekilde bağlar ve aşağıdakiler dahil olmak üzere birçok soruna kapı açar:

  • Arka uç hizmeti yeniden düzenlemeye istemci duyarlılığı.
  • Çekirdek arka uç hizmetleri olarak daha geniş bir saldırı yüzeyi doğrudan kullanıma sunulur.
  • Her mikro hizmette çapraz kesme sorunlarının çoğaltılımını.
  • Aşırı karmaşık istemci kodu - istemcilerin birden çok uç noktayı izlemesi ve hataları dayanıklı bir şekilde işlemesi gerekir.

Bunun yerine, yaygın olarak kabul edilen bir bulut tasarımı düzeni, ön uç uygulamaları ve arka uç hizmetleri arasında bir API Gateway Hizmeti uygulamaktır. Desen Şekil 4-3'te gösterilir.

API Gateway Pattern

Şekil 4-3. API ağ geçidi düzeni

Önceki şekilde, API Gateway hizmetinin arka uç çekirdek mikro hizmetlerini nasıl soyutlayana dikkat edin. Web API'si olarak uygulanan bu api, gelen trafiği iç mikro hizmetlere yönlendiren ters ara sunucu işlevi görür.

Ağ geçidi, istemciyi iç hizmet bölümleme ve yeniden düzenlemeden yalıtıyor. Bir arka uç hizmetini değiştirirseniz, istemciyi bozmadan ağ geçidinde bu hizmeti barındırabilirsiniz. Ayrıca kimlik, önbelleğe alma, dayanıklılık, ölçüm ve azaltma gibi çapraz kesme sorunlarına yönelik ilk savunma hattınızdır. Bu çapraz kesme sorunlarının çoğu arka uç çekirdek hizmetlerinden ağ geçidine yüklenemez ve bu da arka uç hizmetlerini basitleştirir.

API Gateway'i basit ve hızlı tutmak için dikkatli olunmalıdır. Genellikle iş mantığı ağ geçidinin dışında tutulur. Karmaşık bir ağ geçidi, bir performans sorunu ve sonunda monolit olma riski taşır. Daha büyük sistemler genellikle istemci türüne (mobil, web, masaüstü) veya arka uç işlevselliğine göre segmentlere ayrılmış birden çok API Ağ Geçidi sunar. Ön Uçlar için Arka Uç deseni, birden çok ağ geçidinin uygulanması için yön sağlar. Desen Şekil 4-4'te gösterilir.

Backend for Frontend Pattern

Şekil 4-4. Ön uç düzeni için arka uç

Önceki şekilde, gelen trafiğin istemci türüne göre belirli bir API ağ geçidine nasıl gönderildiğine dikkat edin: web, mobil veya masaüstü uygulaması. Her cihazın özellikleri form faktörü, performans ve görüntü sınırlamaları arasında önemli ölçüde farklılık gösterdiğinden bu yaklaşım mantıklıdır. Mobil uygulamalar genellikle tarayıcı veya masaüstü uygulamalarından daha az işlevsellik sunar. Her ağ geçidi, ilgili cihazın özelliklerine ve işlevlerine uyacak şekilde iyileştirilebilir.

Basit Ağ Geçitleri

Başlamak için kendi API Gateway hizmetinizi oluşturabilirsiniz. GitHub'da hızlı bir arama birçok örnek sağlayacaktır.

Basit .NET buluta özel uygulamalar için Ocelot Ağ Geçidi'ni göz önünde bulundurabilirsiniz. Açık kaynak ve .NET mikro hizmetleri için oluşturulan, basit, hızlı, ölçeklenebilir. Tüm API Gateway'ler gibi birincil işlevi de gelen HTTP isteklerini aşağı akış hizmetlerine iletmektir. Ayrıca, .NET ara yazılım işlem hattında yapılandırılabilen çok çeşitli özellikleri destekler.

YARP (Ancak başka bir Ters proxy), bir grup Microsoft ürün ekibi tarafından yönetilen başka bir açık kaynak ters proxy'dir. NuGet paketi olarak indirilebilen YARP, ara yazılım olarak ASP.NET çerçevesine takılır ve yüksek oranda özelleştirilebilir. YARP'nin çeşitli kullanım örnekleriyle iyi belgelenmiş olduğunu göreceksiniz.

Kurumsal buluta özel uygulamalar için, çalışmalarınızı hızlı bir şekilde başlatmanıza yardımcı olabilecek çeşitli yönetilen Azure hizmetleri vardır.

Azure Application Gateway

Basit ağ geçidi gereksinimleri için Azure Uygulaması Lication Gateway'i göz önünde bulundurabilirsiniz. Azure PaaS hizmeti olarak kullanılabilir; URL yönlendirme, SSL sonlandırma ve Web Uygulaması Güvenlik Duvarı gibi temel ağ geçidi özelliklerini içerir. Hizmet, Katman 7 yük dengeleme özelliklerini destekler. Katman 7 ile, istekleri yalnızca alt düzey TCP ağ paketlerine değil, bir HTTP iletisinin gerçek içeriğine göre yönlendirebilirsiniz.

Bu kitap boyunca Kubernetes'te buluta özel sistemleri barındırmayı yaygınlaştırıyoruz. Kapsayıcı düzenleyici kubernetes, kapsayıcılı iş yüklerinin dağıtım, ölçeklendirme ve operasyonel sorunlarını otomatikleştirir. Azure Uygulaması lication Gateway, için bir API ağ geçidi olarak yapılandırılabilirAzure Kubernetes Service kümesi.

Application Gateway Giriş Denetleyicisi, Azure Uygulaması lication Gateway'in doğrudan Azure Kubernetes Service ile çalışmasını sağlar. Şekil 4.5'de mimari gösterilmektedir.

Application Gateway Ingress Controller

Şekil 4-5. Application Gateway Giriş Denetleyicisi

Kubernetes, HTTP (Düzey 7) yük dengelemeyi destekleyen giriş adlı yerleşik bir özellik içerir. Giriş, AKS içindeki mikro hizmet örneklerinin dış dünyaya nasıl gösterilebileceğine ilişkin bir dizi kural tanımlar. Önceki görüntüde, giriş denetleyicisi küme için yapılandırılan giriş kurallarını yorumlar ve Azure Uygulaması lication Gateway'i otomatik olarak yapılandırılır. Application Gateway, bu kurallara bağlı olarak trafiği AKS içinde çalışan mikro hizmetlere yönlendirir. Giriş denetleyicisi giriş kurallarındaki değişiklikleri dinler ve Azure Uygulaması lication Gateway'de uygun değişiklikleri yapar.

Azure API Management

Orta ve büyük ölçekli buluta özel sistemler için Azure API Management'ı göz önünde bulundurabilirsiniz. Yalnızca API Gateway gereksinimlerinizi çözmekle kalmaz, tam özellikli bir geliştirici ve yönetim deneyimi sağlayan bulut tabanlı bir hizmettir. API Management Şekil 4-6'da gösterilmiştir.

Azure API Management

Şekil 4-6. Azure API Management

Başlamak için API Management, yapılandırılabilir kurallar ve ilkeler temelinde arka uç hizmetlerine denetimli erişim sağlayan bir ağ geçidi sunucusu sunar. Bu hizmetler Azure bulutunda, şirket içi veri merkezinizde veya diğer genel bulutlarda olabilir. API anahtarları ve JWT belirteçleri, kimin ne yapabileceğini belirler. Tüm trafik analiz amacıyla günlüğe kaydedilir.

API Management, geliştiriciler için hizmetlere, belgelere ve bunları çağırmak için örnek koda erişim sağlayan bir geliştirici portalı sunar. Geliştiriciler hizmet uç noktalarını incelemek ve kullanımlarını analiz etmek için Swagger/Open API kullanabilir. Hizmet ana geliştirme platformları arasında çalışır: .NET, Java, Golang ve daha fazlası.

Yayımcı portalı, yöneticilerin API'leri kullanıma sunmaları ve davranışlarını yönetmeleri için bir yönetim panosu sunar. Hizmet erişimi verilebilir, hizmet durumu izlenebilir ve hizmet telemetrisi toplanabilir. Yönetici istrator'lar davranışı etkilemek için her uç noktaya ilkeler uygular. İlkeler , her hizmet çağrısı için sırayla yürütülen önceden oluşturulmuş deyimlerdir. İlkeler gelen arama, giden arama için yapılandırılır veya bir hata üzerine çağrılır. İlkeler, ilkeleri birleştirirken belirleyici sıralamayı etkinleştirmek için farklı hizmet kapsamlarında uygulanabilir. Ürün çok sayıda önceden oluşturulmuş ilkeyle birlikte teslim edilir.

İlkelerin buluta özel hizmetlerinizin davranışını nasıl etkileyebileceğine ilişkin örnekler aşağıda verilmiştir:

  • Hizmet erişimini kısıtlayın.
  • Kimlik doğrulamayı zorunlu kılma.
  • Gerekirse, tek bir kaynaktan gelen çağrıları kısıtlar.
  • Önbelleğe almayı etkinleştirin.
  • Belirli IP adreslerinden gelen çağrıları engelleyin.
  • Hizmetin akışını denetleme.
  • ISTEKLERI SOAP'den REST'e veya XML'den JSON'a gibi farklı veri biçimleri arasında dönüştürün.

Azure API Management, bulutta veya veri merkezinizde herhangi bir yerde barındırılan arka uç hizmetlerini kullanıma sunabilir. Buluta özel sistemlerinizde kullanıma sunabileceğiniz eski hizmetler için hem REST hem de SOAP API'lerini destekler. Diğer Azure hizmetleri bile API Management aracılığıyla kullanıma sunılabilir. Yönetilen API'yi Azure Service Bus veya Azure Logic Apps gibi bir Azure yedekleme hizmetinin üzerine yerleştirebilirsiniz. Azure API Management yerleşik yük dengeleme desteği içermez ve yük dengeleme hizmetiyle birlikte kullanılmalıdır.

Azure API Management dört farklı katmanda kullanılabilir:

  • Geliştirici
  • Temel
  • Standart
  • Premium

Geliştirici katmanı, üretim dışı iş yükleri ve değerlendirme için tasarlanmıştır. Diğer katmanlar giderek daha fazla güç, özellik ve daha yüksek hizmet düzeyi sözleşmeleri (SLA) sunar. Premium katmanı, Azure Sanal Ağ ve çok bölgeli destek sağlar. Tüm katmanların saatlik sabit bir fiyatı vardır.

Azure bulutu, Azure API Management için sunucusuz bir katman da sunar. Tüketim fiyatlandırma katmanı olarak adlandırılan hizmet, sunucusuz bilgi işlem modeli etrafında tasarlanmış bir API Management çeşididir. Daha önce gösterilen "önceden ayrılmış" fiyatlandırma katmanlarından farklı olarak, tüketim katmanı anında sağlama ve eylem başına ödeme fiyatlandırması sağlar.

Aşağıdaki kullanım örnekleri için API Gateway özelliklerini etkinleştirir:

  • Azure İşlevleri ve Azure Logic Apps gibi sunucusuz teknolojiler kullanılarak uygulanan mikro hizmetler.
  • Service Bus kuyrukları ve konuları, Azure depolama ve diğerleri gibi Azure yedekleme hizmeti kaynakları.
  • Trafiğin zaman zaman büyük ani artışlar yaşadığı ancak çoğu zaman düşük kaldığı mikro hizmetler.

Tüketim katmanı aynı temel hizmet API Management bileşenlerini kullanır, ancak dinamik olarak ayrılan kaynaklara göre tamamen farklı bir mimari kullanır. Sunucusuz bilgi işlem modeliyle mükemmel uyum sağlar:

  • Yönetecek altyapı yok.
  • Boşta kapasite yok.
  • Yüksek kullanılabilirlik.
  • Otomatik ölçeklendirme.
  • Maliyet, gerçek kullanımı temel alır.

Yeni tüketim katmanı, sunucusuz kaynakları API olarak kullanıma sunan buluta özel sistemler için harika bir seçimdir.

Gerçek zamanlı iletişim

Gerçek zamanlı veya göndermeli iletişim, HTTP üzerinden arka uç buluta özel sistemlerle iletişim kuran ön uç uygulamaları için bir diğer seçenektir. Finansal değer değiştiriciler, çevrimiçi eğitim, oyun ve iş ilerleme durumu güncelleştirmeleri gibi uygulamalar, arka uçtan anında ve gerçek zamanlı yanıtlar gerektirir. Normal HTTP iletişimi sayesinde istemcinin yeni verilerin ne zaman kullanılabilir olduğunu bilmesi mümkün değildir. İstemcinin sürekli olarak yoklaması veya sunucuya istek göndermesi gerekir. Gerçek zamanlı iletişim sayesinde sunucu, istemciye istediği zaman yeni veriler gönderebilir.

Gerçek zamanlı sistemler genellikle yüksek frekanslı veri akışları ve çok sayıda eşzamanlı istemci bağlantısı ile karakterize edilir. Gerçek zamanlı bağlantıyı el ile uygulamak hızla karmaşık hale gelebilir ve bağlı istemcilere ölçeklenebilirlik ve güvenilir mesajlaşma sağlamak için önemsiz olmayan bir altyapı gerektirir. Kendinizi Azure Redis Cache örneğini ve istemci benzimi için yapışkan oturumlarla yapılandırılmış bir yük dengeleyici kümesini yönetirken bulabilirsiniz.

Azure SignalR Hizmeti, bulutta yerel uygulamalarınız için gerçek zamanlı iletişimi basitleştiren tam olarak yönetilen bir Azure hizmetidir. Kapasite sağlama, ölçeklendirme ve kalıcı bağlantılar gibi teknik uygulama ayrıntıları soyutlanır. Bunlar sizin için %99,9 hizmet düzeyi sözleşmesiyle ele alınmaktadır. Altyapı tesisatı yerine uygulama özelliklerine odaklanırsınız.

Etkinleştirildikten sonra, bulut tabanlı bir HTTP hizmeti tarayıcı, mobil ve masaüstü uygulamaları dahil olmak üzere içerik güncelleştirmelerini doğrudan bağlı istemcilere gönderebilir. İstemciler, sunucuyu yoklamasına gerek kalmadan güncelleştirilir. Azure SignalR, WebSockets, Sunucu Tarafı Olayları ve Uzun Yoklama gibi gerçek zamanlı bağlantı oluşturan aktarım teknolojilerini soyutlar. Geliştiriciler, bağlı istemcilerin tümüne veya belirli alt kümelerine ileti göndermeye odaklanır.

Şekil 4-7'de, Azure SignalR etkinken bulutta yerel bir uygulamaya bağlanan bir HTTP İstemcileri kümesi gösterilmektedir.

Azure SignalR

Şekil 4-7. Azure SignalR

Azure SignalR Hizmeti bir diğer avantajı da Sunucusuz buluta özel hizmetler uygulamaktır. Kodunuz Azure İşlevleri tetikleyicilerle isteğe bağlı olarak yürütülebilir. Kodunuz istemcilerle uzun bağlantılar sağlamadığından bu senaryo karmaşık olabilir. Azure SignalR Hizmeti, bağlantıları zaten yönettiği için bu durumu sizin yerinize çözebilir.

Azure SignalR Hizmeti Azure SQL Veritabanı, Service Bus veya Redis Cache gibi diğer Azure hizmetleriyle yakından tümleştirerek buluta özel uygulamalarınız için birçok olasılık sunar.