Pola aplikasi web yang andal untuk Java - Terapkan pola

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

Artikel ini memperlihatkan kepada Anda cara menerapkan pola Reliable Web App. Pola Reliable Web App adalah serangkaian prinsip dan teknik implementasi yang menentukan bagaimana Anda harus memodifikasi aplikasi web (replatform) saat bermigrasi ke cloud. Ini berfokus pada pembaruan kode minimal yang perlu Anda buat agar berhasil di cloud.

Untuk memfasilitasi aplikasi panduan ini, ada implementasi referensi pola Reliable Web App yang dapat Anda sebarkan.

Diagram memperlihatkan arsitektur implementasi referensi.Arsitektur arsitektur implementasi referensi. Unduh file Visio arsitektur ini.

Panduan berikut menggunakan implementasi referensi sebagai contoh di seluruh. Untuk menerapkan pola Reliable Web App, ikuti rekomendasi ini yang selaras dengan pilar Kerangka Kerja Yang Dirancang Dengan Baik:

Keandalan

Keandalan memastikan aplikasi Anda dapat mencapai komitmen yang Anda buat kepada pelanggan Anda. Untuk informasi selengkapnya, lihat Daftar periksa Tinjauan desain untuk Keandalan. Pola Reliable Web App memperkenalkan dua pola desain utama di tingkat kode untuk meningkatkan keandalan: pola Coba Lagi dan pola Pemutus Sirkuit.

Gunakan pola Coba Lagi

Pola Coba lagi mengatasi gangguan layanan sementara, kesalahan sementara yang disebut, yang biasanya diselesaikan dalam hitungan detik. Kesalahan ini sering diakibatkan oleh pembatasan layanan, distribusi beban dinamis, dan masalah jaringan di lingkungan cloud. Menerapkan pola Coba Lagi melibatkan pengiriman ulang permintaan yang gagal, memungkinkan penundaan dan upaya yang dapat dikonfigurasi sebelum melemparkan pengecualian.

Gunakan Resilience4j untuk mengimplementasikan pola Coba lagi di Java. Resilience4j adalah pustaka toleransi kesalahan yang ringan. Ini menyediakan fungsi urutan yang lebih tinggi (dekorator) untuk meningkatkan antarmuka fungsi, ekspresi lambda, dan referensi metode dengan pola desain Pemutus Sirkuit, Pembatas Laju, Coba Lagi, atau Massal.

Contoh: Implementasi referensi menambahkan pola Coba lagi dengan mendekorasi metode listServicePlans Pengontrol Paket Layanan dengan anotasi Coba lagi. Kode mencoba kembali panggilan ke daftar paket layanan dari database jika panggilan awal gagal.

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

Implementasi referensi mengonfigurasi kebijakan coba lagi termasuk upaya maksimum, durasi tunggu, dan pengecualian mana yang harus dicoba kembali. Kebijakan coba lagi dikonfigurasi di application.properties.

Menggunakan pola Pemutus Sirkuit

Memasangkan pola Retry dan Circuit Breaker memperluas kemampuan aplikasi untuk menangani gangguan layanan yang tidak terkait dengan kesalahan sementara. Pola Circuit Breaker mencegah aplikasi terus mencoba mengakses layanan yang tidak responsif. Pola Circuit Breaker merilis aplikasi dan menghindari pemborosan siklus CPU sehingga aplikasi mempertahankan integritas performanya untuk pengguna akhir. Untuk informasi selengkapnya, lihat Dokumentasi Spring Circuit Breaker, dan Resilience4j.

Contoh: Implementasi referensi mengimplementasikan pola Circuit Breaker dengan mendekorasi metode dengan atribut Circuit Breaker.

Keamanan

Keamanan memberikan jaminan terhadap serangan yang disukai dan penyalahgunaan data dan sistem berharga Anda. Untuk informasi selengkapnya, lihat Daftar periksa tinjauan desain untuk Keamanan. Pola Reliable Web App menggunakan identitas terkelola untuk mengimplementasikan keamanan yang ber sentris identitas. Titik akhir privat, firewall aplikasi web, dan akses terbatas ke aplikasi web menyediakan ingress yang aman.

Menerapkan hak istimewa paling sedikit

Untuk memastikan keamanan dan efisiensi, hanya berikan pengguna (identitas pengguna) dan layanan Azure (identitas beban kerja) izin yang mereka butuhkan.

Menetapkan izin ke identitas pengguna

