Menskalakan dengan keamanan, pemantauan, dan otomatisasi end-to-end

Saat merancang aplikasi, kita perlu menentukan cara beradaptasi dengan perubahan beban kerja, pulih dari kegagalan tak terduga, meminimalkan risiko keamanan, dan sebagainya. Meskipun seseorang dapat memulai dengan pendekatan percobaan dan kesalahan, yang membutuhkan waktu jauh dari tujuan organisasi lain, dan dapat berdampak buruk pada reputasi kita. Azure menyediakan panduan arsitektur yang diperlukan untuk mendapatkan hal-hal langsung sejak awal. Anda juga memiliki semua yang Anda butuhkan untuk membangun aplikasi yang dapat diskalakan - mulai dari keamanan mutakhir dan penskalaan otomatis hingga layanan pendukung untuk data, olahpesan, penembolokan, pemantauan performa, dan otomatisasi. Banyak dari layanan pendukung ini juga didasarkan pada perangkat lunak sumber terbuka populer - seperti PostgreSQL, Redis, JMS, dan Kafka - sehingga Anda tidak terkunci ke dalam solusi kepemilikan.

Diagram dengan judul 'Platform Services' dan logo untuk layanan yang dijelaskan dalam artikel ini.

Sekarang mari kita lihat beberapa layanan dan fitur Azure utama - dan bagaimana Anda dapat menempatkannya untuk digunakan untuk membangun aplikasi Java yang dapat diskalakan.

Memperluas kemampuan untuk aplikasi Java - database dan olahpesan

Selain menyediakan beberapa opsi untuk menjalankan kode Java Anda, Azure menawarkan berbagai layanan terkelola penuh untuk mendukung kebutuhan database Anda - termasuk Azure Database for PostgreSQL, Azure Database for MySQL, MongoDB Atlas, Azure Cosmos DB, Azure SQL Database, dan Azure SQL Managed Instance. Hal yang sama berlaku untuk olahpesan, dengan opsi yang mencakup Azure Bus Layanan, Azure Event Hubs, dan Apache Kafka untuk Confluent Cloud.

Tingkat Azure Bus Layanan Premium mendukung JMS, model pemrograman Java Messaging Service. Terlepas dari apakah aplikasi Anda berjalan pada VM, di Kubernetes, atau pada layanan PaaS yang dikelola sepenuhnya, Anda dapat dengan cepat memprovisikan dan menggunakan layanan data dan olahpesan yang dikelola sepenuhnya ini menggunakan klien sumber terbuka, Azure Java SDK, spring starter, dan integrasi server aplikasi. Semuanya memberikan jaminan kepatuhan, ketersediaan, dan keandalan yang Anda harapkan dari Microsoft dan Azure. Banyak pengembang Java dan Spring ingin menggunakan pustaka idiomatik untuk menyederhanakan koneksi ke layanan cloud pilihan mereka. Microsoft mempertahankan daftar pustaka, driver, dan modul yang komprehensif yang memungkinkan Anda berinteraksi dengan layanan Azure dengan mudah di seluruh data, pesan, cache, penyimpanan, peristiwa, direktori, dan manajemen rahasia. Untuk informasi selengkapnya, lihat panduan pengembang Spring Cloud Azure.

Diagram yang mencantumkan fitur Spring Cloud Azure dan layanan Azure terkait.

Diagram yang memperlihatkan kategori fitur dan layanan platform Azure terkait yang didukung oleh berbagai pustaka Java, driver, dan modul Spring.

Zero-Trust - Jaringan aman

Anda dapat mengamankan aplikasi Java dengan menyebarkannya di Azure Virtual Network - blok penyusun dasar untuk jaringan privat Anda sendiri di Azure. Jaringan virtual memungkinkan banyak jenis sumber daya Azure untuk berkomunikasi satu sama lain dengan aman, dengan internet, dan dengan jaringan dan sistem lokal Anda. Anda dapat menggunakan jaringan virtual untuk mengisolasi aplikasi Anda dan mendukung layanan backend dari Internet dan menempatkannya di jaringan privat Anda. Anda dapat mengasumsikan kontrol penuh terhadap ingress dan egress untuk aplikasi dan sistem backend Anda.

Diagram arsitektur referensi Azure Spring Apps.

