Memilih opsi komputasi Azure untuk layanan mikro
Istilah komputasi mengacu pada model penginangan untuk sumber daya komputasi yang menjalankan aplikasi Anda. Untuk arsitektur layanan mikro, dua pendekatan sangat populer:
- Orkestrator layanan yang mengelola layanan yang berjalan pada node khusus (VM).
- Arsitektur serverless menggunakan fungsi sebagai layanan (FaaS).
Meskipun ini bukan satu-satunya opsi, keduanya merupakan pendekatan yang terbukti untuk membangun layanan mikro. Sebuah aplikasi mungkin mencakup kedua pendekatan.
Orkestrator layanan
Orkestrator menangani tugas yang terkait dengan penerapan dan pengelolaan kumpulan layanan. Tugas-tugas ini termasuk menempatkan layanan di node, memantau kesehatan layanan, memulai ulang layanan yang tidak sehat, menyeimbangkan lalu lintas jaringan di seluruh instans layanan, penemuan layanan, menskalakan jumlah instans layanan, dan menerapkan pembaruan konfigurasi. Orkestrator populer termasuk Kubernetes, Service Fabric, DC/OS, dan Docker Swarm.
Pada platform Azure, pertimbangkan opsi berikut:
Azure Kubernetes Service (AKS) adalah layanan Kubernetes terkelola. AKS menyediakan Kubernetes dan mengekspos titik akhir API Kubernetes, tetapi menghosting dan mengelola sarana kontrol Kubernetes, melakukan peningkatan otomatis, patching otomatis, penskalaan otomatis, dan tugas manajemen lainnya. Anda dapat menganggap AKS sebagai "Kubernetes API sebagai layanan."
Azure Container Apps adalah layanan terkelola yang dibangun di Kubernetes yang mengabstraksi kompleksitas orkestrasi kontainer dan tugas manajemen lainnya. Container Apps menyederhanakan penyebaran dan manajemen aplikasi kontainer dan layanan mikro di lingkungan tanpa server sambil menyediakan fitur Kubernetes.
Service Fabric adalah platform sistem terdistribusi untuk mengemas, meyebarkan, dan mengelola layanan mikro. Layanan mikro dapat diterapkan ke Service Fabric sebagai kontainer, sebagai biner yang dapat dijalankan, atau sebagai Layanan yang Dapat Diandalkan. Dengan menggunakan model pemrograman Layanan Andal, layanan dapat langsung menggunakan API pemrograman Service Fabric untuk meminta sistem, melaporkan kesehatan, menerima pemberitahuan tentang perubahan konfigurasi dan kode, serta menemukan layanan lainnya. Diferensiasi utama dengan Service Fabric adalah fokusnya yang kuat dalam membangun layanan stateful menggunakan Koleksi yang Dapat Diandalkan.
Opsi lain seperti Docker Enterprise Edition dapat berjalan di lingkungan IaaS di Azure. Anda dapat menemukan template penyebaran di Azure Marketplace.
Kontainer
Terkadang orang berbicara tentang kontainer dan layanan mikro seolah-olah mereka adalah hal yang sama. Meskipun itu tidak benar — Anda tidak memerlukan kontainer untuk membangun layanan mikro — kontainer memiliki beberapa manfaat yang sangat relevan dengan layanan mikro, seperti:
Portabilitas. Gambar kontainer adalah paket mandiri yang berjalan tanpa perlu menginstal pustaka atau dependensi lainnya. Paket tersebut membuatnya mudah untuk disebarkan. Kontainer dapat dimulai dan dihentikan dengan cepat, sehingga Anda dapat memutar instans baru untuk menangani lebih banyak beban atau untuk pulih dari kegagalan node.
Kepadatan. Kontainer lebih ringan dibandingkan dengan menjalankan mesin virtual, karena berbagi sumber daya OS. Kontainer tersebut memungkinkan Anda mengemas beberapa kontainer ke dalam satu node, yang sangat berguna ketika aplikasi terdiri dari banyak layanan kecil.
Isolasi sumber daya. Anda dapat membatasi jumlah memori dan CPU yang tersedia untuk sebuah kontainer, yang dapat membantu memastikan bahwa proses runaway tidak menghabiskan sumber daya host. Lihat Pola Bulkhead untuk informasi selengkapnya.
Serverless (Functions sebagai Layanan)
Dengan arsitektur serverless, Anda tidak mengelola VM atau infrastruktur jaringan virtual. Sebagai gantinya, Anda menyebarkan kode dan layanan hosting menangani penempatan kode tersebut ke VM dan menjalankannya. Pendekatan ini cenderung menyukai fungsi granular kecil yang dikoordinasikan menggunakan pemicu berbasis peristiwa. Misalnya, pesan yang ditempatkan ke antrean mungkin memicu fungsi yang membaca dari antrean dan memproses pesan.
Azure Functions adalah layanan komputasi serverless yang mendukung berbagai pemicu fungsi, termasuk permintaan HTTP, antrean Bus Layanan, dan peristiwa Event Hubs. Untuk daftar lengkapnya, lihat Konsep pemicu dan pengikatan Azure Functions. Selain itu, pertimbangkan Azure Event Grid, yang merupakan layanan perutean peristiwa terkelola di Azure.
Orkestrator atau serverless?
Berikut adalah beberapa faktor yang perlu dipertimbangkan saat memilih antara pendekatan orkestrator dan pendekatan serverless.
Pengelolaan Aplikasi tanpa server mudah dikelola, karena platform mengelola semua sumber daya komputasi untuk Anda. Sementara mengabstraksi beberapa aspek dalam mengelola dan mengonfigurasi kluster, orkestrator tidak sepenuhnya menyembunyikan VM yang mendasarinya. Dengan orkestrator, Anda perlu memikirkan masalah seperti penyeimbangan beban, penggunaan CPU dan memori, serta jaringan.
Fleksibilitas dan kontrol. Orkestrator memberi Anda banyak kontrol untuk mengonfigurasi dan mengelola layanan dan kluster Anda. Tradeoff adalah kompleksitas tambahan. Dengan arsitektur serverless, Anda melepaskan beberapa tingkat kontrol karena detail ini diabstraksikan.
Portabilitas. Semua orkestrator yang tercantum di sini (Kubernetes, DC/OS, Docker Swarm, dan Service Fabric) dapat berjalan di tempat atau di beberapa cloud publik.
Integrasi aplikasi. Mungkin sulit untuk membangun aplikasi yang kompleks menggunakan arsitektur serverless, karena kebutuhan untuk mengoordinasikan, menyebarkan, dan mengelola banyak fungsi independen kecil. Salah satu opsi di Azure adalah menggunakan Azure Logic Apps untuk mengoordinasikan kumpulan Azure Functions. Untuk contoh pendekatan ini, lihat Membuat fungsi yang terintegrasi dengan Azure Logic Apps.
Biaya. Dengan orkestrator, Anda membayar VM yang berjalan di kluster. Dengan aplikasi serverless, Anda hanya membayar untuk sumber daya komputasi aktual yang digunakan. Dalam kedua kasus tersebut, Anda perlu memperhitungkan biaya layanan tambahan apa pun, seperti penyimpanan, database, dan layanan olahpesan.
Skalabilitas. Azure Functions menskalakan secara otomatis untuk memenuhi permintaan, berdasarkan jumlah peristiwa yang masuk. Dengan orkestrator, Anda dapat menskalakan dengan meningkatkan jumlah instans layanan yang berjalan di kluster. Anda juga dapat menskalakan dengan menambahkan VM tambahan ke kluster.
Implementasi referensi kami terutama menggunakan Kubernetes, tetapi kami juga menggunakan Azure Functions untuk satu layanan, yaitu layanan Riwayat Pengiriman. Azure Functions cocok untuk layanan khusus ini, karena ini adalah beban kerja berbasis peristiwa. Dengan menggunakan pemicu Pusat Aktivitas untuk menjalankan fungsi tersebut, layanan membutuhkan kode dalam jumlah minimal. Selain itu, layanan Riwayat Pengiriman bukan bagian dari alur kerja utama, jadi menjalankannya di luar kluster Kubernetes tidak memengaruhi latensi menyeluruh dari operasi yang dimulai pengguna.