Menilai kebutuhan aplikasi Anda untuk menentukan serangkaian peran yang mencakup semua tindakan pengguna tanpa tumpang tindih. Petakan setiap pengguna ke peran yang paling tepat. Pastikan mereka hanya menerima akses ke apa yang diperlukan untuk tugas mereka.

Menetapkan izin ke identitas beban kerja

Berikan hanya izin yang penting untuk operasi, seperti tindakan CRUD dalam database atau mengakses rahasia. Izin identitas beban kerja tetap ada, sehingga Anda tidak dapat memberikan izin just-in-time atau jangka pendek untuk identitas beban kerja.

  • Lebih suka kontrol akses berbasis peran (RBAC). Selalu mulai dengan Azure RBAC untuk menetapkan izin. Ini menawarkan kontrol yang tepat, memastikan akses dapat diaudit dan terperinci. Gunakan Azure RBAC untuk memberikan hanya izin yang diperlukan bagi layanan untuk melakukan fungsi yang dimaksudkan.

  • Tambahan dengan kontrol akses tingkat layanan Azure. Jika Azure RBAC tidak mencakup skenario tertentu, lengkapi dengan kebijakan akses tingkat layanan Azure.

Untuk informasi selengkapnya, lihat:

Mengonfigurasi autentikasi dan otorisasi pengguna

Autentikasi dan otorisasi adalah aspek penting dari keamanan aplikasi web. Autentikasi adalah proses memverifikasi identitas pengguna. Otorisasi menentukan tindakan yang diizinkan pengguna untuk dilakukan dalam aplikasi. Tujuannya adalah untuk menerapkan autentikasi dan otorisasi tanpa melemahkan postur keamanan Anda. Untuk memenuhi tujuan ini, Anda perlu menggunakan fitur platform aplikasi Azure (Azure App Service) dan idP (ID Microsoft Entra).

Mengonfigurasi autentikasi pengguna

Amankan aplikasi web Anda dengan mengaktifkan autentikasi pengguna melalui fitur platform Anda. Azure App Service mendukung autentikasi dengan penyedia identitas seperti ID Microsoft Entra, membongkar beban kerja autentikasi dari kode Anda.

Contoh: Implementasi referensi menggunakan ID Microsoft Entra sebagai platform identitas. ID Microsoft Entra memerlukan pendaftaran aplikasi di penyewa utama. Pendaftaran aplikasi memastikan pengguna yang mendapatkan akses ke aplikasi web memiliki identitas di penyewa utama. Terraform berikut mengodekan pembuatan pendaftaran aplikasi Id Entra bersama dengan peran Manajer Akun tertentu aplikasi.

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 menyimpan data konfigurasi klien kami dengan aman dan platform App Service mengekspos informasi ke aplikasi kami sebagai variabel lingkungan.

Mengintegrasikan dengan IdP

Integrasikan aplikasi web Anda dengan ID Microsoft Entra untuk autentikasi dan otorisasi yang aman. Spring Boot Starter untuk MICROSOFT Entra ID menyederhanakan proses ini, menggunakan Spring Security dan Spring Boot untuk penyiapan yang mudah. Ini menawarkan berbagai alur autentikasi, manajemen token otomatis, dan kebijakan otorisasi yang dapat disesuaikan, bersama dengan kemampuan integrasi dengan komponen Spring Cloud. Ini memungkinkan integrasi Microsoft Entra ID dan OAuth 2.0 langsung ke dalam aplikasi Spring Boot tanpa pustaka manual atau konfigurasi pengaturan.

Contoh: Implementasi referensi menggunakan platform identitas Microsoft (MICROSOFT Entra ID) sebagai penyedia identitas untuk aplikasi web. Ini menggunakan pemberian kode otorisasi OAuth 2.0 untuk memasukkan pengguna dengan akun Microsoft Entra. Cuplikan XML berikut mendefinisikan dua dependensi yang diperlukan dari alur pemberian kode otorisasi OAuth 2.0. Dependensi com.azure.spring: spring-cloud-azure-starter-active-directory memungkinkan autentikasi dan otorisasi Microsoft Entra dalam aplikasi Spring Boot. Dependensi org.springframework.boot: spring-boot-starter-oauth2-client mendukung autentikasi dan otorisasi OAuth 2.0 dalam aplikasi Spring Boot.

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

Untuk informasi selengkapnya, lihat Dukungan Spring Cloud Azure untuk Spring Security.

