Java için güvenilir web uygulaması deseni - Deseni uygulama

Azure App Service
Azure Front Door
Azure Cache for Redis
Microsoft Authentication Library for Java

Bu makalede Reliable Web App deseninin nasıl uygulanacağı gösterilmektedir. Reliable Web App düzeni, buluta geçiş yaparken web uygulamalarını nasıl değiştirmeniz gerektiğini (yeniden platform) tanımlayan bir dizi ilke ve uygulama tekniğidir . Bulutta başarılı olmak için yapmanız gereken en düşük kod güncelleştirmelerine odaklanır.

Bu kılavuzun uygulanmasını kolaylaştırmak için, dağıtabileceğiniz Reliable Web App deseninin bir başvuru uygulaması vardır.

Başvuru uygulamasının mimarisini gösteren diyagram.Başvuru uygulama mimarisi mimarisi. Bu mimarinin Visio dosyasını indirin.

Aşağıdaki kılavuz, başvuru uygulamasını örnek olarak tüm aşamalarda kullanır. Reliable Web App desenini uygulamak için, İyi Tasarlanmış Çerçeve'nin yapı taşlarına hizalanmış şu önerileri izleyin:

Güvenilirlik

Güvenilirlik, uygulamanızın müşterilerinize sağladığınız taahhütleri karşılayabilmesini sağlar. Daha fazla bilgi için Güvenilirlik için Tasarım gözden geçirmesi denetim listesine bakın. Reliable Web App deseni, güvenilirliği artırmak için kod düzeyinde iki temel tasarım deseni sunar: Yeniden deneme düzeni ve Devre Kesici düzeni.

Yeniden Deneme desenini kullanma

Yeniden deneme düzeni, geçici hizmet kesintilerini, genellikle saniyeler içinde çözülen geçici hataları giderir. Bu hatalar genellikle bulut ortamlarındaki hizmet azaltma, dinamik yük dağıtımı ve ağ sorunlarından kaynaklanır. Yeniden Deneme deseninin uygulanması başarısız isteklerin yeniden gönderilmesini içerir ve özel durum oluşturmadan önce yapılandırılabilir gecikmelere ve girişimlere izin verir.

Java'da Retry desenini uygulamak için Resilience4j kullanın. Resilience4j basit ve hataya dayanıklı bir kitaplıktır. Devre Kesici, Hız Sınırlayıcı, Yeniden Deneme veya Bulkhead tasarım deseni ile işlevsel arabirimleri, lambda ifadelerini ve yöntem başvurularını geliştirmek için daha yüksek sıralı işlevler (dekoratörler) sağlar.

Örnek: Başvuru uygulaması, Hizmet Planı Denetleyicisi'nin listServicePlans yöntemini Retry ek açıklamaları ile süsleyerek Yeniden Deneme desenini ekler. Kod, ilk çağrı başarısız olursa çağrıyı veritabanından hizmet planları listesine yeniden denenir.

    @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";
    }

Başvuru uygulaması, en fazla deneme sayısı, bekleme süresi ve hangi özel durumların yeniden denenmesi gerektiği dahil olmak üzere yeniden deneme ilkesini yapılandırıyor. Yeniden deneme ilkesi içinde application.propertiesyapılandırılır.

Devre Kesici düzenini kullanma

Yeniden Deneme ve Devre Kesici desenlerinin eşlenmesi, bir uygulamanın geçici hatalarla ilgili olmayan hizmet kesintilerini işleme özelliğini genişletir. Devre Kesici düzeni , bir uygulamanın yanıt vermeyen bir hizmete sürekli olarak erişmeye çalışmasını engeller. Devre Kesici düzeni uygulamayı serbest bırakır ve cpu döngülerinin boşa harcanmasını önler, böylece uygulama son kullanıcılar için performans bütünlüğünü korur. Daha fazla bilgi için Spring Circuit Breaker ve Resilience4j belgelerine bakın.

Örnek: Başvuru uygulaması, Devre Kesici özniteliğiyle yöntemleri dekore ederek Devre Kesici desenini uygular.

Güvenlik

Güvenlik, kasıtlı saldırılara ve değerli verilerinizin ve sistemlerinizin kötüye kullanılmasına karşı güvence sağlar. Daha fazla bilgi için bkz . Güvenlik için tasarım gözden geçirme denetim listesi. Reliable Web App düzeni, kimlik merkezli güvenlik uygulamak için yönetilen kimlikleri kullanır. Özel uç noktalar, web uygulaması güvenlik duvarı ve web uygulamasına kısıtlı erişim güvenli bir giriş sağlar.