Zero-Trust - Komunikasi aman end-to-end

Menerapkan komunikasi yang aman sebagai bagian dari arsitektur solusi bisa menjadi tantangan. Banyak perusahaan secara manual memutar sertifikat mereka atau membangun solusi mereka sendiri untuk mengotomatiskan provisi dan konfigurasi. Bahkan kemudian, masih ada risiko penyelundupan data, seperti penyalinan atau transfer data yang tidak sah.

Dengan Azure, Anda dapat mengamankan komunikasi secara end-to-end atau mengakhiri keamanan tingkat transportasi di titik komunikasi apa pun. Anda juga dapat mengotomatiskan provisi dan konfigurasi untuk semua sumber daya Azure yang diperlukan untuk mengamankan komunikasi. Untuk melihat cara kerjanya untuk Azure Spring Apps, lihat Mengamankan komunikasi end-to-end untuk aplikasi Spring Boot – di lingkungan Zero Trust. Proses ini mirip untuk layanan komputasi Azure lainnya yang dapat Anda gunakan untuk menjalankan aplikasi Java Anda.

Berdasarkan prinsip "jangan pernah percaya, selalu verifikasi, dan bebas kredensial," Zero Trust membantu mengamankan semua komunikasi dengan menghilangkan sertifikat yang tidak diketahui dan tidak dikelola, dan hanya dengan mempercayai sertifikat yang dibagikan dengan memverifikasi identitas sebelum memberikan akses ke sertifikat tersebut. Anda dapat menggunakan semua jenis sertifikat TLS/SSL, termasuk sertifikat yang dikeluarkan oleh otoritas sertifikat, sertifikat validasi yang diperpanjang, sertifikat kartubebas dengan dukungan untuk sejumlah sub-domain, atau sertifikat yang ditandatangani sendiri untuk lingkungan pengembangan dan pengujian.

Aplikasi Java atau Spring Boot dapat memuat sertifikat dengan aman dari Azure Key Vault (dibahas berikutnya). Dengan Azure Key Vault, Anda mengontrol penyimpanan dan distribusi sertifikat untuk mengurangi kebocoran yang tidak disengaja. Aplikasi dan layanan dapat mengakses sertifikat dengan aman menggunakan identitas terkelola, kontrol akses berbasis peran, dan prinsip hak istimewa paling sedikit. Pemuatan aman ini didukung menggunakan Penyedia Azure Key Vault JCA (Arsitektur Kriptografi Java).

Diagram arsitektur untuk komunikasi end-to-end yang aman untuk aplikasi Spring Boot.

Zero-Trust - Mengelola rahasia

Banyak aplikasi Java terhubung ke layanan pendukung menggunakan URL dan kredensial - informasi yang, jika terekspos, dapat digunakan untuk mendapatkan akses tidak sah ke data sensitif. Menyematkan informasi tersebut dalam aplikasi itu sendiri menghadirkan risiko keamanan yang besar karena berbagai alasan, termasuk penemuan melalui repositori kode. Banyak pengembang eksternalisasi kredensial tersebut menggunakan variabel lingkungan, sehingga beberapa aplikasi dapat memuatnya, tetapi ini hanya mengalihkan risiko dari kode itu sendiri ke lingkungan eksekusi.

Diagram dengan judul 'Zero Trust - mengelola rahasia menggunakan Azure Key Vault' dan menyertakan ringkasan fitur yang dijelaskan di bagian ini.

Azure Key Vault menyediakan cara yang lebih baik, lebih aman, dan lebih aman untuk melindungi rahasia. Ini memberi Anda kontrol penuh atas penyimpanan dan distribusi rahasia aplikasi, menggunakan Kontrol Akses Berbasis Peran (RBAC) dan prinsip hak istimewa paling sedikit untuk membatasi akses. Anda menjaga kontrol atas rahasia aplikasi Anda - cukup berikan izin bagi aplikasi Anda untuk menggunakannya sesuai kebutuhan. Setelah pengaktifan aplikasi, sebelum memberikan akses ke rahasia, aplikasi mengautentikasi dengan ID Microsoft Entra dan Azure Key Vault mengotorisasi menggunakan Azure RBAC. Azure Key Vault mencakup kemampuan audit penuh dan memiliki dua tingkat layanan: Standar, yang mengenkripsi dengan kunci perangkat lunak, dan tingkat Premium, yang mencakup kunci yang dilindungi modul keamanan perangkat keras (HSM).