Menerapkan aturan bisnis autentikasi dan otorisasi

Menerapkan aturan bisnis autentikasi dan otorisasi melibatkan penentuan kebijakan dan izin kontrol akses untuk berbagai fungsionalitas dan sumber daya aplikasi. Anda perlu mengonfigurasi Spring Security untuk menggunakan Spring Boot Starter untuk ID Microsoft Entra. Pustaka ini memungkinkan integrasi dengan MICROSOFT Entra ID dan membantu Anda memastikan bahwa pengguna diautentikasi dengan aman. Mengonfigurasi dan mengaktifkan Microsoft Authentication Library (MSAL) menyediakan akses ke lebih banyak fitur keamanan. Fitur-fitur ini termasuk penembolokan token dan refresh token otomatis.

Contoh: Implementasi referensi membuat peran aplikasi yang mencerminkan jenis peran pengguna dalam sistem manajemen akun Contoso Fiber. Peran diterjemahkan ke dalam izin selama otorisasi. Contoh peran khusus aplikasi dalam CAMS termasuk manajer akun, perwakilan dukungan Tingkat satu (L1), dan perwakilan Field Service. Peran Manajer Akun memiliki izin untuk menambahkan pengguna dan pelanggan aplikasi baru. Perwakilan Field Service dapat membuat tiket dukungan. Atribut PreAuthorize membatasi akses ke peran tertentu.

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

Untuk berintegrasi dengan ID Microsoft Entra, implementasi referensi menggunakan alur pemberian kode otorisasi OAuth 2.0. Alur ini memungkinkan pengguna untuk masuk dengan akun Microsoft. Cuplikan kode berikut menunjukkan kepada Anda cara mengonfigurasi SecurityFilterChain untuk menggunakan ID Microsoft Entra untuk autentikasi dan otorisasi.

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

Untuk informasi selengkapnya, lihat:

Mengonfigurasi autentikasi dan otorisasi layanan

Konfigurasikan autentikasi dan otorisasi layanan sehingga layanan di lingkungan Anda memiliki izin untuk melakukan fungsi yang diperlukan. Gunakan Identitas Terkelola di ID Microsoft Entra untuk mengotomatiskan pembuatan dan pengelolaan identitas layanan, menghilangkan manajemen kredensial manual. Identitas terkelola memungkinkan aplikasi web Anda mengakses layanan Azure dengan aman, seperti Azure Key Vault dan database. Ini juga memfasilitasi integrasi alur CI/CD untuk penyebaran ke Azure App Service. Namun, dalam skenario seperti penyebaran hibrid atau dengan sistem warisan, lanjutkan menggunakan solusi autentikasi lokal Anda untuk menyederhanakan migrasi. Transisi ke identitas terkelola saat sistem Anda siap untuk pendekatan manajemen identitas modern. Untuk informasi selengkapnya, lihat Memantau identitas terkelola.

Contoh: Implementasi referensi menyimpan mekanisme autentikasi lokal untuk database (nama pengguna dan kata sandi). Akibatnya, implementasi referensi menyimpan rahasia database di Key Vault. Aplikasi web menggunakan identitas terkelola (ditetapkan sistem) untuk mengambil rahasia dari Key Vault.

Menggunakan penyimpanan rahasia pusat untuk mengelola rahasia

Saat Anda memindahkan aplikasi ke cloud, gunakan Azure Key Vault untuk menyimpan semua rahasia tersebut dengan aman. Repositori terpusat ini menawarkan penyimpanan yang aman, rotasi kunci, audit akses, dan pemantauan untuk layanan yang tidak mendukung identitas terkelola. Untuk konfigurasi aplikasi, Azure App Configuration disarankan.

Contoh: Implementasi referensi menyimpan rahasia berikut di Key Vault: (1) Nama pengguna dan kata sandi database PostgreSQL, (2) kata sandi Redis Cache, dan (3) rahasia klien untuk ID Microsoft Entra yang terkait dengan implementasi MSAL.

Jangan letakkan Key Vault dalam alur permintaan HTTP

Muat rahasia dari Key Vault saat pengaktifan aplikasi alih-alih selama setiap permintaan HTTP. Key Vault ditujukan untuk menyimpan dan mengambil data sensitif dengan aman selama penyebaran. Akses frekuensi tinggi dalam permintaan HTTP dapat melebihi kemampuan throughput Key Vault, yang mengarah ke batasan permintaan dan kesalahan kode status HTTP 429. Untuk informasi selengkapnya, lihat Batas transaksi Key Vault.

