Mikro hizmetlerde API ağ geçitlerini kullanma

Mikro hizmet mimarisinde, bir istemci birden fazla ön uç hizmetiyle etkileşime geçebilir. Bu olgu verildiğinde, bir istemci hangi uç noktaların çağrılacağını nasıl bilir? Yeni hizmetler tanıtıldığında veya mevcut hizmetler yeniden düzenlenmiş olduğunda ne olur? Hizmetler SSL sonlandırma, kimlik doğrulama ve diğer sorunları nasıl işler? Bir API Gateway , bu zorlukları ele almanıza yardımcı olabilir.

API ağ geçidinin diyagramı

API ağ geçidi nedir?

Bir API ağ geçidi, istemciler ve hizmetler arasında bulunur. Ters proxy görevi görür ve istekleri istemcilerden hizmetlere yönlendirme. Ayrıca kimlik doğrulama, SSL sonlandırma ve hız sınırlandırma gibi çeşitli çapraz işlemleri gerçekleştirebilir. Bir ağ geçidi dağıtmazsanız, istemcilerin istekleri doğrudan ön uç hizmetlerine gönderebilmesi gerekir. Ancak, Hizmetleri doğrudan istemcilere açığa çıkaran bazı olası sorunlar vardır:

  • Bu, karmaşık istemci kodu oluşmasına neden olabilir. İstemci birden çok uç noktanın izlenmesini ve başarısızlıklarını dayanıklı bir şekilde işlemelidir.
  • İstemci ile arka uç arasında bir kuponu oluşturur. İstemcinin tek tek hizmetlerin nasıl oluşturulduğunu bilmeleri gerekir. Bu, istemcinin korunmasını ve ayrıca hizmetleri yeniden düzenleme zorlaştırır.
  • Tek bir işlem birden çok hizmete çağrı gerektirebilir. Bu, istemci ile sunucu arasında birden çok ağ gidiş dönüşde oluşmasına neden olabilir, önemli gecikme süresi ekler.
  • Herkese yönelik her bir hizmetin kimlik doğrulaması, SSL ve istemci hız sınırlaması gibi sorunları işlemesi gerekir.
  • Hizmetler, HTTP veya WebSocket gibi istemci dostu bir protokol kullanıma sunmalıdır. Bu, iletişim protokolleriseçimini sınırlandırır.
  • Ortak uç noktalara sahip hizmetler olası bir saldırı yüzeyidir ve sağlamlaştırılmış olmalıdır.

Bir ağ geçidi, istemcileri hizmetlerden ayırarak bu sorunların ele sağlanmasına yardımcı olur. Ağ geçitleri birçok farklı işlev gerçekleştirebilir ve bunların tümüne ihtiyaç duymayabilir. İşlevler aşağıdaki tasarım desenlerinde gruplandırılabilir:

Ağ geçidi yönlendirme. İstekleri bir veya daha fazla arka uç hizmetine yönlendirmek için, katman 7 yönlendirmesi kullanarak ağ geçidini ters bir ara sunucu olarak kullanın. Ağ Geçidi istemciler için tek bir uç nokta sağlar ve istemcileri hizmetlerden ayırarak yardımcı olur.

Ağ geçidi toplama. Birden çok bireysel isteği tek bir istekte toplamak için ağ geçidini kullanın. Bu model, tek bir işlem birden fazla arka uç hizmetine çağrı gerektirdiğinde geçerlidir. İstemci, ağ geçidine bir istek gönderir. Ağ Geçidi, istekleri çeşitli arka uç hizmetlerine dağıtır ve ardından sonuçları toplar ve istemciye geri gönderir. Bu, istemci ile arka uç arasındaki azaltmaya azaltmaya yardımcı olur.

Ağ geçidi boşaltma. Ağ geçidini, tek hizmetlerden gelen ağ geçidine, özellikle de çapraz kesme kaygılarını kullanarak devretmek için kullanın. Her hizmeti uygulamaktan sorumlu olmak yerine, bu işlevleri tek bir yerde birleştirmek yararlı olabilir. Bu özellikle, kimlik doğrulama ve yetkilendirme gibi özelleştirilmiş yeteneklerin doğru şekilde uygulanmasını gerektiren özellikler için geçerlidir.

Aşağıda, bir ağ geçidine boşaltılabilecek işlevlere ilişkin bazı örnekler verilmiştir:

  • SSL sonlandırma
  • Kimlik Doğrulaması
  • IP izin verme/engelleme listesi
  • İstemci hız sınırlaması (azaltma)
  • Günlüğe kaydetme ve izleme
  • Yanıtları Önbelleğe Alma
  • Web uygulaması güvenlik duvarı
  • GZIP sıkıştırması
  • Statik İçerik Bakımı

Ağ geçidi teknolojisi seçme