En düşük ayrıcalıkları zorunlu kılma

Güvenlik ve verimlilik sağlamak için yalnızca kullanıcılara (kullanıcı kimlikleri) ve Azure hizmetlerine (iş yükü kimlikleri) ihtiyaç duydukları izinleri verin.

Kullanıcı kimliklerine izin atama

Uygulamanızın gereksinimlerini değerlendirerek çakışma olmadan tüm kullanıcı eylemlerini kapsayan bir rol kümesi tanımlayın. Her kullanıcıyı en uygun role eşleyin. Yalnızca görevleri için gerekli olan erişime sahip olduklarından emin olun.

İş yükü kimliklerine izin atama

Yalnızca veritabanlarındaki CRUD eylemleri veya gizli dizilere erişme gibi işlemler için kritik olan izinleri verin. İş yükü kimliği izinleri kalıcıdır, bu nedenle iş yükü kimliklerine tam zamanında veya kısa vadeli izinler sağlayamazsınız.

  • Rol tabanlı erişim denetimini (RBAC) tercih edin. İzinleri atamak için her zaman Azure RBAC ile başlayın. Hassas denetim sunar ve erişimin hem denetlenebilir hem de ayrıntılı olmasını sağlar. Azure RBAC'yi yalnızca hizmetin hedeflenen işlevlerini gerçekleştirmesi için gerekli izinleri vermek için kullanın.

  • Azure hizmet düzeyi erişim denetimleriyle destek. Azure RBAC belirli bir senaryoya uymuyorsa Azure hizmet düzeyi erişim ilkeleriyle destekleyin.

Daha fazla bilgi için bkz.

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

Kimlik doğrulaması ve yetkilendirme, web uygulaması güvenliğinin kritik yönleridir. Kimlik doğrulaması , bir kullanıcının kimliğini doğrulama işlemidir. Yetkilendirme , kullanıcının uygulama içinde gerçekleştirmesine izin verilen eylemleri belirtir. Amaç, güvenlik duruşunuzu zayıflatmadan kimlik doğrulaması ve yetkilendirme uygulamaktır. Bu hedefi karşılamak için Azure uygulama platformunun (Azure Uygulaması Hizmeti) ve kimlik sağlayıcısının (Microsoft Entra Id) özelliklerini kullanmanız gerekir.

Kullanıcı kimlik doğrulamasını yapılandırma

Platformunuzun özellikleri aracılığıyla kullanıcı kimlik doğrulamasını etkinleştirerek web uygulamanızın güvenliğini sağlayın. Azure Uygulaması Hizmeti, Microsoft Entra Id gibi kimlik sağlayıcılarıyla kimlik doğrulamasını destekler ve kimlik doğrulama iş yükünü kodunuzdan boşaltılır.

Örnek: Başvuru uygulaması, kimlik platformu olarak Microsoft Entra Id kullanır. 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 kimliklere sahip olmasını sağlar. Aşağıdaki Terraform, uygulamaya özgü Bir Hesap Yöneticisi rolüyle birlikte bir Entra ID uygulama kaydının oluşturulmasını kodlar.

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"
  }
}

Key Vault, istemci yapılandırma verilerimizi güvenli bir şekilde depolar ve App Service platformu bilgileri uygulamamıza ortam değişkenleri olarak gösterir.

Kimlik sağlayıcısıyla tümleştirme

Güvenli kimlik doğrulaması ve yetkilendirme için web uygulamanızı Microsoft Entra ID ile tümleştirin. Microsoft Entra ID için Spring Boot Starter, kolay kurulum için Spring Security ve Spring Boot'u kullanarak bu işlemi kolaylaştırır. Spring Cloud bileşenleriyle tümleştirme özelliklerinin yanı sıra çeşitli kimlik doğrulama akışları, otomatik belirteç yönetimi ve özelleştirilebilir yetkilendirme ilkeleri sunar. Bu, 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.

Örnek: Başvuru uygulaması, web uygulamasının kimlik sağlayıcısı olarak Microsoft kimlik platformu (Microsoft Entra Id) kullanır. Microsoft Entra hesabıyla 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 destekler.

<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>

Daha fazla bilgi için bkz. Spring Security için Spring Cloud Azure desteği.

Kimlik doğrulaması ve yetkilendirme iş kurallarını uygulama