Menggunakan satu metode untuk mengakses rahasia di Key Vault

Saat mengonfigurasi aplikasi web untuk mengakses rahasia di Key Vault, Anda memiliki dua opsi utama:

  • Pengaturan Aplikasi App Service: Gunakan pengaturan aplikasi di App Service untuk menyuntikkan rahasia secara langsung sebagai variabel lingkungan.

  • Referensi rahasia langsung: Referensi langsung rahasia dalam kode aplikasi Anda. Tambahkan referensi tertentu dalam file properti aplikasi Anda, seperti application.properties untuk aplikasi Java, sehingga aplikasi Anda dapat berkomunikasi dengan Key Vault.

Penting untuk memilih salah satu metode ini dan tetap dengannya untuk kesederhanaan dan untuk menghindari kompleksitas yang tidak perlu. Untuk mengintegrasikan Key Vault dengan aplikasi Spring, prosesnya melibatkan:

  1. Tambahkan Azure Spring Boot Starter untuk dependensi Rahasia Azure Key Vault di file pom.xml Anda.
  2. Konfigurasikan titik akhir Key Vault di aplikasi Anda. Ini dapat dilakukan baik melalui file application.properties atau sebagai variabel lingkungan.

Contoh: Implementasi referensi menggunakan pengaturan aplikasi di App Service dan menyuntikkan rahasia.

Menggunakan titik akhir privat

Gunakan titik akhir privat di semua lingkungan produksi untuk semua layanan Azure yang didukung. Titik akhir privat menyediakan koneksi privat antara sumber daya di jaringan virtual Azure dan layanan Azure. Secara default, komunikasi ke sebagian besar layanan Azure melintasi internet publik. Titik akhir privat tidak memerlukan perubahan kode, konfigurasi aplikasi, atau string koneksi apa pun. Untuk informasi selengkapnya, lihat Cara membuat titik akhir privat dan Praktik terbaik untuk keamanan titik akhir.

Contoh: Implementasi referensi menggunakan titik akhir privat untuk Key Vault, Azure Cache for Redis, dan Azure Database for PostgreSQL.

Menggunakan firewall aplikasi web

Semua lalu lintas internet masuk ke aplikasi web harus melewati firewall aplikasi web untuk melindungi dari eksploitasi web umum. Paksa semua lalu lintas internet masuk untuk melewati load balancer publik, jika Anda memilikinya, dan firewall aplikasi web. Anda dapat (1) menggunakan titik akhir privat Azure Front Door, atau (2) Anda dapat memfilter permintaan menurut X-Azure-FDID nilai header.

Platform App Service dan Java Spring dapat memfilter menurut nilai header. Anda harus menggunakan App Service sebagai opsi pertama. Pemfilteran di tingkat platform mencegah permintaan yang tidak diinginkan mencapai kode Anda. Anda perlu mengonfigurasi lalu lintas apa yang ingin Anda lewati melalui firewall aplikasi web Anda. Anda dapat memfilter berdasarkan nama host, IP klien, dan nilai lainnya. Untuk informasi selengkapnya, lihat Mempertahankan nama host HTTP asli.

Contoh: Implementasi referensi menggunakan titik akhir privat di lingkungan produksi dan X-Azure-FDID nilai header di lingkungan pengembangan.

Mengonfigurasi keamanan database

Akses tingkat administrator ke database memberikan izin untuk melakukan operasi istimewa. Operasi istimewa termasuk membuat dan menghapus database, memodifikasi skema tabel, atau mengubah izin pengguna. Pengembang sering memerlukan akses tingkat administrator untuk mempertahankan database atau memecahkan masalah.

  • Hindari izin permanen yang ditingkatkan. Berikan pengembang akses just-in-time untuk melakukan operasi istimewa. Dengan akses just-in-time, pengguna menerima izin sementara untuk melakukan tugas istimewa.

  • Jangan berikan izin yang ditingkatkan aplikasi. Jangan berikan akses tingkat administrator ke identitas aplikasi. Konfigurasikan akses dengan hak istimewa paling sedikit untuk aplikasi ke database. Ini membatasi radius ledakan bug dan pelanggaran keamanan. Anda memiliki dua metode utama untuk mengakses database Azure PostgreSQL. Anda dapat menggunakan autentikasi Microsoft Entra atau autentikasi PostgreSQL. Untuk informasi selengkapnya, lihat JDBC dengan Azure PostgreSQL.

