Bagikan melalui


Rekomendasi hosting Azure untuk aplikasi web ASP.NET Core

Tip

Konten ini adalah kutipan dari e-book berjudul Architect Modern Web Applications with ASP.NET Core and Azure, yang tersedia di .NET Docs atau sebagai PDF yang dapat diunduh gratis dan dibaca secara offline.

Architect Modern Web Applications with ASP.NET Core and Azure eBook cover thumbnail.

"Para pemimpin lini bisnis di mana-mana melewati departemen TI untuk mendapatkan aplikasi dari cloud (juga dikenal sebagai SaaS) dan membayarnya layaknya berlangganan majalah. Dan ketika layanan tidak lagi diperlukan, mereka dapat membatalkan langganan tanpa peralatan yang tidak terpakai."
- Daryl Plummer, analis Gartner

Apa pun kebutuhan dan arsitektur aplikasi Anda, Microsoft Azure dapat mendukungnya. Kebutuhan hosting Anda bisa sesimpel situs web statik atau aplikasi canggih yang terdiri dari puluhan layanan. Untuk layanan pendukung dan aplikasi web monolitik ASP.NET Core, terdapat beberapa konfigurasi terkenal yang direkomendasikan. Rekomendasi pada artikel ini dikelompokkan berdasarkan jenis sumber daya yang akan dihosting, baik aplikasi lengkap, proses individual, maupun data.

Aplikasi web

Aplikasi web dapat dihosting dengan:

  • App Service Web Apps

  • Kontainer (beberapa opsi)

  • Komputer Virtual (VM)

Dari jumlah tersebut, App Service Web Apps adalah pendekatan yang direkomendasikan untuk sebagian besar skenario, termasuk aplikasi berbasis kontainer sederhana. Untuk arsitektur layanan mikro, pertimbangkan pendekatan berbasis kontainer. Jika Anda perlu lebih banyak kontrol atas mesin yang menjalankan aplikasi Anda, pertimbangkan Azure Virtual Machines.

App Service Web Apps

App Service Web Apps menawarkan platform yang dikelola penuh dan dioptimalkan untuk menghosting aplikasi web. Ini adalah penawaran platform as a service (PaaS) yang memungkinkan Anda fokus pada logika bisnis Anda, sementara Azure mengurus infrastruktur yang diperlukan untuk menjalankan dan menskalakan aplikasi. Beberapa fitur utama App Service Web Apps:

  • Pengoptimalan DevOps (integrasi dan pengiriman berkelanjutan, beberapa lingkungan, pengujian A/B, dukungan skrip).

  • Skala global dan ketersediaan tinggi.

  • Koneksi ke platform SaaS dan data lokal Anda.

  • Keamanan dan kepatuhan.

  • Integrasi Visual Studio.

Azure App Service adalah pilihan terbaik untuk sebagian besar aplikasi web. Penyebaran dan manajemen diintegrasikan ke dalam platform, situs dapat menskalakan dengan cepat untuk menangani beban lalu lintas yang tinggi, dan penyeimbangan beban bawaan dan manajer lalu lintas memberikan ketersediaan tinggi. Anda dapat memindahkan situs yang ada ke Azure App Service dengan mudah menggunakan alat migrasi online. Anda dapat menggunakan aplikasi sumber terbuka dari Galeri Aplikasi Web, atau membuat situs baru menggunakan kerangka kerja dan alat pilihan Anda. Fitu WebJobs memudahkan untuk menambahkan pemrosesan pekerjaan latar belakang ke aplikasi web App Service Anda. Jika Anda memiliki aplikasi ASP.NET yang sudah ada dan dihosting secara lokal menggunakan database lokal, ada jalur yang jelas untuk bermigrasi. Anda dapat menggunakan App Service Web App dengan Azure SQL Database (atau mengamankan akses ke server database lokal Anda, jika diinginkan).

Recommended migration strategy for on-premises .NET apps to Azure App Service

Dalam kebanyakan kasus, berpindah dari aplikasi ASP.NET yang dihosting secara lokal ke App Service Web App adalah proses yang mudah. Sedikit atau tidak ada modifikasi yang diperlukan dari aplikasi itu sendiri, aplikasi tersebut dapat dengan cepat mulai memanfaatkan banyak fitur yang ditawarkan App Service Web Apps.

