Aracılığıyla paylaş


Java için Güvenilir Web Uygulaması düzeni

Bu makalede Reliable Web App desenini uygulamaya yönelik yönergeler sağlanmaktadır. Bu düzende, buluta geçiş için web uygulamalarının nasıl yeniden platforma alındığı açıklanır. Azure Well-Architected Framework ilkeleriyle uyumlu açıklayıcı mimari, kod ve yapılandırma yönergeleri sağlar.

Java için Reliable Web App desenini neden kullanmalısınız?

Reliable Web App düzeni, web uygulamalarını buluta geçirirken nasıl yeniden platform oluşturabileceğinizi tanımlayan bir dizi ilke ve uygulama tekniğidir. Bulutta başarılı olmak için en düşük kod güncelleştirmelerini vurgular. Bu kılavuzda, referans uygulaması tutarlı bir örnek olarak kullanılır. Contoso Fiber adlı kurgusal şirketin yeniden platform oluşturma yolculuğunu, geçişinizle ilgili iş bağlamı sağlamak amacıyla izler. Contoso Fiber, Java için Reliable Web App desenini uygulamadan önce Spring Boot çerçevesiyle oluşturulmuş monolitik, şirket içi bir Müşteri Hesabı Yönetim Sistemi (CAMS) çalıştırır.

Tavsiye

GitHub logosu. Reliable Web App deseninin başvuru uygulaması (örnek), tamamlanmış bir uygulamanın son durumunu temsil eder. Bu üretim sınıfı web uygulaması, bu makalede açıklanan tüm kod, mimari ve yapılandırma güncelleştirmelerini içerir. Kendi Güvenilir Web Uygulama deseninizi uygularken size rehberlik etmesi için referans uygulamayı dağıtın ve kullanın.

Güvenilir Web Uygulaması modelini uygulamak

İhtiyacınız olan belirli kılavuzu bu makalenin aşağıdaki bölümlerinde bulabilirsiniz:

  • İş bağlamı: Bu kılavuzu iş bağlamınızla uyumlu hale getirme ve yeniden form oluşturma kararlarını yönlendiren anlık ve uzun vadeli hedefler tanımlamayı öğrenin.

  • Mimari kılavuzu: Doğru bulut hizmetlerini seçin ve iş gereksinimlerinizi karşılayan bir mimari tasarlayın.

  • Kod kılavuzu: Web uygulamanızın buluttaki güvenilirliğini ve performans verimliliğini artırmak için Yeniden Deneme, Devre Kesici ve Cache-Aside tasarım desenlerini uygulayın.

  • Yapılandırma kılavuzu: Kimlik doğrulama ve yetkilendirmeyi, yönetilen kimlikleri, haklanmış ortamları, kod olarak altyapıyı (IaC) ve izlemeyi yapılandırın.

İş bağlamı