Pengoptimalan biaya

Pengoptimalan biaya adalah tentang melihat cara untuk mengurangi pengeluaran dan overhead manajemen yang tidak perlu. Untuk informasi selengkapnya, lihat Daftar periksa Tinjauan desain untuk Pengoptimalan Biaya. Pola Reliable Web App mengimplementasikan teknik rightsizing, autoscaling, dan penggunaan sumber daya yang efisien untuk aplikasi web yang lebih hemat biaya.

Sumber daya rightsize untuk setiap lingkungan

Pahami berbagai tingkat performa layanan Azure dan hanya gunakan SKU yang sesuai untuk kebutuhan setiap lingkungan. Lingkungan produksi memerlukan SKU yang memenuhi perjanjian tingkat layanan (SLA), fitur, dan skala yang diperlukan untuk produksi. Lingkungan nonproduksi biasanya tidak memerlukan kemampuan yang sama. Untuk penghematan tambahan, pertimbangkan opsi harga Azure Dev/Test, Reservasi Azure, dan paket penghematan Azure untuk komputasi.

Contoh: Implementasi referensi tidak menggunakan harga Azure Dev/Test karena harga Azure Dev/Test tidak mencakup salah satu komponen. Azure Database for PostgreSQL adalah kandidat utama untuk instans cadangan berdasarkan rencana untuk tetap menggunakan mesin database ini setidaknya selama setahun setelah konvergensi awal ini pada fase cloud. Implementasi referensi memiliki parameter opsional yang menyebarkan SKU yang berbeda. Parameter lingkungan menginstruksikan templat Terraform untuk memilih SKU pengembangan. Kode berikut menunjukkan parameter lingkungan ini.

azd env set APP_ENVIRONMENT prod

Contoso Fiber menggunakan templat infrastructure-as-code (IaC) untuk pengembangan dan penyebaran produksi. Lingkungan pengembangan dioptimalkan dengan biaya, menggunakan SKU paling murah yang diperlukan untuk pengembangan aplikasi. Lingkungan produksi menggunakan SKU yang memenuhi persyaratan tujuan tingkat layanan produksi aplikasi.

Menggunakan skala otomatis

Skala otomatis mengotomatiskan penskalaan horizontal untuk lingkungan produksi. Skala otomatis berdasarkan metrik performa. Pemicu performa pemanfaatan CPU adalah titik awal yang baik jika Anda tidak memahami kriteria penskalaan aplikasi Anda. Anda perlu mengonfigurasi dan menyesuaikan pemicu penskalaan (CPU, RAM, jaringan, dan disk) agar sesuai dengan perilaku aplikasi web Anda. Jangan menskalakan secara vertikal untuk memenuhi perubahan permintaan yang sering. Biayanya lebih murah. Untuk informasi selengkapnya, lihat Penskalaan di Azure App Service dan Autoscale di Microsoft Azure.

Menggunakan sumber daya secara efisien

Penggunaan sumber daya yang efisien melibatkan manajemen strategis dan alokasi sumber daya cloud untuk memenuhi kebutuhan organisasi tanpa pemborosan. Ini meminimalkan pengeluaran sumber daya yang tidak perlu dan overhead manajemen. Untuk meningkatkan efisiensi sumber daya, ikuti rekomendasi berikut:

  • Gunakan layanan bersama. Memusatkan dan berbagi sumber daya tertentu memberikan pengoptimalan biaya dan overhead manajemen yang lebih rendah. Misalnya, tempatkan sumber daya jaringan bersama di jaringan virtual hub.

  • Hapus lingkungan yang tidak digunakan. Hapus lingkungan nonproduksi setelah berjam-jam atau selama liburan untuk mengoptimalkan biaya. Anda dapat menggunakan infrastruktur sebagai kode untuk menghapus sumber daya Azure dan seluruh lingkungan. Hapus deklarasi sumber daya yang ingin Anda hapus dari templat infrastruktur sebagai kode Anda. Cadangkan data yang Anda butuhkan nanti. Pahami dependensi pada sumber daya yang Anda hapus. Jika ada dependensi, Anda mungkin perlu memperbarui atau menghapus sumber daya tersebut juga.

  • Kolokasikan fungsionalitas. Jika ada kapasitas cadangan, kolokasikan sumber daya dan fungsionalitas aplikasi pada satu sumber daya Azure. Misalnya, beberapa aplikasi web dapat menggunakan satu server (Paket App Service) atau satu cache dapat mendukung beberapa jenis data.