Kimlik doğrulaması ve yetkilendirme iş kurallarının uygulanması, çeşitli uygulama işlevleri ve kaynakları için erişim denetimi ilkelerini ve izinlerini tanımlamayı içerir. Spring Security'yi Microsoft Entra Id için Spring Boot Starter kullanacak şekilde yapılandırmanız gerekir. 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ğlamanıza yardımcı olur. Microsoft Kimlik Doğrulama Kitaplığı'nın (MSAL) yapılandırılması ve etkinleştirilmesi, daha fazla güvenlik özelliğine erişim sağlar. Bu özellikler arasında belirteç önbelleğe alma ve otomatik belirteç yenileme yer alır.

Örnek: Başvuru uygulaması, Contoso Fiber'in hesap yönetim sistemindeki kullanıcı rollerinin 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. özniteliği, PreAuthorize 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ıyla oturum açmasını sağlar. Aşağıdaki kod parçacığı, kimlik doğrulaması ve yetkilendirme için Microsoft Entra Id'yi kullanmak üzere nasıl yapılandırabileceğinizi SecurityFilterChain gösterir.

@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();
    }
}
...

Daha fazla bilgi için bkz.

Hizmet kimlik doğrulama ve yetkilendirmeyi yapılandırma

Ortamınızdaki hizmetlerin gerekli işlevleri gerçekleştirme izinlerine sahip olması için hizmet kimlik doğrulamasını ve yetkilendirmesini yapılandırın. Hizmet kimliklerinin oluşturulmasını ve yönetimini otomatikleştirmek ve el ile kimlik bilgisi yönetimini ortadan kaldırmak için Microsoft Entra Id'de Yönetilen Kimlikler'i kullanın. Yönetilen kimlik, web uygulamanızın Azure Key Vault ve veritabanları gibi Azure hizmetlerine güvenli bir şekilde erişmesini sağlar. Ayrıca Azure Uygulaması Hizmetine yapılan dağıtımlar için CI/CD işlem hattı tümleştirmelerini kolaylaştırır. Ancak, karma dağıtımlar veya eski sistemler gibi senaryolarda, geçişi basitleştirmek için şirket içi kimlik doğrulama çözümlerinizi kullanmaya devam edin. Sisteminiz modern bir kimlik yönetimi yaklaşımına hazır olduğunda yönetilen kimliklere geçiş. Daha fazla bilgi için bkz . Yönetilen kimlikleri izleme.

Örnek: Başvuru uygulaması, veritabanı için şirket içi kimlik doğrulama mekanizmasını (kullanıcı adı ve parola) tutar. Sonuç olarak, başvuru uygulaması veritabanı gizli dizisini Key Vault'ta depolar. Web uygulaması, Key Vault'tan gizli dizileri almak için yönetilen kimlik (sistem tarafından atanmış) kullanır.

Gizli dizileri yönetmek için merkezi gizli dizi deposu kullanma

Uygulamanızı buluta taşıdığınızda, bu tür gizli dizileri güvenli bir şekilde depolamak için Azure Key Vault'ı kullanın. Bu merkezi depo, yönetilen kimlikleri desteklemeyen hizmetler için güvenli depolama, anahtar döndürme, erişim denetimi ve izleme sunar. Uygulama yapılandırmaları için Azure Uygulaması Yapılandırması önerilir.

Örnek: Başvuru uygulaması aşağıdaki gizli dizileri Key Vault'ta depolar: (1) PostgreSQL veritabanı kullanıcı adı ve parolası, (2) Redis Cache parolası ve (3) MSAL uygulamasıyla ilişkili Microsoft Entra Id için istemci gizli dizisi.

Key Vault'un HTTP isteği akışına yerleştirmeyin

Her HTTP isteği yerine uygulama başlangıcında Key Vault'tan gizli dizileri yükleyin. Key Vault, dağıtım sırasında hassas verileri güvenli bir şekilde depolamak ve almak için tasarlanmıştır. HTTP isteklerinde yüksek frekanslı erişim Key Vault'un aktarım hızı özelliklerini aşarak istek sınırlamalarına ve HTTP durum kodu 429 hatalarına yol açabilir. Daha fazla bilgi için bkz . Key Vault işlem sınırları.

Key Vault'ta gizli dizilere erişmek için tek bir yöntem kullanma

Key Vault'ta gizli dizilere erişmek için bir web uygulaması yapılandırırken iki birincil seçeneğiniz vardır:

  • App Service Uygulama ayarı: Gizli diziyi doğrudan bir ortam değişkeni olarak eklemek için App Service'te bir uygulama ayarı kullanın.

  • Doğrudan gizli dizi başvurusu: Uygulama kodunuz içindeki gizli diziye doğrudan başvurun. Uygulamanızın Key Vault ile iletişim kurabilmesi için uygulamanızın özellikler dosyasına Java uygulamaları gibi application.properties belirli bir başvuru ekleyin.