Autentikasi dan otorisasi pengguna akhir

Sebagian besar aplikasi Java perusahaan memerlukan autentikasi dan otorisasi pengguna, yang dapat Anda terapkan menggunakan ID Microsoft Entra - solusi manajemen identitas dan akses lengkap dengan keamanan terintegrasi. Akun pengguna akhir dapat berupa identitas organisasi atau identitas sosial dari Facebook, Twitter, atau Gmail menggunakan MICROSOFT Entra ID dan Azure Active Directory B2C. Anda dapat menerapkan solusi berbasis ID Microsoft Entra menggunakan Microsoft Authentication Library untuk Java atau Spring Boot Starter untuk Microsoft Entra. Anda juga dapat menggunakan penyedia identitas pilihan Anda - seperti ForgeRock, Auth0, Ping, atau Okta.

Memantau end-to-end

Dengan Azure, Anda dapat memantau aplikasi Java anda secara menyeluru, menggunakan alat dan platform apa pun. Secara bergantian, Anda dapat menerapkan pemantauan asli yang dikelola sepenuhnya - termasuk pemantauan performa aplikasi (APM) - dengan menggunakan Application Insights, fitur Azure Monitor. Ini memberikan dukungan yang kuat untuk Java, Spring, dan kerangka kerja seperti Micrometer dan Spring Boot, memungkinkan Anda mengidentifikasi dan memecahkan masalah dengan cepat. Fitur termasuk streaming metrik langsung, laju permintaan dan pelacakan waktu respons, pelacakan peristiwa, dan tingkat dependensi eksternal - semua yang Anda butuhkan untuk memantau ketersediaan, performa, keandalan, dan penggunaan aplikasi Java Anda yang berjalan di Azure atau lokal.

Anda dapat memantau end-to-end dengan menggabungkan log dan metrik di Analitik Log, alat di portal Azure, yang dapat digunakan untuk mengedit dan menjalankan kueri pada data log dan metrik di Azure Monitor. Anda dapat menulis kueri yang mengembalikan sekumpulan rekaman lalu menggunakan Analitik Log untuk mengurutkan, memfilter, dan menganalisisnya. Atau Anda dapat menulis kueri yang lebih canggih untuk melakukan analisis statistik dan memvisualisasikan hasil dalam bagan, seperti yang mungkin diperlukan untuk mengidentifikasi tren tertentu. Apakah Anda bekerja dengan hasil kueri Anda secara interaktif atau menggunakannya dengan fitur Azure Monitor lainnya seperti pemberitahuan kueri log atau buku kerja, Log Analytics adalah alat yang baik untuk digunakan untuk menulis dan menguji kueri Anda.

Meskipun demikian, kami menyadari bahwa pelanggan yang membawa aplikasi Java mereka ke Azure mungkin ingin terus menggunakan alat APM yang sama dengan yang mereka gunakan untuk memantau aplikasi lokal mereka. Untuk mendukung penggunaan ini, kami bermitra dengan New Relic, AppDynamics, Dynatrace, dan Elastic untuk mengintegrasikan solusi pemantauan mereka dengan Azure App Service dan Azure Spring Apps. Agen pemantauan berjalan berdampingan dengan kode Anda, dan kami menginstal dan menjaga agen diperbarui untuk Anda. Saat menyebarkan ke Azure Container Apps, Azure Kubernetes Service, atau Virtual Machines, Anda dapat menjalankan salah satu agen ini (termasuk New Relic, AppDynamics, Dynatrace, Elastic, dan Datadog) bersama aplikasi Anda, tetapi Anda perlu menginstal dan mengelolanya sendiri. Demikian juga, Anda dapat memantau end-to-end dengan menggabungkan log dan metrik di Elastic dan Splunk.

Diagram dengan judul 'Pantau end-to-end menggunakan alat dan platform apa pun', contoh cuplikan layar, dan logo untuk alat yang dijelaskan dalam artikel ini.