Keunggulan operasional

Keunggulan operasional mencakup proses operasi yang menyebarkan aplikasi dan membuatnya tetap berjalan dalam produksi. Untuk informasi selengkapnya, lihat Daftar periksa tinjauan desain untuk Keunggulan Operasional. Pola Reliable Web App menerapkan infrastruktur sebagai kode untuk penyebaran infrastruktur dan pemantauan untuk pengamatan.

Mengonfigurasi pemantauan

Untuk penelusuran dan penelusuran kesalahan, Anda harus mengaktifkan pengelogan untuk mendiagnosis ketika permintaan apa pun gagal. Telemetri yang Anda kumpulkan dari aplikasi Anda harus memenuhi kebutuhan operasionalnya. Minimal, Anda harus mengumpulkan telemetri pada metrik dasar. Anda harus mengumpulkan informasi tentang perilaku pengguna yang dapat membantu Anda menerapkan peningkatan yang ditargetkan.

Memantau metrik garis besar

Beban kerja harus memantau metrik dasar. Metrik penting untuk diukur termasuk throughput permintaan, durasi permintaan rata-rata, kesalahan, dan dependensi pemantauan. Kami menyarankan agar Anda menggunakan Application Insights untuk mengumpulkan telemetri ini.

Contoh: Implementasi referensi menggunakan Application Insights. Application Insights diaktifkan melalui Terraform sebagai bagian dari konfigurasi app_settings App Service.

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

Spring Boot mendaftarkan beberapa metrik inti di Application Insights seperti komputer virtual Java (JVM), CPU, Tomcat, dan lainnya. Application Insights secara otomatis mengumpulkan dari kerangka kerja pengelogan seperti Log4j dan Logback. Untuk informasi selengkapnya, lihat:

Membuat telemetri dan metrik kustom sesuai kebutuhan

Selain metrik dasar di Application Insights, Anda harus membuat telemetri kustom untuk lebih memahami pengguna Anda dan interaksi mereka dengan aplikasi Anda. Application Insights memungkinkan Anda mengumpulkan telemetri kustom, dan Anda juga dapat mengumpulkan metrik kustom melalui Micrometer. Tujuannya adalah untuk mendapatkan wawasan yang lebih mendalam tentang performa aplikasi dan perilaku pengguna Anda, sehingga Anda dapat membuat keputusan dan peningkatan yang lebih terinformasi.

Mengumpulkan metrik berbasis log

Lacak metrik berbasis log untuk mendapatkan lebih banyak visibilitas ke dalam kesehatan dan metrik aplikasi penting. Anda dapat menggunakan kueri Bahasa Kueri Kusto (KQL) di Application Insights untuk menemukan dan menata data. Untuk informasi selengkapnya, lihat Metrik berbasis log Azure Application Insights dan Metrik berbasis log dan pra-integrasi di Application Insights.

Mengaktifkan diagnostik platform

Pengaturan diagnostik di Azure memungkinkan Anda menentukan log dan metrik platform yang ingin Anda kumpulkan dan tempat menyimpannya. Log platform adalah log bawaan yang menyediakan informasi diagnostik dan audit. Anda dapat mengaktifkan diagnostik platform untuk sebagian besar layanan Azure, tetapi setiap layanan menentukan kategori lognya sendiri. Layanan Azure yang berbeda memiliki kategori log untuk dipilih.

  • Aktifkan diagnostik untuk semua layanan yang didukung. Layanan Azure membuat log platform secara otomatis, tetapi layanan tidak menyimpannya secara otomatis. Anda harus mengaktifkan pengaturan diagnostik untuk setiap layanan, dan Anda harus mengaktifkannya untuk setiap layanan Azure yang mendukung diagnostik.

  • Kirim diagnostik ke tujuan yang sama dengan log aplikasi. Saat mengaktifkan diagnostik, Anda memilih log yang ingin Anda kumpulkan dan ke mana harus mengirimnya. Anda harus mengirim log platform ke tujuan yang sama dengan log aplikasi sehingga Anda dapat menghubungkan dua himpunan data.

Contoh: Implementasi referensi menggunakan Terraform untuk mengaktifkan diagnostik Azure pada semua layanan yang didukung. Kode Terraform berikut mengonfigurasi pengaturan diagnostik untuk App Service.

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

