Mikro hizmetler için bir Azure işlem seçeneği belirleme

Bu makale, mikro hizmet mimarisi üzerinde oluşturulmuş bir iş yükü için Azure işlem platformu seçmenize yardımcı olur. Mikro hizmetler mimarisi, ağ üzerinden iletişim kuran küçük, bağımsız olarak dağıtılabilir hizmetlerden oluşur. İşlem platformunuzun birçok hizmette bağımsız ölçeklendirmeyi, bağımsız dağıtımı ve güvenilir hizmetler arası iletişimi desteklemesi gerekir.

Ekip becerileri, ağ ve taşınabilirlik gibi tüm iş yüklerine uygulanan karar faktörleri için bkz. Azure işlem hizmeti seçme. Bu makalede, özellikle mikro hizmetler için önemli olan faktörlere odaklanmaktadır.

Mikro hizmetler için Azure işlem platformları

Aşağıdaki Azure platformları mikro hizmet iş yüklerini destekler. Sağladıkları düzenleme, hizmetler arası iletişim ve ölçeklendirme davranışı bakımından farklılık gösterir.

Azure Kubernetes Hizmeti (AKS)

Azure Kubernetes Service (AKS), Kubernetes API'lerine ve denetim düzlemine doğrudan erişim sağlayan yönetilen bir Kubernetes hizmetidir. AKS, düğüm yönetimi, yama uygulama ve isteğe bağlı otomatik yükseltmeler sağlar. Küme, ağ ve ölçeklendirme ilkelerini yapılandırabilirsiniz.

Mikrohizmetler için AKS, trafik yönetimi ve karşılıklı Aktarım Katmanı Güvenliği (mTLS) için Istio'yu, Yatay Pod Otomatik Ölçeklendiricisi (HPA) ve Kubernetes Olay Odaklı Otomatik Ölçeklendirme (KEDA) ile dağıtım başına ölçeklendirmeyi ve ardışık güncellemeler ile kanarya dağıtımları gibi Kubernetes'e özgü dağıtım stratejilerini destekler.

AKS Otomatik , AKS'nin iyi tasarlanmış önerilerine göre düğüm yönetimini, ölçeklendirmeyi, güvenliği ve gözlemlenebilirliği önceden yapılandıran bir AKS modudur, böylece ekipler yetenek başına yapılandırma olmadan üretime hazır bir küme elde eder.

Azure Konteyner Uygulamaları

Azure Container Apps , Kubernetes üzerinde oluşturulan ve küme yönetimini soyutlayan bir yönetilen hizmettir.

Container Apps, mikro hizmetler için hizmet bulma, mTLS ile hizmet-hizmet çağırma için Dapr tümleştirmesi , yayımcı-abone mesajlaşması ve durum yönetimi gibi yerleşik özellikler sağlar. KEDA tabanlı otomatik ölçeklendirme , sıfıra ölçeklendirme de dahil olmak üzere olay temelli ölçeklendirmeyi etkinleştirir. Container Apps isteğe bağlı, zamanlanmış veya olay temelli görevler için kanarya dağıtımları ve işleri için düzeltmeler arasında trafiği bölmeyi de destekler.

Container Apps, Kubernetes API'lerini kullanıma sunmaz. Dağıtım araçlarınız veya hizmet ağı yapılandırmanız Kubernetes temel özelliklerine bağlıysa, bunun yerine AKS kullanın.

Azure Functions

Azure İşlevleri HTTP istekleri, kuyruk iletileri veya zamanlayıcılar gibi tetikleyicilere yanıt veren mikro hizmetler için uygun sunucusuz, olay odaklı bir işlem hizmetidir. İşlevler her işlev uygulamasını bağımsız olarak ölçeklendirir ve sıfıra ölçeklendirebilir. Mikro hizmetler için her hizmeti kendi işlev uygulaması olarak dağıtın.

İşlevler platform düzeyinde hizmet bulma veya hizmetler arası iletişim sağlamaz. Bu özellikleri uygulama kodunda veya Azure API Management gibi dış hizmetler aracılığıyla uygulayın.

İşlevler birden çok programlama dilini destekler. ayrıca, İşlevler tetikleyicilerini ve bağlamalarını Container Apps ağ ve ölçeklendirme özellikleriyle birleştiren Container Apps'te İşlevler programlama modelini de çalıştırabilirsiniz.

Azure App Service