Kami juga menyadari bahwa banyak pelanggan ingin terus menggunakan Grafana untuk mengkueri, memvisualisasikan, memperingatkan, dan memahami metrik mereka. Untuk alasan ini, kami bermitra dengan Grafana Labs untuk memberikan Azure Managed Grafana, layanan terkelola penuh yang memungkinkan pelanggan menjalankan Grafana secara asli di Azure. Layanan ini memudahkan penyebaran instans Grafana yang aman dan dapat diskalakan dan menghubungkannya ke sumber terbuka, cloud, dan sumber data pihak ketiga untuk visualisasi dan analisis. Layanan ini dioptimalkan untuk sumber data asli Azure seperti Azure Monitor dan Azure Data Explorer, dan mencakup integrasi pemantauan performa aplikasi (APM) dengan layanan komputasi Azure seperti Azure App Service, Azure Spring Apps, Azure Kubernetes Service, Splunk, Datadog, dan Azure Virtual Machines.

Mempercepat aplikasi Java menggunakan penembolokan

Seiring bertambahnya beban kerja untuk aplikasi Java, Anda dapat meningkatkan performa dengan menggunakan Azure Cache for Redis untuk menerapkan lapisan penembolokan dalam memori untuk hasil kueri, status sesi, dan konten statis. Ini adalah cara yang bagus untuk meningkatkan throughput aplikasi dan mengurangi latensi tanpa harus menyusun ulang database yang mendasar Anda. Tingkat Azure Cache for Redis Enterprise, yang dikembangkan dalam kemitraan dengan Redis dan dikelola sepenuhnya oleh Microsoft, adalah opsi penyebaran yang paling tersedia dan dapat diskalakan untuk menjalankan Redis di Azure - termasuk fitur seperti replikasi geografis aktif, manajemen sesi eksternal, dan pencarian dan pengindeksan berkecepatan tinggi.

Diagram dengan judul 'Mempercepat dan Menskalakan aplikasi Java dengan Redis Cache' dan menyertakan ringkasan fitur yang dijelaskan di bagian ini.

Penskalaan otomatis

Semua layanan "komputasi" Azure untuk menjalankan aplikasi Java mendukung penskalaan otomatis (penskalaan otomatis), yang dapat membantu Anda memaksimalkan efisiensi biaya dan beradaptasi dengan mengubah beban kerja tanpa membayar kapasitas lebih dari yang Anda butuhkan. Setelah diaktifkan, Anda dapat yakin bahwa skala otomatis mengurus infrastruktur yang mendasar dan beban kerja aplikasi Anda.

Diagram dengan judul 'Dorong pemanfaatan aplikasi yang lebih tinggi dengan Autoscale' dan sertakan ringkasan fitur yang dijelaskan di bagian ini.

Anda dapat secara otomatis menskalakan masuk atau keluar berdasarkan beban atau jadwal. Dalam mode berbasis beban (atau berbasis metrik), aplikasi Anda diskalakan secara horizontal ke sumber daya yang diperlukan untuk menangani beban, hingga batas yang Anda tetapkan. Demikian pula, ketika beban menurun, sumber daya diskalakan secara horizontal, tidak pernah berada di bawah minimum yang Anda tetapkan.

Dalam mode berbasis jadwal, aplikasi Anda diskalakan dan diskalakan berdasarkan jadwal dan batas yang ditentukan. Mode berbasis jadwal berguna untuk beban kerja yang mengikuti pola yang dapat diprediksi dan dapat digunakan untuk membuat garis besar untuk penskalaan berbasis beban yang lebih banyak.

Otomatisasi dari ide ke produksi

Saat Anda memindahkan aplikasi ke cloud, Anda ingin mengotomatiskan semuanya - sesuai kebutuhan untuk pengembangan Java dalam skala perusahaan. Anda perlu mempertimbangkan penskalakan otomatis untuk mengatasi beban kerja aplikasi, seperti yang dicakup sebelumnya. Tetapi Anda juga perlu menskalakan dan mengotomatiskan lingkungan cloud Anda secara keseluruhan - idealnya dari ide ke produksi - termasuk cara memprovisikan lingkungan baru dengan cepat untuk pengujian, QA, produksi, penyebaran biru/hijau, perluasan geografis, dan sebagainya.

Diagram yang memperlihatkan kotak untuk kategori Provisi, Bangun, dan Sebarkan dengan logo terkait untuk alat yang dijelaskan di bagian ini.