Menggunakan alur CI/CD

Untuk mengotomatiskan penyebaran Anda, integrasikan alur integrasi berkelanjutan/penyebaran berkelanjutan (CI/CD). Otomatisasi ini harus memperluas dari kontrol sumber langsung ke berbagai lingkungan App Service Anda, termasuk pengujian, penahapan, dan produksi. Gunakan Azure Pipelines jika Anda bekerja dengan Azure DevOps atau GitHub Actions untuk proyek GitHub.

  • Mengintegrasikan pengujian unit. Prioritaskan eksekusi dan lulus semua pengujian unit (menggunakan JUnit) dalam alur Anda sebelum penyebaran apa pun ke App Services. Masukkan kualitas kode dan alat cakupan seperti SonarQube dan JaCoCo untuk mencapai cakupan pengujian yang komprehensif.

  • Mengadopsi kerangka kerja tiruan Java. Untuk pengujian yang melibatkan titik akhir eksternal, gunakan kerangka kerja tiruan Java (Mockito, EasyMock). Kerangka kerja ini memungkinkan Anda membuat titik akhir yang disimulasikan. Mereka menghilangkan kebutuhan untuk mengonfigurasi titik akhir eksternal nyata dan memastikan kondisi pengujian seragam di seluruh lingkungan.

  • Lakukan pemindaian keamanan. Gunakan pengujian keamanan aplikasi statis (SAST) untuk menemukan kelemahan keamanan dan kesalahan pengkodean dalam kode sumber Anda. Selain itu, lakukan analisis komposisi perangkat lunak (SCA) untuk memeriksa pustaka dan komponen pihak ketiga untuk risiko keamanan. Alat untuk analisis ini mudah diintegrasikan ke dalam GitHub dan Azure DevOps.

Mengatur penyebaran produksi

Anda perlu membuat panduan untuk menyebarkan kode ke produksi dan membuat proses persetujuan untuk semua penyebaran produksi.

Efisiensi kinerja

Efisiensi performa adalah kemampuan beban kerja Anda untuk diskalakan agar memenuhi permintaan yang diberikan oleh pengguna dengan cara yang efisien. Untuk informasi selengkapnya, lihat Daftar periksa Ulasan desain untuk Efisiensi Performa. Pola Reliable Web App menggunakan pola Cache-Aside untuk meminimalkan latensi untuk data yang sangat diminta.

Menggunakan pola Cache-Aside

Pola Cache-Aside adalah strategi penembolokan yang meningkatkan manajemen data dalam memori. Pola menetapkan aplikasi tanggung jawab menangani permintaan data dan memastikan konsistensi antara cache dan penyimpanan persisten, seperti database. Saat aplikasi web menerima permintaan data, aplikasi web pertama-tama mencari cache. Jika data hilang, data mengambilnya dari database, merespons permintaan, dan memperbarui cache yang sesuai. Pendekatan ini mempersingkat waktu respons dan meningkatkan throughput dan mengurangi kebutuhan akan penskalaan yang lebih besar. Ini juga memperkuat ketersediaan layanan dengan mengurangi beban pada datastore utama dan meminimalkan risiko pemadaman.

Aktifkan penembolokan

Untuk mengaktifkan penembolokan, tambahkan spring-boot-starter-cache paket sebagai dependensi dalam file Anda pom.xml . Paket spring-boot-starter-cache mengonfigurasi cache Redis dengan nilai default. Anda harus memperbarui nilai tersebut dalam application.properties file atau variabel lingkungan untuk memenuhi kebutuhan aplikasi web Anda. Misalnya, spring.cache.redis.time-to-live (diwakili dalam milidetik) menentukan jumlah waktu data tetap berada di cache sebelum pengeluaran. Anda perlu memberikan nilai yang memenuhi kebutuhan aplikasi web Anda. Terakhir, Anda perlu menyimpan data yang diperlukan dalam kode Anda dengan menggunakan @Cacheable anotasi.

Cache data dengan kebutuhan tinggi

Prioritaskan penembolokan untuk data yang paling sering diakses. Identifikasi poin data utama yang mendorong keterlibatan pengguna dan performa sistem. Terapkan strategi penembolokan khusus untuk area ini untuk mengoptimalkan efektivitas pola Cache-Aside, secara signifikan mengurangi latensi dan beban database. Gunakan Azure Monitor untuk melacak CPU, memori, dan penyimpanan database. Metrik ini membantu Anda menentukan apakah Anda dapat menggunakan SKU database yang lebih kecil.