Azure App Service , web API'leri gibi HTTP tabanlı mikro hizmetlere uygundur. App Service, kod olarak veya tek bir kapsayıcı olarak dağıtmayı destekler. Yerleşik otomatik ölçeklendirme, mavi-yeşil dağıtımlar ve yüzde tabanlı trafik yönlendirmesi için dağıtım yuvaları ve sürekli tümleştirme ve sürekli teslim (CI/CD) işlem hatları ile entegrasyon sağlar. App Service hizmet bulma sağlamaz, bu nedenle platform düzeyinde hizmetler arası iletişime güvenmek yerine dış mesajlaşma veya API ağ geçidi üzerinden iletişim kuran mikro hizmetlere uygundur.

Azure Red Hat OpenShift

Azure Red Hat OpenShift , tam olarak yönetilen OpenShift kümeleri sağlar ve Kubernetes'i ayrıntılı bir geliştirici deneyimiyle genişletir. Red Hat ve Microsoft hizmeti birlikte derler, çalıştırır ve destekler. Kuruluşunuz OpenShift'te standart hale geldiğinde Azure Red Hat OpenShift'i kullanın.

Mikro hizmetler için platformları karşılaştırma

Aşağıdaki tabloda, her platformun bir mikro hizmet mimarisi için önemli olan özellikleri nasıl desteklediğini karşılaştırır. Azure kapsayıcı barındırma platformlarının ve bunların özelliklerinin daha ayrıntılı bir karşılaştırması için bkz. Azure kapsayıcı hizmeti seçme.

Özellik AKS Container Apps Functions App Service
Hizmet keşfi Kubernetes Etki Alanı Adı Sistemi (DNS), hizmet ağı Yerleşik, Dapr Hiçbiri (uygulama düzeyi) Hiçbiri (uygulama düzeyi)
Hizmetler arası iletişim Hizmet ağı (Istio) Dapr, ortam düzeyi Hiçbiri (uygulama düzeyi) Hiçbiri (uygulama düzeyi)
Yayımcı-abone mesajlaşması Uygulama düzeyi (Azure Service Bus, Azure Event Hubs gibi) Dapr pub/sub Bağlamalar Uygulama düzeyi
Bağımsız ölçeklendirme Dağıtım başına (HPA, KEDA) Uygulama başına (KEDA) Her işleve özgü uygulama (Flex'te her işleve özgü) Her Uygulama Başına Hizmet Planı
Sıfıra ölçeklendirin Kısmi (yalnızca kullanıcı düğümü havuzları) Yes Evet (Tüketim veya Esnek Tüketim planları) Hayır
Soğuk başlangıç etkilerini hafifletme En düşük düğüm sayısı, en düşük pod çoğaltmaları Asgari kopya sayısı Önceden ısınmış veya her zaman kullanılabilir örnekler (Premium veya Esnek Tüketim) Uygulanamaz (Always On)
Trafik bölme ve kanarya dağıtımları Kubernetes-native, hizmet ağı Revizyon tabanlı Dağıtım yuvaları (Premium/Adanmış) Trafik yönlendirme içeren dağıtım yuvaları
Dağıtılmış izleme OpenTelemetry, açık kaynak araçları Yerleşik olarak, Dapr izleme Application Insights Application Insights
Durum bilgisine sahip hizmetler Kalıcı birimler, StatefulSets Hacim montajları, Dapr durumu Dayanıklı İşlevler Azure Dosyaları Bağlama
Hizmete özel kimlik İş Yükü Kimliği Yönetilen kimlik Yönetilen kimlik Yönetilen kimlik
Kubernetes API erişimi Yes Hayır Hayır Hayır
Bağımsız dağıtılabilirlik Evet (pod başına veya dağıtım başına) Evet (konteyner uygulaması başına) Evet (her işlev için uygulama) Evet (uygulama başına veya dağıtım yuvası başına)
Kapsayıcıları çalıştırır Yes Yes Yes Yes
Kodu kapsayıcılar olmadan çalıştırır Hayır Hayır Yes Yes

Bu tablodaki uygulama düzeyi, platformun yerleşik özellik olarak bu özelliği sağlamadığı anlamına gelir. Bunu bir SDK veya dış hizmet aracılığıyla uygulama kodunda uygularsınız ve bu da bu hizmete bağımlılık sağlar.

Note

Bu tablo Azure Red Hat OpenShift'i içermez. Tam Kubernetes API'sini sağladığından dağıtım başına ölçeklendirme, hizmet bulma ve sıralı güncelleştirmeler gibi temel mikro hizmet özellikleri AKS ile karşılaştırılabilir.

Platformlar, temel mikro hizmet özelliklerinde değil operasyonel araçlarında farklılık gösterir. Örneğin AKS, Yönetilen eklentiler olarak Dapr ve KEDA sağlar, ancak OpenShift'te bunları kendiniz yükler ve korursunuz. Daha fazla bilgi için bkz. Azure Red Hat OpenShift belgeleri.

Platformunuzu seçin

  • Küme yönetimi olmadan hizmet bulma, Dapr ve sıfıra ölçeklendirme içeren uygulama başına ölçeklendirme gibi yerleşik mikro hizmet temel öğelerini istediğinizde Container Apps ile başlayın.

  • Doğrudan Kubernetes API erişimine, özel hizmet ağı yapılandırmasına veya düğüm havuzları, ağ ilkeleri veya zamanlama kısıtlamaları gibi küme altyapısı üzerinde ayrıntılı denetime ihtiyacınız olduğunda AKS'yi seçin.

  • Düzensiz veya ani trafik desenlerine sahip ve sıfıra ölçeklenen faturalama ile tetikleyici bazlı çalıştırmadan yararlanan olay tabanlı mikro hizmetler için İşlevler'i kullanın.

  • Platform düzeyinde hizmet bulma veya hizmetler arası iletişim özellikleri gerektirmeyen basit HTTP tabanlı hizmetler için App Service'i kullanın.

Mikro hizmetler iş yükünüzün tek bir platformda çalıştırılması gerekmez. Örneğin, İşlevler olay odaklı iş yüklerini işlerken AKS veya Container Apps üzerinde temel hizmetleri çalıştırabilirsiniz. Bileşiminizdeki her hizmeti kendi trafik düzenine, ölçeklendirme gereksinimlerine ve iletişim gereksinimlerine göre değerlendirin. Hizmeti platforma uymaya zorlamak yerine bu hizmete uyan platformu seçin.

Önemli karar faktörleri

Karşılaştırma tablosu, her platformun neleri desteklediğini gösterir. Aşağıdaki bölümler, bu özellikleri iş yükünüz için en önemli mikro hizmetlere göre tartmanıza yardımcı olur.

Hizmetler arası iletişim

Mikro hizmetler, hizmet bulma, yeniden denemeler ve mTLS gibi özelliklerle güvenilir hizmet-hizmet iletişimine bağlıdır.

Mimariniz birçok hizmette eşzamanlı hizmet-hizmet çağrılarına bağlıysa, yerleşik iletişim ilkelerine sahip bir platformu tercih edin. Container Apps, bu temel bilgileri ek altyapı olmadan Dapr aracılığıyla sağlar. AKS, Istio gibi servis ağları aracılığıyla, mesh düzeyinde trafik ilkeleri, yeniden denemeler ve devre kesme üzerinde denetim sahibi olmanızı sağlar. Mesh yaşam döngüsünü, yapılandırmayı ve yükseltmeleri yönetirsiniz.

Hizmetleriniz öncelikli olarak kuyruklar veya olay akışları gibi zaman uyumsuz mesajlaşma aracılığıyla iletişim kurarsa, sdk veya soyutlama aracılığıyla bu hizmetlerle etkileşim kurmanız gerektiğinden platformun yerleşik iletişim özellikleri daha az önemlidir. Platform zaman aşımları sorun haline gelebileceğinden, uzun süre çalışan işlemler için Asenkron İstek-Cevap deseni kullanın. Örneğin İşlevler ve App Service, Azure Load Balancer sınırları nedeniyle 230 saniyelik http yanıt zaman aşımını zorunlu tutar.

Bağımsız ölçeklendirme

Bir bileşimdeki her mikro hizmetin farklı yük özellikleri vardır.

Hizmetlerinizde yüksek oranda değişken veya ani trafik varsa, Kapsayıcı Uygulamalar ve İşlevler her bir hizmet için ölçeklenir ve boşta kalan hizmetleri sıfır seviyesine düşürebilir. Bu yaklaşım kullanılmayan kapasite ücretlerini önler. İşlevler için her işlev uygulaması ölçeklendirme birimidir, bu nedenle her mikro hizmeti kendi işlev uygulaması olarak dağıtın. AKS, dağıtım başına ölçeklendirme sağlar. Siz, sağlanan paylaşılan düğüm havuzlarını yönetirsiniz ve kullanıcı düğüm havuzları sıfıra ölçeklendirilebilir.

Sıfıra ölçeklendirilen platformlar, boşta olan bir hizmet ilk isteğini aldığında soğuk başlatma gecikme süresine neden olur. Mikro hizmetler mimarisinde, tek bir kullanıcı isteği birden çok hizmette geçiş yapabilir. Çağrı zinciri içindeki birkaç hizmet hazır değilse, gecikme katlanır. Düşük gecikme süresi gerektiren eşzamanlı hizmetler arası çağrılar için platformun soğuk başlatma azaltma özelliklerini kullanın veya soğuk başlangıçları önlemek için minimum örnekleri aktif tutmak için maliyeti ödeyin.

Hizmetlerinizde sabit, öngörülebilir yük varsa, tüketime dayalı faturalama yerine ayrılmış kapasite için ödeme yaptığınız için AKS veya App Service maliyetleri düşürebilir.

Bağımsız dağıtılabilirlik

Sistemin geri kalanını etkilemeden tek tek mikro hizmetleri dağıtmanız, güncelleştirmeniz ve geri almanız gerekir. Dört platform da bağımsız dağıtılabilirliği destekler, ancak değişiklikleri doğrulama yönteminize göre farklılık gösterir. Container Apps ve AKS, aşamalı dağıtımlar için trafiğin yerel olarak bölünmesini sağlar. App Service, dağıtım yuvaları arasında yüzde tabanlı trafik yönlendirmesini destekler. İşlevler, Premium ve Ayrılmış planlarda dağıtım yuvalarını destekler.

Dağıtılmış gözlemlenebilirlik

Tek bir kullanıcı isteği birçok hizmette geçiş yapabilir. Tüm çağrı zincirinde bağıntılı izlemelere ihtiyacınız varsa platformunuzun gözlemlenebilirlik araçlarının izleme stratejinizle tümleştirildiğini doğrulayın. Container Apps, Dapr izleme ile yerleşik gözlemlenebilirlik sağlar. AKS, izleme arka ucunuzu (Jaeger, Zipkin veya Azure İzleyici gibi) seçmenize olanak tanıyan OpenTelemetry ve açık kaynak izleme araçlarıyla tümleştirilir, ancak koleksiyon işlem hattını dağıtmanızı ve yapılandırmanızı gerektirir. İşlevler ve App Service, minimum yapılandırmayla uçtan uca işlem izleme için Application Insights ile tümleşir.

Bileşimdeki her hizmetin istek oranı, hata oranı ve gecikme süresi gibi hizmet başına ölçümleri sağladığından emin olun. Bu ölçümler, günlükleri tüm çağrı zinciri arasında ilişkilendirmeden hangi hizmetin düşüşe geçmiş olduğunu belirlemenize yardımcı olur.

Durum yönetimi

Mikro hizmetler mimarisinde her hizmet genellikle kendi verilerine sahiptir ve durumu ayrılmış bir veritabanı veya önbellekle dışlaştırır. Bu düzen, hizmetleri bağımsız olarak dağıtılabilir tutar ve veri deposu ayrı bir Azure kaynağı olduğundan dört platform da aynı şekilde destekler.

Bir hizmetin aktör tabanlı desenler, iş akışı düzenlemesi veya ayrılmış örnek başına depolama gibi platform tarafından yönetilen durum soyutlamalarına ihtiyacı olduğunda platformlar farklılık gösterir:

  • AKS, küme içi veri depolarını ve örnek başına kararlı kimliği destekleyen kalıcı birimler ve StatefulSets aracılığıyla en fazla esnekliği sağlar.

  • Container Apps, Dapr aktörleri de dahil olmak üzere birim bağlamalarını ve Dapr durum yönetimini destekler.

  • İşlevler, Dayanıklı İşlevler aracılığıyla durum bilgisi olan düzenleme ve varlıkları destekler.

  • App Service, Azure Dosyalar bağlamaları aracılığıyla paylaşılan depolamayı destekler, ancak örnek başına depolama veya platform düzeyinde durum soyutlamaları sağlamaz.

Dikkat edilmesi gereken noktalar

Bu önemli noktalar, bir iş yükünün kalitesini artırmak için kullanabileceğiniz bir dizi yol gösteren ilke olan Azure İyi Tasarlanmış Çerçeve'nin yapı taşlarını uygular. Daha fazla bilgi için bkz. Well-Architected Framework.

Güvenilirlik

Güvenilirlik, uygulamanızın müşterilerinize sağladığınız taahhütleri karşılayabilmesine yardımcı olur. Daha fazla bilgi için bkz . Güvenilirlik için tasarım gözden geçirme denetim listesi.

Mikro hizmetler mimarisinde birincil güvenilirlik riski art arda hatadır. İyi durumda olmayan bir hizmet, arayanların zaman aşımları toplamasına neden olur ve sorun çağrı zincirinde dışa doğru yayılır. Platform seçiminiz bu riski nasıl azaltabileceğinizi etkiler.

  • AKS ve Container Apps, sağlıksız örnekleri algılayan ve bunları otomatik olarak döngüden çıkaran platform düzeyinde sağlık denetimleri sağlar.

  • İşlevler, tetikleyici türüne göre başarısız yürütmeleri yeniden dener.

Platformdan bağımsız olarak, tek bir hizmet hatasının sistem genelinde kesintiye dönüşmesini önlemek için devre kesicileri uygulayın, geri alma ile ilkeleri yeniden deneyin ve hizmetler arası iletişiminizde zaman aşımları yapın.

Veri merkezi düzeyindeki hatalara karşı koruma sağlamak için her hizmeti kullanılabilirlik alanları arasında dağıtın. Karma platform bileşiminde, kullanımdaki tüm platformların dağıtım bölgeniz için bölge yedekliliğini desteklediğini doğrulayın.

Platforma özgü güvenilirlik kılavuzu için AKS, Container Apps ve İşlevler için Well-Architected Framework hizmet kılavuzlarının güvenilirlik bölümlerine bakın.

Güvenlik

Güvenlik, kasıtlı saldırılara ve değerli verilerinizin ve sistemlerinizin kötüye kullanımına karşı güvence sağlar. Daha fazla bilgi için bkz . Güvenlik için tasarım gözden geçirme denetim listesi.

Her hizmet-hizmet çağrısı bir ağ sınırını aştığı için mikro hizmetler saldırı yüzeyini artırır. Tüm hizmetler arası trafiği güvenilmeyen olarak değerlendirin ve mTLS aracılığıyla şifreleyin. AKS , Istio gibi hizmet kafesleri aracılığıyla mTLS'yi destekler. Container Apps Dapr veya ortam düzeyinde yapılandırma aracılığıyla mTLS sağlar. İşlevler ve App Service platform düzeyinde mTLS sağlamaz. Bu platformlar kuruluşunuzda hizmet barındırıyorsa uygulama katmanı HTTPS, API ağ geçidi ilkeleri veya sanal ağ yalıtımı aracılığıyla aktarım güvenliğini zorunlu kılın.

Birçok hizmetin bileşiminde, her hizmetin yalnızca gerekli kaynaklar için kimlik doğrulaması yapması gerekir. İş yükünde tek bir kimlik paylaşmak yerine hizmet başına kimlikler atayın. Platforma özgü mekanizmalar için karşılaştırma tablosundaki hizmet başına kimlik satırına bakın.

Platforma özgü güvenlik yönergeleri için AKS, Container Apps ve İşlevler için Well-Architected Framework hizmet kılavuzlarının güvenlik bölümlerine bakın.

Maliyet İyileştirmesi

Maliyet İyileştirme, gereksiz giderleri azaltmanın ve operasyonel verimlilikleri iyileştirmenin yollarına odaklanır. Daha fazla bilgi için bkz . Maliyet İyileştirme için tasarım gözden geçirme denetim listesi.

Mikro hizmetler mimarisi onlarca hizmet içerebilir ve her hizmet farklı trafik hacimlerini işler. Her hizmeti, trafik düzenine uyan faturalama modeliyle eşleştirin. Container Apps ve İşlevler gibi tüketim tabanlı platformlar boşta kalan hizmetleri sıfıra ölçeklendirir, ancak AKS gibi ayrılmış işlem, sürekli yüke sahip hizmetler için daha uygun maliyetli olabilir. Karma platform oluşturmada hizmet başına faturalama esnekliği, başlıca maliyet avantajlarından biridir. Ancak, platformlar arasında ayrı dağıtım işlem hatlarını, izleme yapılandırmalarını ve ekip uzmanlığını korumanın ek yükünü dikkate alın.

Platforma özgü maliyet yönergeleri için AKS, Container Apps ve İşlevler için Well-Architected Framework hizmet kılavuzlarının maliyet iyileştirme bölümlerine bakın.

Referans mimariler

Bu makaledeki karşılaştırma ölçütlerini uygulayarak seçeneklerinizi bir veya iki platforma daraltın. Hizmetlerinizin temsili bir alt kümesini dağıtarak ve hizmetler arası iletişimi, ölçeklendirme davranışını ve dağıtım iş akışlarını gereksinimlerinize göre test ederek kavram kanıtı çalıştırın. Üretime geçmeden önce platformun ekibinizin operasyonel beklentilerini karşıladığını onaylayın. Aşağıdaki mimariler üretime hazır başlangıç noktaları sağlar:

Sonraki adım