Selain aplikasi yang tidak dioptimalkan untuk cloud, Aplikasi App Service Web Apps adalah solusi yang sangat bagus bagi banyak aplikasi monolitik simpel (tidak terdistribusi), seperti banyak aplikasi ASP.NET Core. Dalam pendekatan ini, arsitekturnya dasar dan mudah dipahami dan dikelola:

Basic Azure architecture

Sejumlah kecil sumber daya dalam satu grup sumber daya biasanya cukup untuk mengelola aplikasi tersebut. Aplikasi yang biasanya disebarkan sebagai satu unit, bukan aplikasi yang terdiri dari banyak proses terpisah, adalah kandidat yang baik untuk pendekatan arsitektur dasar ini. Meskipun secara arsitektur sederhana, pendekatan ini masih memungkinkan aplikasi yang dihosting untuk meningkatkan skala (lebih banyak sumber daya per node) dan keluar (lebih banyak node yang dihosting) untuk memenuhi peningkatan permintaan. Dengan skala otomatis, aplikasi dapat dikonfigurasi untuk secara otomatis menyesuaikan jumlah simpul yang menghosting aplikasi berdasarkan permintaan dan beban rata-rata di seluruh node.

App Service Web Apps untuk Kontainer

Selain dukungan untuk menghosting aplikasi web secara langsung, App Service Web Apps untuk Kontainer dapat digunakan untuk menjalankan aplikasi dalam kontainer di Windows dan Linux. Dengan layanan ini, Anda dapat dengan mudah menyebarkan dan menjalankan aplikasi dalam kontainer yang dapat diskalakan dengan bisnis Anda. Aplikasi ini memiliki semua fitur App Service Web Apps yang tercantum di atas. Selain itu, Web Apps untuk Kontainer mendukung CI/CD yang disederhanakan dengan Docker Hub, Azure Container Registry, dan GitHub. Anda dapat menggunakan Azure DevOps untuk menentukan alur build dan penyebaran yang menerbitkan perubahan pada registri. Perubahan ini kemudian dapat diuji di staging environment dan secara otomatis disebarkan ke produksi menggunakan slot penyebaran, sehingga memungkinkan peningkatan waktu henti nol. Menggulung balik ke versi sebelumnya dapat dilakukan dengan mudah.

Ada beberapa skenario di mana Web Apps untuk Kontainer paling masuk akal. Jika Anda memiliki aplikasi yang sudah ada yang dapat Anda kontainerisasi, baik dalam kontainer Windows maupun Linux, Anda dapat menghostingnya dengan mudah menggunakan toolset ini. Cukup terbitkan kontainer Anda lalu konfigurasikan Web Apps untuk Kontainer untuk menarik versi terbaru gambar tersebut dari registri pilihan Anda. Ini adalah pendekatan "angkat dan geser" untuk bermigrasi dari model hosting aplikasi klasik ke model yang mengoptimalkan cloud.

Migrate containerized on-premises .NET application to Azure Web Apps for Containers

Pendekatan ini juga berfungsi dengan baik jika tim pengembangan Anda dapat pindah ke proses pengembangan berbasis kontainer. "Perulangan dalam" mengembangkan aplikasi dengan kontainer termasuk membangun aplikasi dengan kontainer. Perubahan yang dilakukan pada kode serta konfigurasi kontainer didorong ke kontrol sumber, dan build otomatis bertanggung jawab untuk menerbitkan citra kontainer baru ke registri seperti Docker Hub atau Azure Container Registry. Citra ini kemudian digunakan sebagai dasar untuk pengembangan tambahan, serta untuk penyebaran ke produksi, seperti yang ditunjukkan dalam diagram berikut:

End to End Docker DevOps Lifecycle Workflow