Menjaga data cache tetap segar

Jadwalkan pembaruan cache reguler untuk disinkronkan dengan perubahan database terbaru. Tentukan laju refresh optimal berdasarkan volatilitas data dan kebutuhan pengguna. Praktik ini memastikan aplikasi menggunakan pola Cache-Aside untuk memberikan akses cepat dan informasi saat ini.

Memastikan konsistensi data

Terapkan mekanisme untuk memperbarui cache segera setelah operasi penulisan database apa pun. Gunakan pembaruan berbasis peristiwa atau kelas manajemen data khusus untuk memastikan koherensi cache. Menyinkronkan cache secara konsisten dengan modifikasi database adalah pusat dari pola Cache-Aside.

Contoh: Kode berikut menambahkan spring-boot-starter-cache paket sebagai dependensi ke pom.xml file untuk mengaktifkan penembolokan.

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

Implementasi referensi memungkinkan Redis dalam application.properties file.

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

Kode berikut mendefinisikan metode yang disebut getAccountDetail. Metode mengambil pengaturan pengguna yang terkait dengan nama pengguna tertentu. Anotasi @Cacheable(value="account-details", key="#id") getAccountDetailmetode dan memberi tahu aplikasi web untuk menyimpan cache pengaturan pengguna dalam cache.

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

Performa database

Performa database dapat memengaruhi performa dan skalabilitas aplikasi. Penting untuk menguji performa database Anda untuk memastikan database dioptimalkan. Beberapa pertimbangan utama termasuk memilih wilayah cloud yang tepat, pengumpulan koneksi, pola cache-aside, dan mengoptimalkan kueri.

  • Uji lompatan jaringan. Memindahkan aplikasi ke cloud dapat memperkenalkan hop dan latensi jaringan tambahan ke database Anda. Anda harus menguji hop tambahan yang diperkenalkan oleh lingkungan cloud baru.

  • Menetapkan garis besar performa. Anda harus menggunakan metrik performa lokal sebagai garis besar awal untuk membandingkan performa aplikasi di cloud.

  • Gunakan Application Insights. Application Insights menyediakan metrik terperinci tentang kueri database dan antarmuka JDBC apa pun. Anda harus menggunakannya untuk memastikan database port memenuhi SLA-nya atau untuk menemukan kueri yang perlu Anda sesuaikan. Anda tidak boleh menggunakan SQL Dinamis karena menciptakan masalah keamanan dan performa.

  • Gunakan kumpulan koneksi. Anda harus menggunakan kumpulan koneksi JDBC dan menyempurnakannya berdasarkan metrik transaksi per detik (TPS) dan SLA. Anda harus menggunakan alat pemantauan performa database untuk menguji dan mengevaluasi performa database di bawah beban.

Langkah berikutnya

Sebarkan implementasi referensi dengan mengikuti instruksi di repositori GitHub. Gunakan sumber daya berikut untuk mempelajari selengkapnya tentang praktik dan migrasi terbaik cloud.

Praktik terbaik cloud. Untuk panduan adopsi dan arsitektur Azure, lihat:

  • Cloud Adoption Framework. Kerangka kerja untuk membantu organisasi Anda menyiapkan dan menjalankan strategi untuk membangun solusi di Azure.
  • Kerangka Kerja Yang Dirancang Dengan Baik. Sekumpulan tenet panduan yang dapat Anda gunakan untuk meningkatkan kualitas beban kerja.

Untuk aplikasi yang memerlukan tujuan tingkat layanan (SLO) yang lebih tinggi, lihat beban kerja misi penting.

Panduan migrasi. Alat dan sumber daya berikut ini dapat membantu Anda memigrasikan sumber daya lokal ke Azure:

  • Azure Migrate menyediakan layanan migrasi, modernisasi, dan pengoptimalan yang disederhanakan untuk Azure yang menangani penilaian dan migrasi aplikasi web, SQL Server, dan komputer virtual.
  • Panduan Migrasi Database Azure menyediakan sumber daya untuk berbagai jenis database, dan alat yang dirancang untuk skenario migrasi Anda.
  • Akselerator zona pendaratan Azure App Service menyediakan panduan untuk pengerasan dan penskalaan penyebaran App Service.