Apa yang dimaksud dengan layanan mikro?
- 7 menit
Cloud mendorong pengembangan aplikasi saat ini dan manajemen sistem TI. Aplikasi cloud modern harus cepat, tangkas, dapat diskalakan secara besar-besaran, dan dapat diandalkan.
Menggunakan kontainer dapat membantu Anda menyebarkan aplikasi yang memenuhi semua persyaratan tersebut. Tetapi memasukkan aplikasi ke dalam kontainer tanpa mengikuti pola desain strategis seperti masuk ke kendaraan dan berharap menemukan jalan Anda ke kota baru tanpa menggunakan peta atau GPS. Anda mungkin berakhir di tujuan Anda, tetapi rute mungkin tidak akan langsung atau yang paling efisien.
Arsitektur layanan mikro berguna dalam skenario ini. Layanan mikro memberi Anda pendekatan untuk pengembangan dan penyebaran perangkat lunak yang sangat cocok untuk persyaratan kelincahan, skalabilitas, dan keandalan aplikasi cloud modern.
Apa itu arsitektur layanan mikro?
Dalam arsitektur layanan mikro, aplikasi besar dibagi menjadi satu set layanan yang lebih kecil. Setiap layanan berjalan dalam prosesnya sendiri dan berkomunikasi dengan proses lain dengan menggunakan protokol seperti HTTP/HTTPS, WebSocket, atau Advanced Message Queuing Protocol (AMQP). Setiap layanan mikro mengimplementasikan domain atau kemampuan bisnis end-to-end tertentu dalam batas konteks tertentu. Setiap layanan mikro harus dikembangkan secara otonom dan harus dapat disebarkan secara independen. Akhirnya, setiap layanan mikro harus memiliki model data domain terkait dan logika domain. Layanan mikro dapat didasarkan pada teknologi penyimpanan data yang berbeda (SQL, NoSQL) dan bahasa pemrograman yang berbeda.
Berikut adalah beberapa karakteristik utama layanan mikro:
- Mereka kecil, independen, dan digabungkan secara longgar.
- Setiap layanan mikro memiliki basis kode terpisah yang dapat dikelola oleh tim pengembangan kecil.
- Mereka disebarkan secara independen. Tim dapat memperbarui layanan yang ada tanpa mem-build kembali dan menyebarkan kembali seluruh aplikasi.
- Mereka mempertahankan data mereka atau status eksternal di database masing-masing. Tidak seperti dalam arsitektur monolitik, layanan mikro tidak berbagi database.
- Mereka berkomunikasi satu sama lain dengan menggunakan API yang terdefinisi dengan baik. Detail implementasi internal dari setiap layanan disembunyikan dari layanan lain.
- Mereka mendukung pemrograman poliglot . Misalnya, layanan mikro yang membentuk aplikasi web tidak perlu berbagi tumpukan teknologi, pustaka, atau kerangka kerja yang sama.
Mengapa mengembangkan dengan menggunakan arsitektur layanan mikro?
Layanan mikro biasanya merangkum fungsionalitas kebutuhan pelanggan yang lebih sederhana, yang dapat Anda skalakan atau skalakan. Anda dapat menguji, menyebarkan, dan mengelolanya secara independen. Manfaat penting dari pendekatan layanan mikro adalah bahwa tim didorong lebih banyak oleh skenario pelanggan daripada dengan menggunakan teknologi tertentu. Setiap tim pengembangan kecil mengembangkan layanan mikro berdasarkan skenario pelanggan. Tim memilih teknologi yang digunakannya.
Layanan mikro memberikan kelincahan jangka panjang. Layanan mikro mendukung ketahanan dalam sistem yang kompleks, besar, dan sangat dapat diskalakan dengan memungkinkan Anda membuat aplikasi berdasarkan banyak layanan yang dapat disebarkan secara independen yang masing-masing memiliki siklus hidup granular dan otonom.
Sebagai manfaat lain, layanan mikro dapat menskalakan secara independen. Alih-alih memiliki satu aplikasi monolitik yang harus Anda skalakan sebagai unit, Anda dapat meluaskan skala layanan mikro tertentu. Anda hanya dapat menskalakan area fungsi yang membutuhkan lebih banyak daya pemrosesan atau bandwidth jaringan untuk mendukung permintaan alih-alih menskalakan area lain dari aplikasi yang tidak perlu diskalakan. Artinya biaya yang Anda keluarkan lebih hemat karena perangkat keras yang dibutuhkan lebih sedikit.
Pendekatan layanan mikro memungkinkan perubahan yang gesit dan iterasi yang cepat dari setiap layanan mikro karena Anda dapat mengubah area spesifik, kecil aplikasi yang kompleks, besar, dan dapat diskalakan.
Merancang aplikasi berbasis layanan mikro terperinci memungkinkan integrasi berkelanjutan dan praktik pengiriman berkelanjutan. Ini juga mempercepat pengiriman fungsi baru ke dalam aplikasi. Anda dapat menjalankan dan menguji layanan mikro dalam isolasi dan mengembangkannya secara otonom, sambil mempertahankan kontrak yang jelas antar layanan. Selama Anda tidak mengubah antarmuka atau kontrak, Anda dapat mengubah implementasi internal layanan mikro apa pun atau menambahkan fungsionalitas baru tanpa merusak layanan mikro lainnya.
Peran apa yang dilakukan kontainer?
Kontainerisasi adalah pendekatan untuk pengembangan perangkat lunak di mana aplikasi atau layanan, dependensinya, dan konfigurasinya (diabstraksi sebagai file manifes penyebaran) dikemas bersama-sama sebagai gambar kontainer. Anda dapat menguji aplikasi dalam kontainer sebagai unit, dan menyebarkannya sebagai instans gambar kontainer pada sistem operasi host.
Kontainer perangkat lunak bertindak sebagai unit standar penyebaran perangkat lunak yang dapat berisi kode dan dependensi yang berbeda. Ini mirip dengan cara pengiriman kontainer mengangkut barang dari segala jenis dengan kapal, kereta api, atau truk. Pengembang dan profesional TI dapat menggunakan perangkat lunak kontainer untuk menyebarkan kode dan dependensi di seluruh lingkungan dengan sedikit atau tanpa modifikasi.
Jika terdengar seperti kontainerisasi aplikasi mungkin merupakan cara yang bagus untuk mengimplementasikan pola arsitektur layanan mikro, itu adalah. Manfaat menggunakan kontainer berbaris hampir persis dengan manfaat menggunakan arsitektur layanan mikro.
Catatan
Kontainerisasi aplikasi bukan satu-satunya cara untuk menyebarkan layanan mikro. Anda dapat menyebarkan layanan mikro sebagai layanan individual di Azure App Service, di komputer virtual, atau dalam sejumlah cara. Kontainer adalah alat penyebaran yang akan kami gunakan untuk layanan mikro kami untuk sisa modul ini.
Manfaat lain dari kontainerisasi adalah skalabilitas. Anda dapat meluaskan skala dengan cepat dengan membuat kontainer baru untuk digunakan untuk tugas jangka pendek. Dari sudut pandang aplikasi, membuat instans gambar (membuat kontainer) mirip dengan membuat instans proses seperti layanan atau aplikasi web.
Singkatnya, kontainer menawarkan manfaat isolasi, portabilitas, kelincahan, skalabilitas, dan kontrol pada seluruh alur kerja siklus hidup aplikasi.
Layanan mikro yang Anda bangun dalam modul ini akan berjalan dalam kontainer Docker, yang diterbitkan menggunakan .NET CLI.
Penerbitan kontainer .NET SDK
Di .NET 7, .NET SDK mendapatkan kemampuan untuk membuat gambar kontainer melalui dotnet publish perintah . Alat-alat melakukan banyak inferensi berdasarkan properti proyek Anda dan outputnya. .NET kemudian membuat gambar yang sama dengan yang akan dibuat Dockerfile. Dibutuhkan beberapa perintah untuk membuat aplikasi baru dan menerbitkannya sebagai gambar:
dotnet new webapi
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release
Perintah .NET CLI sebelumnya membuat API web baru dan menerbitkan aplikasi sebagai kontainer:
- Menargetkan Linux sebagai OS (--os linux).
- Menentukan arsitektur x64 (--arch x64).
- Menggunakan konfigurasi rilis (-c Rilis).
Anda dapat mengontrol banyak aspek kontainer yang dihasilkan melalui properti MSBuild. Secara umum, jika Anda dapat menggunakan perintah di Dockerfile
Mengapa mem-build layanan mikro di .NET?
Dimulai dengan .NET Core dan melanjutkan ke iterasi saat ini, .NET dibangun untuk menjadi cloud-native terlebih dahulu. Ini berjalan lintas platform, sehingga gambar Docker Anda dapat didasarkan pada rasa Linux, dan kode .NET Anda masih berjalan. Microsoft telah membuat gambar .NET untuk Docker. Selain itu, .NET sangat cepat. Server web ASP.NET Kestrel secara rutin mengungguli server web lainnya.
Docker
Docker adalah platform sumber terbuka yang dapat Anda gunakan untuk mengotomatiskan penyebaran aplikasi sebagai kontainer portabel dan mandiri yang dapat berjalan di cloud atau lokal. Docker juga merupakan perusahaan yang mempromosikan dan mengembangkan teknologi ini. Docker sebagai organisasi bekerja sama dengan vendor cloud, Linux, dan Windows, termasuk Microsoft.
Kontainer Docker dapat berjalan di mana saja: lokal di pusat data pelanggan, di penyedia layanan eksternal, atau di cloud. Kontainer gambar Docker dapat berjalan secara native di Linux dan Windows.
Apa itu citra?
Saat pengembang menggunakan Docker, pengembang membuat aplikasi atau layanan. Kemudian mereka mengemas aplikasi atau layanan dan dependensinya dalam gambar kontainer. Citra adalah representasi statis dari aplikasi atau layanan serta konfigurasi dan dependensinya.
Gambar, ketika berjalan, menjadi kontainer. Kontainer adalah contoh dalam memori gambar.
Gambar kontainer tidak dapat diubah. Setelah Anda membuat gambar, gambar tidak dapat diubah. Karena Anda tidak dapat mengubah gambar, jika Anda perlu membuat perubahan pada aplikasi atau layanan dan dependensinya, buat gambar baru. Fitur ini menjamin bahwa gambar yang Anda gunakan dalam produksi adalah gambar yang sama yang digunakan dalam pengembangan dan pengujian.
Apa itu Dockerfile?
Dockerfile adalah file teks yang berisi instruksi tentang cara membuat gambar Docker. Dockerfiles ditulis dalam bahasa skrip minimal yang dirancang untuk membangun dan mengonfigurasi gambar. Dockerfiles juga mendokumenkan operasi yang diperlukan untuk membangun gambar, dimulai dengan gambar dasar.
Untuk membuat gambar Docker yang berisi aplikasi, Anda biasanya mulai dengan mengidentifikasi gambar dasar. Kemudian Anda menambahkan lebih banyak file dan konfigurasi ke gambar dasar. Proses mengidentifikasi gambar dasar yang sesuai biasanya dimulai dengan pencarian di Docker Hub. Anda mencari gambar siap pakai yang sudah berisi kerangka kerja aplikasi dan semua utilitas dan alat distribusi Linux seperti Ubuntu atau Alpine. Misalnya, jika Anda memiliki aplikasi ASP.NET yang ingin Anda kemas ke dalam kontainer, Microsoft menerbitkan gambar yang disebut mcr.microsoft.com/dotnet/aspnet yang sudah berisi runtime ASP.NET.
Anda dapat menyesuaikan gambar dengan memulai kontainer dengan gambar dasar, lalu membuat perubahan pada gambar tersebut. Perubahan biasanya melibatkan aktivitas seperti menyalin file ke dalam kontainer dari sistem file lokal dan menjalankan berbagai alat dan utilitas untuk mengkompilasi kode.
Dockerfile adalah serangkaian instruksi yang membuat gambar Docker yang memiliki perangkat lunak yang tepat yang Anda butuhkan di dalamnya untuk menjalankan aplikasi Anda, termasuk aplikasi itu sendiri.