Basitlik ve gereksiz karmaşıklığı önlemek için bu yöntemlerden birini seçmek ve bu yönteme bağlı kalmak önemlidir. Key Vault'un spring uygulamasıyla tümleştirilmesi için işlem şunları içerir:

  1. pom.xml dosyanıza Azure Key Vault Gizli Dizileri için Azure Spring Boot Starter bağımlılığını ekleyin.
  2. Uygulamanızda bir Key Vault uç noktası yapılandırın. Bu, application.properties dosyası aracılığıyla veya ortam değişkeni olarak yapılabilir.

Örnek: Başvuru uygulaması App Service'te bir uygulama ayarı kullanır ve gizli diziler ekler.

Özel uç noktaları kullanma

Desteklenen tüm Azure hizmetleri için tüm üretim ortamlarında özel uç noktaları kullanın. Özel uç noktalar, Bir Azure sanal ağındaki kaynaklar ile Azure hizmetleri arasında özel bağlantılar sağlar. Varsayılan olarak, çoğu Azure hizmetiyle iletişim genel İnternet üzerinden geçer. Özel uç noktalar kod değişikliği, uygulama yapılandırmaları veya bağlantı dizesi gerektirmez. Daha fazla bilgi için bkz. Özel uç nokta oluşturma ve Uç nokta güvenliği için en iyi yöntemler.

Örnek: Başvuru uygulaması Key Vault, Redis için Azure Cache ve PostgreSQL için Azure Veritabanı için özel uç noktaları kullanır.

Web uygulaması güvenlik duvarı kullanma

Web uygulamasına gelen tüm İnternet trafiği, yaygın web açıklarına karşı koruma sağlamak için bir web uygulaması güvenlik duvarından geçmelidir. Varsa, tüm gelen İnternet trafiğini genel yük dengeleyiciden geçmeye zorlar ve varsa web uygulaması güvenlik duvarı. (1) Azure Front Door özel uç noktasını kullanabilir veya (2) istekleri üst bilgi değerine göre X-Azure-FDID filtreleyebilirsiniz.

App Service platformu ve Java Spring üst bilgi değerine göre filtreleyebilir. App Service'i ilk seçenek olarak kullanmanız gerekir. Platform düzeyinde filtreleme, istenmeyen isteklerin kodunuzla ulaşmasını engeller. Web uygulaması güvenlik duvarınızdan geçirmek istediğiniz trafiği yapılandırmanız gerekir. Konak adına, istemci IP'sine ve diğer değerlere göre filtreleyebilirsiniz. Daha fazla bilgi için bkz . Özgün HTTP ana bilgisayar adını koruma.

Örnek: Başvuru uygulaması, üretim ortamında özel bir uç nokta ve X-Azure-FDID geliştirme ortamındaki üst bilgi değerini kullanır.

Veritabanı güvenliğini yapılandırma

veritabanına Yönetici istrator düzeyinde erişim ayrıcalıklı işlemler gerçekleştirmek için izinler verir. Ayrıcalıklı işlemler arasında veritabanları oluşturma ve silme, tablo şemalarını değiştirme veya kullanıcı izinlerini değiştirme sayılabilir. Geliştiricilerin veritabanını korumak veya sorunları gidermek için genellikle yönetici düzeyinde erişime ihtiyacı vardır.

  • Kalıcı yükseltilmiş izinlerden kaçının. Geliştiricilere ayrıcalıklı işlemler gerçekleştirmek için tam zamanında erişim verin. Tam zamanında erişim sayesinde kullanıcılar ayrıcalıklı görevleri gerçekleştirmek için geçici izinler alır.

  • Uygulamaya yükseltilmiş izinler vermeyin. Uygulama kimliğine yönetici düzeyinde erişim verme. Uygulamaya veritabanına en az ayrıcalıklı erişimi yapılandırın. Hataların patlama yarıçapını ve güvenlik ihlallerini sınırlar. Azure PostgreSQL veritabanına erişmek için iki birincil yönteminiz vardır. Microsoft Entra kimlik doğrulama veya PostgreSQL kimlik doğrulaması kullanabilirsiniz. Daha fazla bilgi için bkz . Azure PostgreSQL ile JDBC.

Maliyet iyileştirme