Web uygulamasını yeniden oluşturmanın ilk adımı, iş hedeflerinizi tanımlamaktır. Web uygulamanız için gelecekteki hedeflerin yanı sıra hizmet düzeyi hedefleri (SLO' lar) ve maliyet iyileştirme hedefleri gibi anlık hedefler belirleyin. Bu hedefler, bulut hizmetleri seçiminizi ve buluttaki uygulamanızın mimarisini etkiler. Web uygulamanız için 99,9% çalışma süresi gibi bir hedef SLO tanımlayın. Web uygulamanızın kullanılabilirliğini etkileyen tüm hizmetler için bileşik hizmet düzeyi sözleşmesini (SLA) hesaplayın. Her hizmetin SLA'sının neyi taahhüt ettiğini anlamak için hizmet düzeyi sözleşmesini okumayı öğrenin.

Contoso Fiber, şirket içi CAMS web uygulamasını diğer bölgelere ulaşmak için genişletmek istiyor. Şirket, web uygulamasındaki artan talebi karşılamak için aşağıdaki hedefleri oluşturur:

  • Düşük maliyetli, yüksek değerli kod değişiklikleri uygulayın.
  • %99,9 SLO'ya ulaşın.
  • DevOps uygulamalarını benimseme.
  • Maliyet açısından optimize edilmiş ortamlar oluşturun.
  • Güvenilirliği ve güvenliği geliştirin.

Contoso Fiber, şirket içi altyapısının uygulamayı ölçeklendirmek için uygun maliyetli bir çözüm olmadığını belirler. Şirket, CAMS web uygulamasını Azure'a geçirmenin, anlık ve gelecekteki hedeflerine ulaşmanın en uygun maliyetli yolu olduğuna karar verir.

Mimari kılavuzu

Reliable Web App deseninin birkaç temel mimari öğesi vardır. Uç nokta çözümlemesini yönetmek için Etki Alanı Adı Sistemi (DNS), kötü amaçlı HTTP trafiğini engellemek için bir web uygulaması güvenlik duvarı ve gelen kullanıcı isteklerini yönlendirmek ve korumaya yardımcı olmak için bir yük dengeleyici gerekir. Uygulama platformu web uygulaması kodunuzu barındırıyor ve arka uç hizmetlerini bir sanal ağdaki özel uç noktalar üzerinden çağırıyor. Uygulama performansı izleme aracı, web uygulamanızı anlamanıza yardımcı olmak için ölçümleri ve günlükleri yakalar.

Reliable Web App deseninin temel mimari öğelerini gösteren diyagram.

Mimariyi tasarlama

Kurtarma süresi hedefiniz (RTO) ve kurtarma noktası hedefiniz (RPO) gibi kurtarma ölçümlerinizi destekleyecek şekilde altyapınızı tasarlar. RTO, kullanılabilirliği etkiler ve SLO'nuzu mutlaka desteklemelidir. Bir RPO belirleyin ve RPO'yu karşılamak için veri yedekliliğini yapılandırın.

Doğru Azure hizmetlerini seçin

Bir web uygulamasını buluta taşıdığınızda, iş gereksinimlerinizi karşılayan ve şirket içi web uygulamasının özellikleriyle uyumlu Azure hizmetlerini seçin. Bu hizalama, yeniden platform oluşturma çabasını en aza indirmeye yardımcı olur. Örneğin, aynı veritabanı altyapısını tutmanıza ve mevcut ara yazılımları ve çerçeveleri desteklemenize olanak sağlayan hizmetleri kullanın.

Geçiş öncesinde Contoso Fiber'in CAMS web uygulaması şirket içi, monolitik bir Java uygulamasıdır. PostgreSQL veritabanına sahip bir Spring Boot uygulamasıdır. Web uygulaması, çalışanlar için bir iş kolu (LOB) destek uygulamasıdır. Müşteri desteği servis taleplerini yönetmek için bunu kullanırlar. Uygulama, ölçeklenebilirlik ve özellik dağıtımıyla ilgili yaygın zorluklarla karşılaşıyor. Bu başlangıç noktası, iş hedefleri ve SLO'larla birlikte hizmet seçimlerini etkiler.

Aşağıdaki liste, web uygulamanız için doğru Azure hizmetlerini seçmeye yönelik rehberlik sağlar ve Contoso Fiber'in neden belirli hizmetleri seçtiğini açıklar:

  • Uygulama platformu: Uygulama platformunuz olarak Azure App Service'i kullanın. Contoso Fiber aşağıdaki nedenlerle App Service'i kullanır:

    • Doğal ilerleme: Contoso Fiber, şirket içi sunucusuna bir Spring Boot JAR dosyası dağıtır ve bu dağıtım modeli için yeniden tasarlama miktarını en aza indirmek ister. App Service, Spring Boot uygulamalarını çalıştırmak için sağlam destek sağlar ve bu da bunu uygun bir seçenek haline getirir. Azure Container Apps de bu uygulama için uygun bir seçenektir. Daha fazla bilgi için bkz . Container Apps'e genel bakış ve Container Apps'te Java'ya genel bakış.

    • Yüksek SLA: App Service, üretim gereksinimlerini karşılayan yüksek bir SLA sağlar.

    • Azaltılmış yönetim yükü: App Service yönetilen bir barındırma çözümüdür.

    • Kapsayıcıya alma özelliği: App Service, Azure Container Registry gibi özel kapsayıcı görüntüsü kayıt defterleriyle tümleşir. Contoso Fiber, gelecekte web uygulamasını kapsayıcıya almak için bu kayıt defterlerini kullanabilir.

    • Otomatik ölçeklendirme: Web uygulaması kullanıcı trafiğine göre hızla ölçeği artırabilir, azaltabilir, içeri doğru ve dışarı doğru ölçeklendirebilir.

  • Kimlik yönetimi: Kimlik ve erişim yönetimi çözümünüz olarak Microsoft Entra Id kullanın. Contoso Fiber aşağıdaki nedenlerle Microsoft Entra Id kullanır:

    • Kimlik doğrulaması ve yetkilendirme: Uygulamanın çağrı merkezi çalışanlarının kimliğini doğrulaması ve yetkilendirmesi gerekir.

    • Ölçeklenebilirlik: Microsoft Entra Id, daha büyük senaryoları destekleyecek şekilde ölçeklendirilir.

    • Kullanıcı kimliği denetimi: Çağrı merkezi çalışanları mevcut kurumsal kimliklerini kullanabilir.

    • Yetkilendirme protokolü desteği: Microsoft Entra ID, yönetilen kimlikler için OAuth 2.0'ı destekler.

  • Veritabanı: Aynı veritabanı altyapısını tutmanızı sağlayan bir hizmet kullanın. Seçiminize yol göstermek için veri deposu karar ağacını kullanın. Contoso Fiber, aşağıdaki nedenlerle PostgreSQL için Azure Veritabanı esnek sunucu dağıtım modelini kullanır:

    • Güvenilirlik: Esnek sunucu dağıtım modeli, birden çok kullanılabilirlik alanında alanlar arası yedekli yüksek kullanılabilirliği destekler. Bu yapılandırma, aynı Azure bölgesindeki farklı bir kullanılabilirlik alanında sıcak bir hazır bekleyen sunucu tutar. Yapılandırma, verileri bekleme sunucusuna zaman uyumlu olarak çoğaltır.

    • Bölgeler arası çoğaltma: PostgreSQL için Azure Veritabanı, verileri başka bir bölgedeki salt okunur çoğaltma veritabanına zaman uyumsuz olarak çoğaltmak için bir okuma çoğaltma özelliği sağlar.

    • Performans: PostgreSQL için Azure Veritabanı, gerçek kullanım verilerini kullanarak veritabanı performansını geliştiren tahmin edilebilir performans ve akıllı ayarlama sağlar.

    • Azaltılmış yönetim yükü: Bu yönetilen Azure hizmeti yönetim yükümlülüklerini azaltır.

    • Geçiş desteği: Şirket içi tek sunuculu PostgreSQL veritabanlarından veritabanı geçişlerini destekler. Contoso Fiber , geçiş işlemini basitleştirmek için geçiş aracını kullanabilir.

    • Şirket içi yapılandırmalarla tutarlılık: Contoso Fiber'in şu anda kullandığı sürüm de dahil olmak üzere PostgreSQL'in farklı topluluk sürümlerini destekler.

    • Kurtarılabilirlik: Esnek sunucu dağıtımı otomatik olarak sunucu yedeklemeleri oluşturur ve bunları aynı bölge içindeki alanlar arası yedekli depolamada (ZRS) depolar. Contoso Fiber, yedekleme saklama süresi içinde veritabanını belirli bir noktaya geri yükleyebilir. Yedekleme ve geri yükleme özelliği, şirket içi ortamlara kıyasla daha iyi bir RPO oluşturur.

  • Uygulama performansı izleme: Uygulamanızda telemetriyi analiz etmek için Application Insights'ı kullanın. Contoso Fiber aşağıdaki nedenlerle Application Insights'ı kullanır:

    • Azure İzleyici ile tümleştirme: Azure İzleyici ile en iyi tümleştirmeyi sağlar.

    • Anomali algılama: Performans anomalilerini otomatik olarak algılar.

    • Sorun giderme: Çalışan uygulamadaki sorunları tanılamaya yardımcı olur.

    • Izleme: Uygulama için kullanım verilerini toplar ve özel olayları izler.

    • Görünürlük boşluğu: Şirket içi çözümün uygulama performansı izleme çözümü yoktur. Application Insights, uygulama platformu ve koduyla kolay tümleştirme sağlar.

  • Önbellek: Web uygulaması mimarinize önbellek eklenip eklenmeyeceğini seçin. Azure Yönetilen Redis , birincil Azure önbellek çözümüdür. Redis yazılımını temel alan, yönetilen bir bellek içi veri deposu. Contoso Fiber aşağıdaki nedenlerle Azure Yönetilen Redis'i ekler:

    • Hız ve hacim: Sık erişilen ve yavaş değişen veriler için yüksek veri aktarım hızı ve düşük gecikme süreli okumalar sağlar.

    • Çeşitli desteklenebilirlik: Bu, web uygulamasının tüm örneklerinin kullanabileceği birleşik bir önbellek konumudur.

    • Dış veri deposu: Şirket içi uygulama sunucuları VM yerel önbelleğe alma kullanır. Bu kurulum, sık erişilen verileri boşaltmaz ve eski verileri geçersiz kılamaz.

    • Yapışkan olmayan oturumlar: Önbellek, web uygulamasının oturum durumunu dışlaştırmasına ve yapışkan olmayan oturumları kullanmasına olanak tanır. Şirket içinde çalışan çoğu Java web uygulaması, bellek içi istemci tarafı önbelleğini kullanır. Bu yaklaşım iyi ölçeklenmiyor ve ana bilgisayarda bellek kullanımını artırıyor. Azure Yönetilen Redis, uygulamaların ölçeklenebilirliğini ve performansını geliştirmek için yönetilen, ölçeklenebilir bir önbellek hizmeti sağlar. Contoso Fiber, önbellek soyutlama çerçevesi olarak Spring Cache'i kullandı ve Bir Ehcache sağlayıcısından Redis sağlayıcısına geçiş yapmak için yalnızca en az yapılandırma değişikliğine ihtiyacı vardı.

  • Yük dengeleyici: Hizmet olarak platform (PaaS) çözümleri kullanan web uygulamaları, web uygulaması mimarisine ve gereksinimlerine bağlı olarak Azure Front Door, Azure Application Gateway veya her ikisini de kullanmalıdır. Doğru yük dengeleyiciyi seçmek için yük dengeleyici karar ağacını kullanın. Contoso Fiber,99,9%SLO'sunu karşılamak için birden çok bölgede trafiği yönlendirebilen bir katman 7 yük dengeleyiciye ve çok bölgeli bir web uygulamasına ihtiyaç duyar. Şirket aşağıdaki nedenlerle Azure Front Door kullanıyor:

    • Genel yük dengeleme: Bu katman 7 yük dengeleyici, trafiği birden çok bölgeye yönlendirebilir.

    • Web uygulaması güvenlik duvarı: Azure Web Uygulaması Güvenlik Duvarı ile yerel olarak tümleşir.

    • Yönlendirme esnekliği: Uygulama ekibinin, uygulamada gelecekteki değişiklikleri desteklemek için giriş gereksinimlerini yapılandırmasına olanak tanır.

    • Trafik hızlandırma: Web uygulamasına en hızlı yolu bulmak için trafiği en uygun iletişim noktasına yönlendirir.

    • Özel etki alanları: Esnek etki alanı doğrulaması ile özel etki alanı adlarını destekler.

    • Sağlık denetimleri: Uygulamanın akıllı sağlık denetimleri izlemesi gerekmektedir. Azure Front Door, istemci isteklerini yönlendirmek için en iyi kaynağı belirlemek için yoklamadan gelen yanıtları kullanır.

    • İzleme desteği: Azure Front Door, hem Azure Front Door hem de güvenlik desenleri için hepsi bir arada bir pano ile yerleşik raporları destekler. Azure İzleyici ile tümleşen uyarılar sağlar. Azure Front Door, uygulamanın her isteği ve başarısız sağlık denetimlerini kaydetmesine olanak tanır.

    • Dağıtılmış hizmet reddi (DDoS) koruması: Katman 3 ve katman 4'te yerleşik DDoS korumasına sahiptir.

    • İçerik teslim ağı: Contoso Fiber'i içerik teslim ağı kullanacak şekilde konumlandırıyor. İçerik teslim ağı, site hızlandırma sağlar.

  • Web uygulaması güvenlik duvarı: Yaygın web açıklarından ve güvenlik açıklarından merkezi koruma sağlamak için Azure Web Uygulaması Güvenlik Duvarı'nı kullanın. Contoso Fiber aşağıdaki nedenlerle Azure Web Uygulaması Güvenlik Duvarı'nı kullanır:

    • Genel koruma: Performansı korurken gelişmiş genel web uygulaması koruması sağlar.

    • Botnet koruması: Ekip, botnetlerle ilgili güvenlik sorunlarını gidermek için ayarları izleyebilir ve yapılandırabilir.

    • Şirket içi ile eşdeğerlik: Şirket içi çözüm, BT tarafından yönetilen bir web uygulaması güvenlik duvarının arkasında çalışır.

    • Kullanım kolaylığı: Azure Web Uygulaması Güvenlik Duvarı, Azure Front Door ile tümleşir.

  • Gizli dizi yöneticisi:Azure'da yönetecek gizli dizileriniz varsa Azure Key Vault'ı kullanın. Contoso Fiber aşağıdaki nedenlerle Key Vault kullanır:

    • Şifreleme: Dinlenme halindeyken ve aktarım sırasında şifrelemeyi destekler.

    • Yönetilen kimlik desteği: Uygulama hizmetleri, gizli anahtar deposuna erişmek için yönetilen kimlikleri kullanabilir.

    • İzleme ve günlüğe kaydetme: Key Vault, denetim erişimini kolaylaştırır ve depolanan gizli diziler değiştiğinde uyarılar oluşturur.

    • Entegrasyon: Key Vault, Azure yapılandırma deposu (Azure Uygulama Yapılandırması) ve web barındırma platformu (App Service) ile yerel tümleştirme sağlar.

  • Uç nokta güvenliği: Sanal ağınızdaki özel bir uç nokta üzerinden PaaS çözümlerine erişmek için Azure Özel Bağlantı'sını kullanın. Sanal ağınız ile hizmet arasındaki trafik, Microsoft omurga ağı üzerinden hareket eder. Contoso Fiber, aşağıdaki nedenlerle Özel Bağlantı kullanır:

    • Gelişmiş güvenlik iletişimi: Uygulamanın Azure platformundaki hizmetlere özel olarak erişmesine olanak tanır ve veri sızıntılarına karşı korunmaya yardımcı olmak için veri depolarının ağ ayak izini azaltır.

    • En az çaba: Özel uç noktalar, web uygulamasının kullandığı web uygulaması platformunu ve veritabanı platformunu destekler. Her iki platform da mevcut şirket içi yapılandırmaları yansıtır, bu nedenle en az değişiklik gereklidir.

  • Ağ güvenliği: Gelen ve giden trafiği ağ düzeyinde denetlemek için Azure Güvenlik Duvarı'nı kullanın. Uzak Masaüstü Protokolü/Secure Shell (RDP/SSH) bağlantı noktalarını göstermeden gelişmiş güvenlikli VM'lere bağlanmak için Azure Bastion'ı kullanın. Contoso Fiber, merkez-uç ağ topolojisini benimser ve paylaşılan ağ güvenlik hizmetlerini hub'a yerleştirir. Azure Güvenlik Duvarı, ağ güvenliğini artırmak için uçlardan giden trafiği inceler. Şirket, DevOps alt ağındaki bir geçiş sunucusundan yüksek güvenlikli dağıtımlar için Azure Bastion kullanıyor.

Kod kılavuzu

Bir web uygulamasını başarıyla buluta taşımak için Yeniden Dene, Devre Kesici ve Cache-Aside desenlerini kullanarak web uygulaması kodunuzu güncelleştirmeniz gerekir.

Reliable Web App desenindeki tasarım desenlerinin rollerini gösteren diyagram.

Aşağıdaki tasarım desenleri, Well-Architected Framework yapılarından biriyle veya daha fazlasına eşleyen iş yükü avantajları sağlar:

  1. Yeniden Deneme düzeni , aralıklı olarak başarısız olabilecek işlemleri yeniden deneyerek geçici hataları işler. Bu düzeni diğer Azure hizmetlerine yapılan tüm giden çağrılarda uygulayın.

  2. Devre Kesici düzeni , bir uygulamanın geçici olmayan işlemleri yeniden denemesini engeller. Bu düzeni diğer Azure hizmetlerine yapılan tüm giden çağrılarda uygulayın.

  3. Cache-Aside deseni , isteğe bağlı verileri bir veri deposundan önbelleğe yükler. Veritabanına yönelik isteklerde bu düzeni uygulayın.

Tasarım deseni Güvenilirlik (RE) Güvenlik (SE) Maliyet İyileştirme (CO) Operasyonel Mükemmellik (OE) Performans Verimliliği (PE) WAF ilkelerini destekleme
Yeniden Deneme düzeni RE:07
Circuit Breaker tasarımı RE:03
RE:07
PE:07
PE:11
Cache-Aside düzeni RE:05
PE:08
PE:12

Yeniden Deneme desenini uygulama

Geçici hizmet kesintilerini gidermek için uygulama kodunuza Yeniden Deneme desenini ekleyin. Bu kesintilere geçici hatalar denir. Geçici hatalar genellikle saniyeler içinde çözülür. Başarısız istekleri yeniden göndermek için Yeniden Deneme desenini kullanabilirsiniz. Yeniden denemeler arasındaki gecikmeyi ve başarısızlığı kabul etmeden önce yapılacak deneme sayısını yapılandırmanıza olanak tanır.

Java'da Yeniden Deneme desenini uygulamak için basit bir hataya dayanıklılık kitaplığı olan Resilience4j kullanın. Yeniden Deneme örüntüsünü eklemek için, başvuru uygulaması hizmet planı denetleyicisinin listServicePlans yöntemine Yeniden Deneme anotasyonları ekler. Kod, ilk çağrı başarısız olursa, hizmet planları listesini veritabanından çağırmak için yeniden dener. Referans uygulaması için yeniden deneme ilkesi, en fazla deneme sayısını, bekleme süresini ve yeniden denenecek istisnaları içerir. Dosya application.properties'de yeniden deneme ilkesini yapılandırın.

    @GetMapping("/list")
    @PreAuthorize("hasAnyAuthority('APPROLE_AccountManager')")
    @CircuitBreaker(name = SERVICE_PLAN)
    @Retry(name = SERVICE_PLAN)
    public String listServicePlans(Model model) {
        List<serviceplandto> servicePlans = planService.getServicePlans();
        model.addAttribute("servicePlans", servicePlans);
        return "pages/plans/list";
    }

Devre Kesici desenini uygulama

Geçici hata olmayan hizmet kesintilerini işlemek için Devre Kesici düzenini kullanın. Devre Kesici düzeni, bir uygulamanın yanıt vermeyen bir hizmete sürekli olarak erişmeye çalışmasını engeller. Uygulamayı serbest bırakır ve uygulamanın kullanıcılar için performans bütünlüğünü koruması için merkezi işlem birimi (CPU) döngülerinin boşa harcanmasını önlemeye yardımcı olur.

Devre Kesici desenini uygulamak için Spring Cloud Circuit Breaker ve Resilience4j kullanın. Başvuru uygulaması, Devre Kesici özniteliğiyle yöntemleri dekore ederek Devre Kesici desenini uygular.

Cache-Aside desenini uygulama

Bellek içi veri yönetimini geliştirmek için web uygulamanıza Cache-Aside desenini ekleyin. Desen, uygulamaya veri isteklerini işleme ve önbellek ile veritabanı gibi kalıcı depolama alanı arasında tutarlılık sağlama sorumluluğunu atar. Yanıt sürelerini kısaltır, aktarım hızını artırır ve daha fazla ölçeklendirme gereksinimini azaltır. Ayrıca, birincil veri deposu üzerindeki yükü azaltır ve bu da güvenilirliği ve maliyet iyileştirmesini artırır. Cache-Aside desenini uygulamak için şu önerileri izleyin:

  • Uygulamayı önbellek kullanacak şekilde yapılandırın. Önbelleğe almayı etkinleştirmek için spring-boot-starter-cache paketini dosyanızda bir bağımlılık olarak ekleyin. Bu paket, Redis önbelleği için varsayılan yapılandırmalar sağlar.

  • Yüksek ihtiyaç duyulan verileri önbelleğe alın. Verimliliğini artırmak için yüksek gereksinimli verilere Cache-Aside desenini uygulayın. Veritabanının CPU'sunu, belleğini ve depolama alanını izlemek için Azure İzleyici'yi kullanın. Bu ölçümler, Cache-Aside desenini uyguladıktan sonra daha küçük bir veritabanı SKU'su kullanıp kullanamayacağınızı belirlemenize yardımcı olur. Kodunuzda belirli verileri önbelleğe almak için ek açıklamayı @Cacheable ekleyin. Bu ek açıklama Spring'e hangi yöntemlerin sonuçlarının önbelleğe alınması gerektiğini belirtir.

  • Önbellek verilerini güncel tutun. En son veritabanı değişiklikleriyle eşitlemek için düzenli önbellek güncelleştirmeleri zamanlayın. Veri dalgalanmasını kullanın ve kullanıcının en uygun yenileme hızını belirlemesi gerekir. Bu uygulama, uygulamanın hızlı erişim ve geçerli bilgiler sağlamak için Cache-Aside desenini kullanmasını sağlar. Varsayılan önbellek ayarları web uygulamanıza uygun olmayabilir. Bu ayarları dosyada application.properties veya ortam değişkenlerinde özelleştirebilirsiniz. Örneğin, verilerin kaldırılmadan önce önbellekte ne kadar süreyle kalması gerektiğini denetlemek için değeri değiştirebilirsiniz spring.cache.redis.time-to-live (milisaniye cinsinden ifade edilir).

  • Veri tutarlılığı sağlayın. Veritabanı yazma işlemlerinden hemen sonra önbelleği güncelleştirmek için mekanizmalar uygulayın. Önbellek tutarlılığını sağlamak için olay temelli güncelleştirmeleri veya ayrılmış veri yönetimi sınıflarını kullanın. Önbelleği veritabanı değişiklikleriyle tutarlı bir şekilde eşitlemek, Cache-Aside deseninin merkezinde yer alır.

Yapılandırma kılavuzu

Aşağıdaki bölümlerde yapılandırma güncelleştirmelerini uygulama hakkında yönergeler sağlanır. Her bölüm, Well-Architected Framework'ün bir veya daha fazla sütunuyla uyumludur.

Konfigürasyon Güvenilirlik (RE) Güvenlik (SE) Maliyet İyileştirme (CO) Operasyonel Mükemmellik (OE) Performans Verimliliği (PE) WAF ilkelerini destekleme
Kullanıcı kimlik doğrulama ve yetkilendirmeyi yapılandırma SE:05
OE:10
Yönetilen kimlikleri uygulamak SE:05
OE:10
Ortamları haklarına ayırma CO:05
CO:06
Otomatik ölçeklendirmeyi uygulama RE:06
CO:12
PE:05
Kaynak dağıtımlarını otomatikleştirme OE:05
İzlemeyi uygulama OE:07
PE:04

Kullanıcı kimlik doğrulama ve yetkilendirmeyi yapılandırma

Web uygulamalarını Azure'a geçirirken kullanıcı kimlik doğrulaması ve yetkilendirme mekanizmalarını yapılandırın. Şu önerileri izleyin:

  • Kimlik platformu kullanın. Web uygulaması kimlik doğrulamasını ayarlamakiçin geliştiriciler için Microsoft kimlik platformunu kullanın. Bu platform, tek bir Microsoft Entra dizini, farklı kuruluşlardan birden çok Microsoft Entra dizini ve Microsoft kimlikleri veya sosyal hesapları kullanan uygulamaları destekler.

    Microsoft Entra ID için Spring Boot Starter, kolay yapılandırma ve tümleştirme sağlamak için Spring Security ve Spring Boot kullanır. Spring Cloud bileşenleriyle çeşitli kimlik doğrulama akışları, otomatik belirteç yönetimi, özelleştirilebilir yetkilendirme ilkeleri ve tümleştirme özellikleri sağlar. Bu araç, el ile kitaplık veya ayar yapılandırması olmadan Spring Boot uygulamalarına basit Microsoft Entra ID ve OAuth 2.0 tümleştirmesi sağlar.

    Başvuru uygulaması, web uygulamasının kimlik sağlayıcısı olarak Microsoft kimlik platformunu (Microsoft Entra Id) kullanır. Microsoft Entra hesabı olan bir kullanıcıda oturum açmak için OAuth 2.0 yetkilendirme kodu iznini kullanır. Aşağıdaki XML kod parçacığı, OAuth 2.0 yetkilendirme kodu verme akışının gerekli iki bağımlılığını tanımlar. Bağımlılık com.azure.spring: spring-cloud-azure-starter-active-directory , Spring Boot uygulamasında Microsoft Entra kimlik doğrulamasını ve yetkilendirmesini etkinleştirir. Bağımlılık org.springframework.boot: spring-boot-starter-oauth2-client , Spring Boot uygulamasında OAuth 2.0 kimlik doğrulamasını ve yetkilendirmesini etkinleştirir.

    <dependency>
        <groupid>com.azure.spring</groupid>
        <artifactid>spring-cloud-azure-starter-active-directory</artifactid>
    </dependency>
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-oauth2-client</artifactid>
    </dependency>
    
  • Uygulama kaydı oluşturun. Microsoft Entra Id, birincil kiracıda bir uygulama kaydı gerektirir. Uygulama kaydı, web uygulamasına erişim elde eden kullanıcıların birincil kiracıda kimlikleri olduğundan emin olmanıza yardımcı olur. Referans uygulaması Terraform'u kullanarak, uygulama için özel Hesap Yöneticisi rolü ile birlikte bir Microsoft Entra ID uygulama kaydı oluşturur.

    resource "azuread_application" "app_registration" {
      display_name     = "${azurecaf_name.app_service.result}-app"
      owners           = [data.azuread_client_config.current.object_id]
      sign_in_audience = "AzureADMyOrg"  # single tenant
    
      app_role {
        allowed_member_types = ["User"]
        description          = "Account Managers"
        display_name         = "Account Manager"
        enabled              = true
        id                   = random_uuid.account_manager_role_id.result
        value                = "AccountManager"
      }
    }
    
  • Uygulamada yetkilendirmeyi zorunlu kılma. Uygulama rollerine en az ayrıcalık atamak için rol tabanlı erişim denetimini (RBAC) kullanın. Çakışmayı önlemek ve netlik sağlamak için farklı kullanıcı eylemleri için belirli roller tanımlayın. Kullanıcıları uygun rollerle eşleyin ve yalnızca gerekli kaynaklara ve eylemlere erişebildiklerinden emin olun. Spring Security'yi Microsoft Entra Id için Spring Boot Starter kullanacak şekilde yapılandırın. Bu kitaplık, Microsoft Entra Id ile tümleştirmeye olanak tanır ve kullanıcıların kimliklerinin güvenli bir şekilde doğrulanmasını sağlamaya yardımcı olur. Daha fazla güvenlik özelliğine erişmek için Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) yapılandırın ve etkinleştirin. Bu özellikler arasında belirteç önbelleğe alma ve otomatik belirteç yenileme yer alır.

    Referans uygulama, Contoso Fiber hesap yönetim sistemindeki kullanıcı rolleri türlerini yansıtan uygulama rolleri oluşturur. Roller yetkilendirme sırasında izinlere çevrilir. CAMS'deki uygulamaya özgü rollere örnek olarak Hesap Yöneticisi, Birinci Düzey (L1) Destek Temsilcisi ve Saha Hizmeti Temsilcisi verilebilir. Hesap Yöneticisi rolünün yeni uygulama kullanıcıları ve müşterileri ekleme izinleri vardır. Saha Hizmeti Temsilcisi destek biletleri oluşturabilir. PreAuthorize özniteliği, erişimi belirli rollere kısıtlar.

        @GetMapping("/new")
        @PreAuthorize("hasAnyAuthority('APPROLE_AccountManager')")
        public String newAccount(Model model) {
            if (model.getAttribute("account") == null) {
                List<ServicePlan> servicePlans = accountService.findAllServicePlans();
                ServicePlan defaultServicePlan = servicePlans.stream().filter(sp -> sp.getIsDefault() == true).findFirst().orElse(null);
                NewAccountRequest accountFormData = new NewAccountRequest();
                accountFormData.setSelectedServicePlanId(defaultServicePlan.getId());
                model.addAttribute("account", accountFormData);
                model.addAttribute("servicePlans", servicePlans);
            }
            model.addAttribute("servicePlans", accountService.findAllServicePlans());
            return "pages/account/new";
        }
        ...
    

    Microsoft Entra Id ile tümleştirmek için başvuru uygulaması OAuth 2.0 yetkilendirme kodu verme akışını kullanır. Bu akış, kullanıcının Bir Microsoft hesabı kullanarak oturum açmasına olanak tanır. Aşağıdaki kod parçacığı, kimlik doğrulaması ve yetkilendirme için Microsoft Entra ID'yi kullanacak şekilde SecurityFilterChain öğesinin nasıl yapılandırılacağını göstermektedir.

    @Configuration(proxyBeanMethods = false)
    @EnableWebSecurity
    @EnableMethodSecurity
    public class AadOAuth2LoginSecurityConfig {
        @Bean
        SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication())
                .and()
                    .authorizeHttpRequests()
                .requestMatchers(EndpointRequest.to("health")).permitAll()
                .anyRequest().authenticated()
                .and()
                    .logout(logout -> logout
                                .deleteCookies("JSESSIONID", "XSRF-TOKEN")
                                .clearAuthentication(true)
                                .invalidateHttpSession(true));
            return http.build();
        }
    }
    ...
    
  • Depolamaya geçici erişimi tercih edin. Yetkisiz erişim ve ihlallere karşı koruma sağlamak için geçici izinleri kullanın. Örneğin, erişimi belirli bir süreyle sınırlamak için paylaşılan erişim imzalarını (SAS) kullanabilirsiniz. Geçici erişim verdiğinizde güvenliği en üst düzeye çıkarmak için kullanıcı temsilcisi SAS özelliğini kullanın. Microsoft Entra Id kimlik bilgilerini kullanan ve kalıcı bir depolama hesabı anahtarı gerektirmeyen tek SAS'tir.

  • Azure'da yetkilendirmeyi zorunlu kılma. Kullanıcı kimliklerine en az ayrıcalık atamak için Azure RBAC) kullanın. Azure RBAC, kimliklerin erişebileceği Azure kaynaklarını, bu kaynaklarla yapabileceklerini ve erişimleri olan alanları tanımlar.

  • Kalıcı yükseltilmiş izinlerden kaçının. Ayrıcalıklı işlemler için tam zamanında (JIT) erişim vermek için Microsoft Entra Privileged Identity Management'ı (PIM ) kullanın. Örneğin, geliştiricilerin veritabanlarını oluşturmak ve silmek, tablo şemalarını değiştirmek ve kullanıcı izinlerini değiştirmek için genellikle yönetici düzeyinde erişime ihtiyacı vardır. JIT erişimini kullandığınızda, kullanıcı kimlikleri ayrıcalıklı görevleri gerçekleştirmek için geçici izinler alır.

Yönetilen kimlikleri uygulamak

Bunları destekleyen tüm Azure hizmetleri için yönetilen kimlikleri kullanın. Yönetilen kimlik, kimlik bilgilerini yönetmenize gerek kalmadan Azure kaynaklarının, özellikle iş yükü kimliklerinin kimlik doğrulaması yapmasına ve diğer Azure hizmetleriyle etkileşim kurmasına olanak tanır. Geçişi basitleştirmek için karma ve eski sistemler için şirket içi kimlik doğrulama çözümlerini kullanmaya devam edebilirsiniz, ancak bunları en kısa sürede yönetilen kimliklere geçirmeniz gerekir. Yönetilen kimlikleri uygulamak için şu önerileri izleyin:

  • Doğru yönetilen kimlik türünü seçin. Aynı izin kümesine ihtiyaç duyan iki veya daha fazla Azure kaynağınız varsa, kullanıcı tarafından atanan yönetilen kimlikleri tercih edin. Bu yaklaşım, bu kaynakların her biri için sistem tarafından atanan yönetilen kimlikler oluşturmaktan ve tümüne aynı izinleri atamaktan daha verimlidir. Aksi takdirde, sistem tarafından atanan yönetilen kimlikleri kullanın.

  • En düşük ayrıcalıkları yapılandırın. Azure RBAC'yi yalnızca veritabanlarındaki oluşturma, okuma, güncelleştirme ve silme (CRUD) eylemleri veya gizli dizilere erişme gibi işlemler için kritik olan izinleri vermek için kullanın. İş yükü kimliği izinleri kalıcıdır, bu nedenle iş yükü kimlikleri için JIT veya kısa vadeli izinler sağlayamazsınız. Azure RBAC belirli bir senaryoya uymuyorsa Azure RBAC'yi Azure hizmet düzeyi erişim ilkeleriyle destekleyin.

  • Kalan sırlar için güvenlik sağlayın. Kalan tüm gizli bilgileri Key Vault'ta depolayın. Her HTTP isteği yerine uygulama başlangıcında Key Vault'tan gizli dizileri yükleyin. HTTP isteklerinde yüksek frekanslı erişim Key Vault işlem sınırlarını aşabilir. Uygulama yapılandırmalarını Uygulama Yapılandırması'nda depolayın.

Ortamları haklarına ayırma

Her ortamın gereksinimlerini aşmadan karşılayan Azure hizmetlerinin performans katmanlarını (SKU) kullanın. tr-TR: Ortamlarınızı doğru boyutlandırmak için aşağıdaki adımları izleyin:

  • Maliyetleri tahmin edin. Her ortamın maliyetini tahmin etmek için Azure fiyatlandırma hesaplayıcısını kullanın.

  • Üretim ortamlarını iyileştirme. Üretim ortamlarında, üretim için gereken SLA'yı, özellikleri ve ölçeği karşılayan SKU'lar gerekir. Kaynak kullanımını sürekli izleyin ve SKU'ları gerçek performans gereksinimleriyle uyumlu olacak şekilde ayarlayın.

  • Üretim öncesi ortamları iyileştirin.Üretim öncesi ortamlar daha düşük maliyetli kaynaklar kullanmalı ve geliştirme/test fiyatlandırması için Azure planı gibi indirimlerden yararlanmalıdır. Bu ortamlarda, gerekli olmayan hizmetleri devre dışı bırakın. Ayrıca, risklerden kaçınmak için üretim öncesi ortamların üretim ortamlarına yeterince benzediğinden emin olun. Gereksiz maliyetlere neden olmadan testin etkili kalmasını sağlamak için bu dengeyi koruyun.

  • SKU'ları tanımlamak için IaC kullanın. Ortama göre doğru SKU'ları dinamik olarak seçmek ve dağıtmak için IaC uygulayın. Bu yaklaşım tutarlılığı artırır ve yönetimi basitleştirir.

Örneğin, başvuru uygulamasının dağıtılacak SKU'yu belirten isteğe bağlı bir parametresi vardır. Ortam parametresi Terraform şablonunun geliştirme SKU'larını dağıtması gerektiğini belirtir:

azd env set APP_ENVIRONMENT prod

Otomatik ölçeklendirmeyi uygulama

Otomatik ölçeklendirme, bir web uygulamasının dayanıklı, esnek ve dinamik iş yüklerini verimli bir şekilde işleyebilmesini sağlamaya yardımcı olur. Otomatik ölçeklendirmeyi uygulamak için şu önerileri izleyin:

  • Ölçeği genişletmeyi otomatikleştirin. Üretim ortamlarında yatay ölçeklendirmeyi otomatikleştirmek için Azure otomatik ölçeklendirme özelliğini kullanın. Uygulamanızın farklı yükleri işleyebilmesi için önemli performans ölçümlerine göre ölçeği genişletmek için otomatik ölçeklendirme kurallarını yapılandırın.

  • Ölçeklendirme tetikleyicilerini iyileştirme. Uygulamanızın ölçeklendirme gereksinimlerini bilmiyorsanız, ilk ölçeklendirme tetikleyiciniz olarak CPU kullanımını kullanın. Ölçeklendirme tetikleyicilerinizi RAM, ağ aktarım hızı ve disk girişi/çıkışı (G/Ç) gibi diğer ölçümleri içerecek şekilde geliştirin. Amaç, daha iyi performans için web uygulamanızın davranışıyla eşleştirmektir.

  • Yatay ölçekleme arabelleği sağlayın. Maksimum kapasiteye ulaşmadan önce ölçeklendirmeyi başlatmak için ölçeklendirme eşiklerinizi ayarlayın. Örneğin, ölçeklendirmeyi 100%ulaşana kadar beklemek yerine 85% CPU kullanımında gerçekleşecek şekilde yapılandırın. Bu proaktif yaklaşım performansı korumaya ve olası performans sorunlarını önlemeye yardımcı olur.