Uygulamanızda bir API ağ geçidi uygulamaya yönelik bazı seçenekler aşağıda verilmiştir.

  • Ters proxy sunucusu. NGINX ve HAProxy, Yük Dengeleme, SSL ve katman 7 yönlendirme gibi özellikleri destekleyen popüler ve ters ara sunucu sunucularıdır. Bunlar hem ücretli sürümlerde hem de ek özellikler ve destek seçenekleri sunan ücretsiz, açık kaynaklı ürünlerdir. NGINX ve HAProxy, zengin özellik kümelerine ve yüksek performansa sahip yetişkinlere yönelik ürünlerdir. Onları üçüncü taraf modüllerle genişletebilir veya Lua 'da Özel betikler yazabilirsiniz. NGINX, NGINX JavaScriptolarak adlandırılan JavaScript tabanlı bir betik modülünü de destekler. Bu modül bir şekilde Ngınscript olarak adlandırılmıştı.

  • Hizmet ağı giriş denetleyicisi. Linkerd veya Istio gibi bir hizmet ağı kullanıyorsanız, bu hizmet ağı için giriş denetleyicisi tarafından belirtilen özellikleri göz önünde bulundurun. Örneğin, Istio giriş denetleyicisi, katman 7 yönlendirmeyi, HTTP yeniden yönlendirmelerini, yeniden denemeleri ve diğer özellikleri destekler.

  • Azure Application Gateway. Application Gateway, katman 7 yönlendirme ve SSL sonlandırmasını gerçekleştirebilen bir yönetilen Yük Dengeleme hizmetidir. Ayrıca, bir Web uygulaması güvenlik duvarı (WAF) sağlar.

  • Azure API Management. API Management, API 'Leri dış ve dahili müşterilere yayımlamaya yönelik bir anahtar oluşturma çözümüdür. Azure Active Directory veya diğer kimlik sağlayıcılarını kullanarak hız sınırlaması, ıp kısıtlamaları ve kimlik doğrulaması da dahil olmak üzere, herkese açık bir apı 'yi yönetmek için yararlı olan özellikler sağlar. API Management yük dengelemesi gerçekleştirmez, bu nedenle Application Gateway veya ters proxy gibi bir yük dengeleyiciyle birlikte kullanılması gerekir. Application Gateway ile API Management kullanma hakkında daha fazla bilgi için bkz. Application Gateway ile Iç VNET 'te API Management tümleştirme.

Bir ağ geçidi teknolojisi seçerken şunları göz önünde bulundurun:

Özellikler. Yukarıda listelenen seçenekler katman 7 yönlendirmeyi destekler, ancak diğer özellikler için destek farklılık gösterecektir. İhtiyacınız olan özelliklere bağlı olarak, birden fazla ağ geçidi dağıtabilirsiniz.

Dağıtım. Azure Application Gateway ve API Management yönetilen hizmetlerdir. NGINX ve HAProxy genellikle küme içindeki kapsayıcılar içinde çalışır, ancak küme dışında adanmış VM 'lere de dağıtılabilir. Bu, ağ geçidini iş yükünün geri kalanından ayırır, ancak daha fazla yönetim yükü doğurur.

Yönetim. Hizmetler güncelleştirilirken veya yeni hizmetler eklendiğinde, ağ geçidi yönlendirme kurallarının güncelleştirilmeleri gerekebilir. Bu işlemin nasıl yönetileceğini göz önünde bulundurun. SSL sertifikalarını yönetmek için benzer hususlar, IP izin listeleri ve diğer yapılandırma yönleri de geçerlidir.

Kubernetes 'e NGINX veya HAProxy dağıtma

NGINX veya HAProxy 'yi, NGINX veya HAProxy kapsayıcı görüntüsünü belirten bir Replicaset veya DaemonSet olarak Kubernetes 'e dağıtabilirsiniz. Proxy için yapılandırma dosyasını depolamak üzere ConfigMap kullanın ve ConfigMap 'i bir birim olarak bağlayın. Ağ geçidini bir Azure Load Balancer aracılığıyla kullanıma sunmak için LoadBalancer türünde bir hizmet oluşturun.

Bir alternatif, giriş denetleyicisi oluşturmaktır. Giriş denetleyicisi, yük dengeleyici veya ters proxy sunucu dağıtan bir Kubernetes kaynağıdır. NGINX ve HAProxy dahil olmak üzere çeşitli uygulamalar vardır. Giriş denetleyicisi, yönlendirme kuralları ve TLS sertifikaları gibi ayrı bir kaynak olarak tanımlanır. Bu şekilde, belirli bir proxy sunucu teknolojisine özgü karmaşık yapılandırma dosyalarını yönetmeniz gerekmez.

Ağ Geçidi, sistemdeki olası bir performans sorunu veya tek bir başarısızlık noktasıdır; bu nedenle, yüksek kullanılabilirlik için her zaman en az iki çoğaltma dağıtın. Yüküne bağlı olarak çoğaltmaları daha fazla ölçeklendirmeniz gerekebilir.

Ayrıca, ağ geçidini kümedeki ayrılmış bir düğüm kümesinde çalıştırmayı göz önünde bulundurun. Bu yaklaşımın avantajları şunlardır:

  • Yalıtım. Tüm gelen trafik, arka uç hizmetlerinden yalıtılarak sabit bir düğüm kümesine gider.

  • Kararlı yapılandırma. Ağ geçidi yanlış yapılandırılmışsa uygulamanın tamamı kullanılamaz duruma gelir.

  • Performans. Performans nedenleriyle ağ geçidi için belirli bir VM yapılandırmasını kullanmak istiyor olabilir.

Sonraki adımlar

Önceki makalelerde mikro hizmetler veya mikro hizmetler ile istemci uygulamaları arasındaki arabirimler incelenmektedir. Tasarıma göre, bu arabirimler her hizmeti opak bir kutu olarak davranır. Özellikle mikro hizmetler, verileri nasıl yönetecekleri konusunda uygulama ayrıntılarını hiçbir zaman ortaya çıkarmaz. Bu, bir sonraki makalede incelenin, veri bütünlüğü ve veri tutarlılığı üzerinde etkileri vardır.