Maliyet iyileştirmesi, gereksiz giderleri ve yönetim ek yükünü azaltmanın yollarını aramakla ilgilidir. Daha fazla bilgi için Bkz . Maliyet İyileştirme için Tasarım gözden geçirmesi denetim listesi. Reliable Web App deseni, daha uygun maliyetli bir web uygulaması için hak belirleme teknikleri, otomatik ölçeklendirme ve verimli kaynak kullanımı uygular.

Her ortam için kaynakları haklarına ayırma

Azure hizmetlerinin farklı performans katmanlarını anlayın ve yalnızca her ortamın gereksinimleri için uygun SKU'yu kullanın. Üretim ortamlarında, üretim için gereken hizmet düzeyi sözleşmelerini (SLA), özellikleri ve ölçeği karşılayan SKU'lar gerekir. Üretim dışı ortamlar genellikle aynı özelliklere ihtiyaç duymaz. Ek tasarruf için Azure Geliştirme/Test fiyatlandırma seçenekleri, Azure Rezervasyonları ve işlem için Azure tasarruf planlarını göz önünde bulundurun.

Örnek: Azure Geliştirme/Test fiyatlandırması bileşenlerin hiçbirini kapsamadığından, başvuru uygulaması Azure Geliştirme/Test fiyatlandırmasını kullanmaz. PostgreSQL için Azure Veritabanı, bulut aşamasındaki bu ilk yakınsamadan sonra en az bir yıl boyunca bu veritabanı altyapısına bağlı kalma planına dayalı ayrılmış örnek için birincil adaydır. Başvuru uygulaması, farklı SKU'ları dağıtan isteğe bağlı bir parametreye sahiptir. Ortam parametresi Terraform şablonuna geliştirme SKU'larını seçmesini belirtir. Aşağıdaki kod bu ortam parametresini gösterir.

azd env set APP_ENVIRONMENT prod

Contoso Fiber, geliştirme ve üretim dağıtımları için kod olarak altyapı (IaC) şablonlarını kullanır. Geliştirme ortamı, uygulama geliştirme için gereken en düşük maliyetli SKU'lar kullanılarak maliyet açısından iyileştirilmiştir. Üretim ortamı, uygulamanın üretim hizmet düzeyi hedef gereksinimlerini karşılayan SKU'ları kullanır.

Otomatik ölçeklendirmeyi kullanma

Otomatik ölçeklendirme, üretim ortamları için yatay ölçeklendirmeyi otomatikleştirir. Performans ölçümlerine göre otomatik ölçeklendirme. Uygulamanızın ölçeklendirme ölçütlerini anlamıyorsanız CPU kullanım performansı tetikleyicileri iyi bir başlangıç noktasıdır. Ölçeklendirme tetikleyicilerini (CPU, RAM, ağ ve disk) web uygulamanızın davranışına karşılık gelen şekilde yapılandırmanız ve uyarlamanız gerekir. Talepteki sık değişiklikleri karşılamak için dikey ölçeklendirme yapmayın. Daha az maliyetlidir. Daha fazla bilgi için bkz. Azure Uygulaması Hizmetinde Ölçeklendirme ve Microsoft Azure'da Otomatik Ölçeklendirme.

Kaynakları verimli bir şekilde kullanma

Verimli kaynak kullanımı, kurumsal ihtiyaçların boşa harcanmadan karşılanması için bulut kaynaklarının stratejik yönetimini ve tahsisini içerir. Gereksiz kaynak harcamalarını ve yönetim ek yükünü en aza indirir. Kaynak verimliliğini artırmak için şu önerileri izleyin:

  • Paylaşılan hizmetleri kullanın. Belirli kaynakların merkezileştirilmesi ve paylaşılması, maliyet iyileştirmesi ve daha düşük yönetim yükü sağlar. Örneğin, paylaşılan ağ kaynaklarını merkez sanal ağına yerleştirin.

  • Kullanılmayan ortamları silin. Maliyeti iyileştirmek için üretim dışı ortamları saatler veya tatillerde silin. Azure kaynaklarını ve ortamların tamamını silmek için kod olarak altyapıyı kullanabilirsiniz. Kod olarak altyapı şablonunuzdan silmek istediğiniz kaynağın bildirimini kaldırın. Daha sonra ihtiyacınız olan verileri yedekleyin. Sildiğiniz kaynak üzerindeki bağımlılıkları anlayın. Bağımlılıklar varsa, bu kaynakları da güncelleştirmeniz veya kaldırmanız gerekebilir.

  • Colocate işlevselliği. Yedek kapasite olduğunda, uygulama kaynaklarını ve işlevselliğini tek bir Azure kaynağında birlikte kullanın. Örneğin, birden çok web uygulaması tek bir sunucu (App Service Planı) kullanabilir veya tek bir önbellek birden çok veri türünü destekleyebilir.