Azure memungkinkan Anda mengotomatiskan dari ide ke produksi menggunakan berbagai alat dan platform. Pada tingkat tinggi, alur otomatisasi tersebut dapat dipecah menjadi tiga kategori:

  • Alur provisi - Anda dapat memprovisikan sumber daya Azure menggunakan Terraform, templat Azure Resource Manager (ARM), templat Bicep, atau Azure CLI, sesuai kebutuhan untuk membuat skrip berulang untuk lingkungan spinning-up dan spinning-down secara konsisten.

  • Buat alur - Berdasarkan alat seperti Maven atau Gradle, seperti yang dibahas sebelumnya dalam dokumentasi ini.

  • Alur penyebaran - Anda dapat menggunakan GitHub Actions, Azure Pipelines, Jenkins Pipelines, GitLab Pipelines, atau Azure CLI untuk mengotomatiskan penyebaran kode, termasuk penyebaran biru/hijau yang menjaga sistem penting dalam produksi saat Anda menyebarkan pembaruan kode.

Terus gunakan praktik dan sistem yang ada

Saat memigrasikan atau membangun lalu menskalakan aplikasi Java di Azure, Anda dapat menggunakan investasi yang ada dalam jaringan, pemantauan, otomatisasi, penyedia identitas, sistem lokal, alat pengembangan dan build, dan pustaka aplikasi. Tabel berikut ini menyediakan beberapa contoh:

Kategori Produk dan layanan ekosistem Java
Jaringan F5, Palo Alto, Cloudflare, Checkpoint, Infoblox
Pemantauan New Relic, Dynatrace, AppDynamics, Elastic, Splunk
Automation GitHub Actions, Azure Pipelines, Jenkins, GitLab
IdP Microsoft Entra ID, ForgeRock, Auth0, Ping, Okta
Sistem lokal Database (seperti Oracle DB atau IBM DB2), pesan (seperti IBM MQ atau TIBCO EMS), peristiwa (seperti Kafka), direktori (seperti ID Microsoft Entra, OpenLDAP, atau ID IBM)
Alat pengembangan IntelliJ, Visual Studio Code, Eclipse, Spring Tool Suite, Maven, Gradle

Arsitektur referensi

Azure Architecture Center menyediakan panduan untuk membangun solusi di Azure menggunakan pola dan praktik yang mapan, termasuk cara menggunakan kemampuan ini. Arsitektur referensi ini didasarkan pada apa yang kami pelajari dari keterlibatan pelanggan, dengan mempertimbangkan pengoptimalan biaya, keunggulan operasional, efisiensi performa, keandalan, skalabilitas, keamanan, pemantauan, pengujian asap, dan banyak lagi. Mereka juga membahas komponen desain solusi seperti zona pendaratan Azure - lingkungan untuk menghosting beban kerja Anda yang telah disediakan sebelumnya melalui infrastruktur sebagai kode, sesuai kebutuhan untuk mengaktifkan migrasi aplikasi Java dan pengembangan greenfield dalam skala perusahaan.

Misalnya, berikut adalah akselerator zona pendaratan untuk Azure Spring Apps, yang menunjukkan cara menerapkan desain hub-and-spoke tempat Azure Spring Apps disebarkan dalam satu spoke yang bergantung pada layanan bersama yang dihosting di hub. Proyek ini dibangun dengan komponen untuk mencapai tenet dalam Microsoft Azure Well-Architected Framework. Untuk menjelajahi implementasi arsitektur ini, lihat repositori Azure Spring Apps Landing Zone Accelerator di GitHub. Anda dapat menerapkan pendekatan yang sama ke aplikasi Java apa pun yang disebarkan ke tujuan "komputasi" Azure - seperti Azure App Service, Azure Container Apps, atau Azure Kubernetes Service. Selain itu, jika Anda melihat migrasi aplikasi Java yang ada ke Azure, kami memiliki serangkaian panduan migrasi yang komprehensif dan strategi yang direkomendasikan.

Diagram dengan judul 'Skalakan dengan keamanan, pemantauan, dan otomatisasi end-to-end' dan logo untuk alat yang dijelaskan dalam artikel ini.

Langkah selanjutnya

Pilih layanan Azure yang tepat untuk aplikasi Java Anda