Kaynak dağıtımlarını otomatikleştirme

Tüm ortamlarda Azure kaynaklarını ve kodunu dağıtmak ve güncelleştirmek için otomasyonu kullanın. Şu önerileri izleyin:

  • IaC kullanın. Sürekli tümleştirme ve sürekli teslim (CI/CD) işlem hatlarını kullanarak IaC'yi dağıtın. Azure, her Azure kaynağı için önceden oluşturulmuş Bicep şablonları, Azure Resource Manager şablonları (ARM şablonları) JSON ve Terraform şablonları sağlar.

  • CI/CD işlem hattı kullanın. Kaynak denetiminden test, hazırlama ve üretim gibi çeşitli ortamlarınıza kod dağıtmak için CI/CD işlem hattı kullanın. Azure DevOps ile çalışıyorsanız Azure Pipelines'ı kullanın. GitHub projeleri için GitHub Actions'i kullanın.

  • Birim testlerini entegre etme. App Service'e dağıtımdan önce işlem hattınızdaki tüm birim testlerini çalıştırmaya ve doğrulamaya öncelik verme. Kapsamlı test kapsamı elde etmek için SonarQube gibi kod kalitesi ve kapsam araçlarını birleştirir.

  • Sahte çerçeveleri benimseyin. Dış uç noktaları içeren testlerde mock çerçeveleri kullanın. Bu çerçeveler sanal uç noktalar oluşturmanıza olanak tanır. Gerçek dış uç noktaları yapılandırma gereksinimini ortadan kaldırır ve ortamlar arasında tekdüzen test koşulları sağlar.

  • Güvenlik taramaları gerçekleştirin. Kaynak kodunuzda güvenlik açıklarını ve kodlama hatalarını bulmak için statik uygulama güvenlik testi (SAST) kullanın. Microsoft dışı kitaplıkları ve bileşenleri güvenlik risklerine karşı incelemek için yazılım oluşturma analizi (SCA) gerçekleştirin. Bu analizlere yönelik araçları hem GitHub hem de Azure DevOps ile tümleştirin.