Operasyonel mükemmellik

Operasyonel mükemmellik, bir uygulamayı dağıtan ve üretimde çalışır durumda tutan operasyon süreçlerini kapsar. Daha fazla bilgi için operasyonel mükemmellik için tasarım gözden geçirme denetim listesine bakın. Reliable Web App düzeni, altyapı dağıtımları için kod olarak altyapıyı uygular ve gözlemlenebilirliği izler.

İzlemeyi yapılandırma

İzleme ve hata ayıklama için, herhangi bir istek başarısız olduğunda tanılamak için günlüğe kaydetmeyi etkinleştirmeniz gerekir. Uygulamanızdan topladığınız telemetri, işletimsel gereksinimlerine uygun olmalıdır. En azından temel ölçümlerde telemetri toplamanız gerekir. Hedeflenen iyileştirmeleri uygulamanıza yardımcı olabilecek kullanıcı davranışı hakkında bilgi toplamanız gerekir.

Temel ölçümleri izleme

İş yükü temel ölçümleri izlemelidir. Ölçülecek önemli ölçümler arasında istek aktarım hızı, ortalama istek süresi, hatalar ve izleme bağımlılıkları yer alır. Bu telemetriyi toplamak için Uygulama Analizler kullanmanızı öneririz.

Örnek: Başvuru uygulaması Application Analizler kullanır. Uygulama Analizler, App Service'in app_settings yapılandırmasının bir parçası olarak Terraform aracılığıyla etkinleştirilir.

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

Spring Boot, Uygulama Analizler Java sanal makinesi (JVM), CPU, Tomcat ve diğerleri gibi çeşitli temel ölçümleri kaydeder. Uygulama Analizler Log4j ve Logback gibi günlük çerçevelerinden otomatik olarak toplanır. Daha fazla bilgi için bkz.

Gerektiğinde özel telemetri ve ölçüm oluşturma

Uygulama Analizler temel ölçümlerine ek olarak, kullanıcılarınızı ve uygulamanızla etkileşimlerini daha iyi anlamak için özel telemetri oluşturmanız gerekir. Uygulama Analizler özel telemetri toplamanıza olanak tanır ve micrometer aracılığıyla da özel ölçümler toplayabilirsiniz. Amaç, daha bilinçli kararlar ve iyileştirmeler yapabilmeniz için uygulamanızın performansı ve kullanıcı davranışı hakkında daha derin içgörüler elde etmektir.

Günlük tabanlı ölçümleri toplama

Temel uygulama durumu ve ölçümleri hakkında daha fazla görünürlük elde etmek için günlük tabanlı ölçümleri izleyin. Verileri bulmak ve düzenlemek için Uygulama Analizler'nde Kusto Sorgu Dili (KQL) sorgularını kullanabilirsiniz. Daha fazla bilgi için bkz. Azure Uygulaması Analizler günlük tabanlı ölçümler ve Uygulama Analizler günlük tabanlı ve önceden toplanmış ölçümler.

Platform tanılamasını etkinleştirme

Azure'daki tanılama ayarı, toplamak istediğiniz platform günlüklerini ve ölçümlerini ve bunların nerede depoleneceğini belirtmenize olanak tanır. Platform günlükleri, tanılama ve denetim bilgileri sağlayan yerleşik günlüklerdir. Çoğu Azure hizmeti için platform tanılamasını etkinleştirebilirsiniz, ancak her hizmet kendi günlük kategorilerini tanımlar. Farklı Azure hizmetlerinin seçebileceğiniz günlük kategorileri vardır.

  • Desteklenen tüm hizmetler için tanılamayı etkinleştirin. Azure hizmetleri platform günlüklerini otomatik olarak oluşturur, ancak hizmet bunları otomatik olarak depolamaz. Her hizmet için tanılama ayarını etkinleştirmeniz ve tanılamayı destekleyen her Azure hizmeti için etkinleştirmeniz gerekir.

  • Tanılamaları uygulama günlükleriyle aynı hedefe gönderin. Tanılamayı etkinleştirdiğinizde, toplamak istediğiniz günlükleri ve bunları nereye gönderebileceğinizi seçersiniz. İki veri kümesini ilişkilendirmek için platform günlüklerini uygulama günlükleriyle aynı hedefe göndermeniz gerekir.