Mengembangkan dengan kontainer menawarkan banyak keuntungan, terutama ketika kontainer digunakan dalam produksi. Konfigurasi kontainer yang sama digunakan untuk menghosting aplikasi di setiap lingkungan tempat aplikasi berjalan, mulai dari komputer pengembangan lokal untuk membangun dan menguji sistem hingga produksi. Pendekatan ini sangat mengurangi kemungkinan kerusakan akibat perbedaan konfigurasi mesin atau versi perangkat lunak. Pengembang juga dapat menggunakan alat apa pun yang paling produktif, termasuk sistem operasi, karena kontainer dapat berjalan di OS apa pun. Dalam beberapa kasus, aplikasi terdistribusi yang melibatkan banyak kontainer mungkin sangat membutuhkan banyak sumber daya untuk dijalankan pada satu mesin pengembangan. Dalam skenario ini, mungkin masuk akal untuk meningkatkan ke penggunaan Kubernetes dan Azure Dev Spaces, yang tercakup di bagian berikutnya.

Karena bagian dari aplikasi dipecah menjadi layanan mikro independen yang lebih kecil, pola desain tambahan dapat digunakan untuk meningkatkan perilaku aplikasi. Alih-alih bekerja langsung menggunakan layanan individual, gateway API dapat menyederhanakan akses dan memisahkan klien dari ujung belakangnya. Memiliki ujung belakang layanan yang terpisah untuk ujung depan yang berbeda juga memungkinkan layanan untuk berkembang sejalan dengan konsumen mereka. Layanan umum dapat diakses melalui kontainer sidecar, yang mungkin menyertakan pustaka konektivitas klien umum menggunakan pola ambassador.

Microservices sample architecture with several common design patterns noted.

Pelajari lebih lanjut pola desain yang perlu dipertimbangkan saat membangun sistem berbasis layanan mikro.

Azure Kubernetes Service

Azure Kubernetes Service (AKS) mengelola lingkungan Kubernetes yang di-hosting sehingga mempercepat dan mempermudah penyebaran dan pengelolaan aplikasi dalam kontainer tanpa keahlian orkestrasi kontainer. AKS juga menghapus beban operasi dan pemeliharaan yang sedang berjalan dengan penyediaan, peningkatan, dan penskalaan sumber daya sesuai permintaan, tanpa membuat aplikasi offline.

AKS mengurangi kerumitan dan operasional yang berlebih dalam mengelola kluster Kubernetes dengan mengalihkan sebagian besar tanggung jawab tersebut ke Azure. Sebagai layanan Kubernetes yang dihosting, Azure menangani tugas-tugas penting, seperti pemantauan dan pemeliharaan kesehatan. Selain itu, Anda hanya perlu membayar node agen dalam kluster Anda, bukan untuk master. Sebagai layanan Kubernetes terkelola, AKS menyediakan:

  • Peningkatan dan patching versi Kubernetes otomatis.
  • Penskalaan kluster yang mudah.
  • Pemulihan mandiri menghosting sarana kontrol (master).
  • Penghematan biaya - bayar hanya untuk menjalankan node kumpulan agen.

Dengan Azure yang menangani pengelolaan node di kluster AKS, Anda tidak perlu lagi melakukan banyak tugas secara manual, seperti peningkatan kluster. Karena Azure menangani tugas pemeliharaan penting ini untuk Anda, AKS tidak menyediakan akses langsung (seperti dengan SSH) ke kluster.

Tim yang memanfaatkan AKS juga dapat memanfaatkan Azure Dev Spaces. Azure Dev Spaces membantu tim untuk fokus pada pengembangan dan perulangan cepat dari aplikasi layanan mikro mereka dengan memungkinkan tim untuk bekerja secara langsung dengan seluruh arsitektur layanan mikro atau aplikasi yang berjalan di AKS. Azure Dev Spaces juga menyediakan cara untuk memperbarui sebagian arsitektur layanan mikro Anda secara terpisah tanpa memengaruhi kluster AKS lainnya atau pengembang lain.

Azure Dev Spaces workflow example

Azure Dev Spaces:

  • Meminimalkan waktu penyiapan komputer lokal dan persyaratan sumber daya
  • Memungkinkan tim untuk melakukan perulangan dengan lebih cepat
  • Mengurangi jumlah lingkungan integrasi yang diperlukan oleh tim
  • Menghapus kebutuhan untuk meniru layanan tertentu dalam sistem terdistribusi saat mengembangkan/menguji

Pelajari lebih lanjut Azure Dev Spaces

Azure Virtual Machines

Jika Anda memiliki aplikasi yang sudah ada yang akan memerlukan modifikasi substansial untuk dijalankan di App Service, Anda dapat memilih Virtual Machines untuk menyederhanakan migrasi ke cloud. Namun, mengonfigurasi, mengamankan, dan memelihara VM dengan benar membutuhkan lebih banyak waktu dan keahlian IT dibandingkan dengan Azure App Service. Jika Anda mempertimbangkan Azure Virtual Machines, pastikan Anda mempertimbangkan upaya pemeliharaan berkelanjutan yang diperlukan untuk mem-patch, memperbarui, dan mengelola lingkungan VM Anda. Azure Virtual Machines adalah infrastruktur sebagai layanan (IaaS), sedangkan App Service adalah PaaS. Anda juga harus mempertimbangkan apakah menyebarkan aplikasi Anda sebagai Kontainer Windows ke Aplikasi Web untuk Kontainer dapat menjadi opsi yang layak untuk skenario Anda.

Proses logika

Proses logika individual yang dapat dipisahkan dari sisa aplikasi dapat disebarkan secara independen untuk Azure Functions dengan cara "tanpa server". Azure Functions memungkinkan Anda hanya menulis kode yang Anda butuhkan untuk masalah tertentu, tanpa mengkhawatirkan aplikasi atau infrastruktur untuk menjalankannya. Anda dapat memilih dari berbagai bahasa pemrogram, termasuk C#, F#, Node.js, Python, dan PHP, yang memungkinkan Anda memilih bahasa yang paling produktif untuk tugas yang ditangani. Seperti kebanyakan solusi berbasis cloud, Anda hanya membayar untuk jumlah waktu penggunaan, dan Anda dapat mempercayai Azure Functions untuk meningkatkan skala sesuai kebutuhan.

Data

Azure menawarkan berbagai opsi penyimpanan data, sehingga aplikasi Anda dapat menggunakan penyedia data yang sesuai untuk data yang dimaksud.

Untuk data transaksional dan relasional, Azure SQL Database adalah opsi terbaik. Untuk sebagian besar data baca berkinerja tinggi, cache Redis yang didukung oleh Azure SQL Database adalah solusi yang baik.

Data JSON yang tidak terstruktur dapat disimpan dengan berbagai cara, mulai dari kolom SQL Database hingga Blob atau Tabel di Azure Storage, hingga Azure Cosmos DB. Dari jumlah tersebut, Azure Cosmos DB menawarkan fungsionalitas kueri terbaik, dan merupakan opsi yang direkomendasikan untuk sejumlah besar dokumen berbasis JSON yang harus mendukung kueri.

Data berbasis perintah atau peristiwa sementara yang digunakan untuk mengatur perilaku aplikasi dapat menggunakan Antrean Azure Service Bus atau Azure Storage. Azure Service Bus menawarkan lebih banyak fleksibilitas dan merupakan layanan yang direkomendasikan untuk pesan non-trivial di dalam dan di antara aplikasi.

Rekomendasi arsitektur

Persyaratan aplikasi Anda harus menentukan arsitekturnya. Terdapat berbagai layanan Azure yang tersedia. Memilih yang tepat adalah keputusan penting. Microsoft menawarkan galeri arsitektur referensi untuk membantu mengidentifikasi arsitektur khusus yang dioptimalkan untuk skenario umum. Anda mungkin menemukan arsitektur referensi yang memetakan secara dekat dengan persyaratan aplikasi Anda, atau setidaknya menawarkan titik awal.

Gambar 11-1 menunjukkan contoh arsitektur referensi. Diagram ini menjelaskan pendekatan arsitektur yang direkomendasikan untuk situs web CMS Sitecore yang dioptimalkan untuk pemasaran.

Figure 11-1

Gambar 11-1. Arsitektur referensi situs web pemasaran Sitecore.

Referensi – Rekomendasi hosting Azure