İzlemeyi yapılandırma

Web uygulamanızın operasyonel mükemmelliği ve performans verimliliğini artırmak için uygulama ve platform izleme uygulayın. İzlemeyi uygulamak için şu önerileri izleyin:

  • Uygulama telemetrisi toplayın. İstek aktarım hızı, ortalama istek süresi, hatalar ve bağımlılık izleme gibi uygulama telemetrisini toplamak için Application Insights'ta otomatik müdahaleyi kullanın. Bu telemetriyi kullanmak için herhangi bir kodu değiştirmeniz gerekmez. Spring Boot, Application Insights'a Java sanal makinesi (JVM), CPU ve Tomcat gibi çeşitli temel ölçümleri kaydeder. Application Insights, Log4j ve Logback gibi günlük kaydı çerçevelerinden otomatik olarak veri toplar.

    Referans uygulaması, app service yapılandırmasında Terraform aracılığıyla Application Insights'ı app_settings sağlar.

    app_settings = {
        APPLICATIONINSIGHTS_CONNECTION_STRING = var.app_insights_connection_string
        ApplicationInsightsAgent_EXTENSION_VERSION = "~3"
        ...
    }
    

    Daha fazla bilgi için aşağıdaki makalelere bakın:

  • Özel uygulama ölçümleri oluşturun. Azure İzleyici OpenTelemetry Distro ekleyerek özel uygulama telemetrisini yakalamak için kod tabanlı enstrümantasyon uygulayın.

  • Platformu izleyin. Desteklenen tüm hizmetler için tanılamayı etkinleştirin. Tanı verilerini ilişkilendirilebilmesi için uygulama günlükleriyle aynı hedefe gönderin. Azure hizmetleri platform günlüklerini otomatik olarak oluşturur ancak yalnızca tanılamayı etkinleştirdiğinizde depolar. Tanılamayı destekleyen her hizmet için tanılama ayarlarını etkinleştirin.

    Başvuru uygulaması, desteklenen hizmetlerde Azure tanılamasını etkinleştirmek için Terraform kullanır. Aşağıdaki Terraform kodu, app service için tanılama ayarlarını yapılandırıyor:

    # Configure diagnostic settings for app service
    resource "azurerm_monitor_diagnostic_setting" "app_service_diagnostic" {
      name                       = "app-service-diagnostic-settings"
      target_resource_id         = azurerm_linux_web_app.application.id
      log_analytics_workspace_id = var.log_analytics_workspace_id
    
      enabled_log {
        category_group = "allLogs"
      }
    
      metric {
        category = "AllMetrics"
        enabled  = true
      }
    }
    

Referans uygulamayı dağıtın

Referans uygulama, Contoso Fiber'in şirket içi Java uygulamasının Azure'a simülasyonlu geçişi konusunda size yol gösterir. Ayrıca, ilk benimseme aşamasında gerekli değişiklikleri vurgular.

Aşağıdaki mimari, Contoso Fiber'in Reliable Web App desen uygulamasının hedeflerine göre son durumunu temsil eder.

Başvuru uygulamasının mimarisini gösteren diyagram.

Azure'da merkez-uç ağ topolojisi kullanan güvenilir bir Java web uygulaması mimarisini gösteren diyagram. Kullanıcılar uygulamaya genel yük dengeleme, web uygulaması güvenlik duvarı ve DDoS koruması sağlayan Azure Front Door üzerinden erişiyor. Azure Front Door, trafiği birincil bölge ve ikincil bölgedeki App Service örneklerine yönlendirir. Her App Service örneği bir Java Spring Boot web uygulaması barındırıyor ve izleme için Application Insights ile tümleştirilmiştir. Kimlik doğrulaması ve yetkilendirme, Microsoft Entra Id tarafından yönetilir. Uygulama, yüksek kullanılabilirlik ve okuma amaçlı çoğaltmalar için yapılandırılmış veri depolama için PostgreSQL için Azure Veritabanı esnek sunucusunu ve dağıtılmış önbelleğe alma için Azure Yönetilen Redis'i kullanır. Key Vault, yönetilen kimlikler aracılığıyla erişilen gizli bilgileri depolar. Özel Bağlantı uygulama, veritabanı ve diğer PaaS kaynakları arasındaki bağlantıların güvenliğini sağlar. Mimari, merkez-uç sanal ağında dağıtılır. Birincil bölgedeki hub, ağ güvenliği ve yönetimi için Azure Güvenlik Duvarı ve Azure Bastion ile Key Vault özel uç nokta alt ağını içerir. Birincil ve ikincil bölgelerdeki uçlar, uygulamayı ve veritabanını barındırıyor. Alt ağlar diğer özel uç noktalar alt ağını, DevOps alt ağını, web uygulaması tümleştirme alt ağını ve web uygulaması özel uç nokta alt ağını içerir. Tanılama günlükleri ve ölçümler Azure İzleyici ve Log Analytics'e gönderilir. Birincil ve ikincil bölge arasında bir özel DNS bölgeleri simgesi bulunur. Oklar, monolitik java web uygulamasını Azure'a geçirmek için üretime hazır, ölçeklenebilir ve güvenli bir desen gösteren veri akışını ve bileşenler arasındaki ilişkileri gösterir.

Bu mimarinin Visio dosyasını indirin.

Sonraki adım