Örnek: Başvuru uygulaması, desteklenen tüm 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
  #log_analytics_destination_type = "AzureDiagnostics"

  enabled_log {
    category_group = "allLogs"

  }

  metric {
    category = "AllMetrics"
    enabled  = true
  }
}

CI/CD işlem hattı kullanma

Dağıtımlarınızı otomatikleştirmek için sürekli tümleştirme/sürekli dağıtım (CI/CD) işlem hattını tümleştirin. Bu otomasyon, kaynak denetiminden doğrudan test, hazırlama ve üretim gibi çeşitli App Service ortamlarınıza genişletilmelidir. GitHub projeleri için Azure DevOps veya GitHub Actions ile çalışıyorsanız Azure Pipelines'ı kullanın.

  • Birim testlerini tümleştirme. App Services'e herhangi bir dağıtım yapmadan önce işlem hattınızdaki tüm birim testlerinin (JUnit kullanarak) yürütülmesine ve geçirilmesine öncelik verme. Kapsamlı test kapsamı elde etmek için SonarQube ve JaCoCo gibi kod kalitesi ve kapsam araçlarını birleştirir.

  • Java sahte çerçevesini benimseyin. Dış uç noktaları içeren testler için Java sahte çerçeveleri (Mockito, EasyMock) kullanın. Bu çerçeveler sanal uç noktalar oluşturmanıza olanak sağlar. Gerçek dış uç noktaları yapılandırma gereğini 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. Ayrıca, güvenlik riskleri için üçüncü taraf kitaplıklarını ve bileşenlerini 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 kolayca tümleştirilir.

Üretim dağıtımlarını yönetme

Kodu üretime dağıtmak için yönergeler oluşturmanız ve tüm üretim dağıtımları için bir onay süreci oluşturmanız gerekir.

Performans verimliliği

Performans verimliliği, kullanıcılar tarafından anlamlı bir şekilde yerleştirilen talepleri karşılamak amacıyla iş yükünüzü ölçeklendirme becerisidir. Daha fazla bilgi için Bkz . Performans Verimliliği için Tasarım gözden geçirmesi denetim listesi. Reliable Web App deseni, yüksek oranda istenen verilerin gecikme süresini en aza indirmek için Cache-Aside desenini kullanır.

Edilgen Önbellek düzenini kullanma

Edilgen Önbellek düzeni, bellek içi veri yönetimini geliştiren bir önbelleğe alma stratejisidir. Desen, uygulamaya veri isteklerini işleme ve önbellek ile veritabanı gibi kalıcı bir depolama alanı arasında tutarlılık sağlama sorumluluğunu atar. Web uygulaması bir veri isteği aldığında önce önbelleği arar. Veriler eksikse, veritabanından alır, isteğe yanıt verir ve önbelleği uygun şekilde güncelleştirir. Bu yaklaşım yanıt sürelerini kısaltır ve aktarım hızını artırır ve daha fazla ölçeklendirme gereksinimini azaltır. Ayrıca birincil veri deposundaki yükü azaltarak ve kesinti risklerini en aza indirerek hizmet kullanılabilirliğini artırır.

Enable caching

Önbelleğe almayı etkinleştirmek için paketi dosyanıza pom.xml bağımlılık olarak ekleyinspring-boot-starter-cache. Paket, spring-boot-starter-cache Redis önbelleğini varsayılan değerlerle yapılandırır. Web uygulamanızın gereksinimlerini karşılamak için dosyadaki application.properties veya ortam değişkenlerindeki bu değerleri güncelleştirmeniz gerekir. Örneğin, spring.cache.redis.time-to-live (milisaniye cinsinden temsil edilir) verileri çıkarmadan önce önbellekte kalan süreyi belirler. Web uygulamanızın gereksinimlerini karşılayan bir değer sağlamanız gerekir. Son olarak, ek açıklamayı kullanarak kodunuzda gerekli verileri önbelleğe @Cacheable almanız gerekir.

Yüksek ihtiyaç duyulan verileri önbelleğe alma

En sık erişilen veriler için önbelleğe alma önceliğini belirleme. Kullanıcı katılımını ve sistem performansını yönlendiren önemli veri noktalarını belirleyin. Edilgen Önbellek düzeninin verimliliğini iyileştirmek ve gecikme süresini ve veritabanı yükünü önemli ölçüde azaltmak için bu alanlara özel önbelleğe alma stratejileri uygulayın. Veritabanının CPU'sunu, belleğini ve depolama alanını izlemek için Azure İzleyici'yi kullanın. Bu ölçümler, daha küçük bir veritabanı SKU'su kullanıp kullanamayacağınızı belirlemenize yardımcı olur.

Önbellek verilerini güncel tutma

En son veritabanı değişiklikleriyle eşitlemek için düzenli önbellek güncelleştirmeleri zamanlayın. Veri dalgalanmasına ve kullanıcı gereksinimlerine göre en uygun yenileme hızını belirleyin. Bu uygulama, uygulamanın hem hızlı erişim hem de geçerli bilgileri sağlamak için Cache-Aside desenini kullanmasını sağlar.

Veri tutarlılığını sağlama

Herhangi bir veritabanı yazma işleminden 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.

Örnek: Aşağıdaki kod, önbelleğe almayı etkinleştirmek için pom.xml paketi dosyaya bağımlılık olarak eklerspring-boot-starter-cache.

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-cache</artifactid>
</dependency>

Başvuru uygulaması, dosyada Redis'i application.properties etkinleştirir.

# Redis
spring.data.redis.ssl.enabled=true
spring.session.redis.namespace=spring:session

Aşağıdaki kod adlı getAccountDetailbir yöntemi tanımlar. yöntemi, belirli bir kullanıcı adıyla ilişkili kullanıcı ayarlarını alır. yöntemine @Cacheable(value="account-details", key="#id")getAccountDetailek açıklama ekler ve web uygulamasına kullanıcı ayarlarını önbellekte önbelleğe almalarını söyler.

    @Cacheable(value="account-details", key="#id")
    public AccountDetail getAccountDetail(Long id) {
        Optional<Account> optionalAccount = accountRepository.findById(id);
        if (optionalAccount.isEmpty()) {
            throw new IllegalArgumentException("Account ID " + id + " does not exist");
        }

        Account account = optionalAccount.get();
        AccountDetail accountDetail = mapToAccountDetail(account);

        return accountDetail;
    }

Veritabanı performansı

Veritabanı performansı, bir uygulamanın performansını ve ölçeklenebilirliğini etkileyebilir. İyileştirilmiş olduğundan emin olmak için veritabanınızın performansını test etmek önemlidir. Dikkat edilmesi gereken bazı önemli noktalar arasında doğru bulut bölgesini seçme, bağlantı havuzu oluşturma, edilgen önbellek düzeni ve sorguları iyileştirme sayılabilir.

  • Ağ atlamalarını test edin. Bir uygulamayı buluta taşımak, veritabanınızda ek ağ atlamaları ve gecikme süresine neden olabilir. Yeni bulut ortamının tanıttığını ek atlamalar için test etmeniz gerekir.

  • Bir performans taban çizgisi oluşturun. Buluttaki uygulama performansını karşılaştırmak için ilk temel olarak şirket içi performans ölçümlerini kullanmanız gerekir.

  • Uygulama Analizler kullanın. Uygulama Analizler, veritabanı sorguları ve tüm JDBC arabirimleri hakkında ayrıntılı ölçümler sağlar. Bu veritabanını, taşınabilir veritabanının SLA'larına uygun olduğundan emin olmak veya ayarlamanız gereken sorguları bulmak için kullanmalısınız. Güvenlik ve performans sorunları oluşturduğundan Dinamik SQL'i hiçbir zaman kullanmamalısınız.

  • Bağlantı havuzlarını kullanın. JDBC bağlantı havuzlarını kullanmalı ve saniye başına işlem (TPS) ölçümlerine ve SLA'lara göre hassas ayarlamalar yapmalısınız. Yük altında veritabanı performansını test etmek ve değerlendirmek için veritabanı performansı izleme araçlarını kullanmanız gerekir.

Sonraki adımlar

GitHub deposundaki yönergeleri izleyerek başvuru uygulamasını dağıtın. Bulutla ilgili en iyi yöntemler ve geçiş hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları kullanın.

En iyi bulut uygulamaları. Azure benimseme ve mimari rehberliği için bkz:

  • Bulut Benimseme Çerçevesi. Kuruluşunuzun Azure'da çözüm oluşturmaya yönelik bir strateji hazırlamasına ve yürütmesine yardımcı olacak bir çerçeve.
  • İyi Tasarlanmış Çerçeve. bir iş yükünün kalitesini artırmak için kullanabileceğiniz bir dizi kılavuz ilke.

Daha yüksek bir hizmet düzeyi hedefi (SLO) gerektiren uygulamalar için bkz . görev açısından kritik iş yükleri.

Geçiş kılavuzu. Aşağıdaki araçlar ve kaynaklar, şirket içi kaynakları Azure'a geçirmenize yardımcı olabilir: