Salah satu argumen umum untuk menggunakan layanan microser adalah skalabilitas yang lebih baik. Tetapi saya bertanya-tanya apakah argumen ini benar-benar valid.
Katakanlah kami memiliki aplikasi yang terdiri dari 10 microservice dengan 9 di antaranya memiliki masing-masing dua instance (untuk redundansi) dan satu di antaranya dengan 4 instance untuk menangani beban (skalabilitas). Argumen pro-microservice adalah bahwa Anda dapat mengukur miroservice ini secara independen dari layanan lain.
Namun, katakanlah semua 10 layanan mikro adalah modul dalam satu monolith dan beberapa (mis. 22 seperti jumlah dari atas) contoh monolith ini digunakan. Sistem harus dapat menangani beban untuk satu bagian kritis, karena ada cukup banyak contoh untuk melakukannya. Jika instance mengandung logika program tidak diperlukan, satu-satunya downside adalah, bahwa biner dan jumlah RAM yang dibutuhkan akan sedikit lebih besar. Tetapi sekali lagi, perbedaannya tidak boleh terlalu besar dalam banyak kasus - setidaknya tidak dibandingkan dengan sisa tumpukan (pikirkan Spring Boot). Kelebihan dari skala monlith akan menjadi sistem yang lebih sederhana tanpa (sebagian besar) kekeliruan dari sistem terdistribusi.
Apakah saya melewatkan sesuatu?
sumber
Jawaban:
Tujuan dari layanan microsoft adalah bukan untuk mengurangi beban prosesor. Bahkan, karena overhead komunikasi dan pengulangan fungsi yang digunakan menjadi kode utilitas global, biasanya meningkatkan beban prosesor.
Titik penghapusan monolith jauh lebih banyak untuk dapat mempertahankan, menyebarkan dan menjalankan sistem fungsionalitas yang kompleks sama sekali . Setelah sistem Anda mencapai ukuran tertentu, mengkompilasi, menguji, menyebarkan, dll. Monolith menjadi terlalu mahal untuk dapat dipertahankan sambil mempertahankan waktu kerja yang layak. Dengan layanan microser, Anda dapat memutakhirkan, memulai kembali, atau memutar kembali sedikit demi sedikit sistem.
Jangan salah, kami tidak menulis layanan microser karena itu secara inheren solusi yang lebih baik untuk pasangan hal secara longgar melalui antarmuka jarak jauh. Faktanya, hilangnya tipe yang kuat dan konsistensi yang mengecek yang dapat diberikan monolith seringkali merupakan kelemahan utama. Kami melakukannya karena kami harus melakukannya karena kompleksitas telah membuat kami lebih baik, dan memanfaatkan yang terbaik dari situasi yang tidak optimal.
sumber
Anda sebagian besar benar. Jika Anda memiliki layanan cepat yang dimuat secara sama, Anda mungkin harus menginstal semuanya pada semua kotak. Ini tidak sebagus memiliki kotak per layanan, tetapi menghemat uang.
Namun. segera setelah Anda memiliki ketidakseimbangan, katakanlah layanan 5 mengambil 100% dari CPU selama 2 menit, Anda ingin memindahkan layanan itu ke kotaknya sendiri sehingga tidak memblokir semua layanan lain jika dijalankan.
Jika panggilan ke layanan 5 waktu habis karena memuat, hanya beberapa fungsi aplikasi Anda yang akan gagal, bukan semua.
Sekarang Anda bisa melakukan hal yang sama dengan monolith yang termodulasi dengan baik. Instal semua layanan, tetapi hanya layanan rute 5 lalu lintas ke salah satunya. Meskipun tidak merutekan layanan 5 lalu lintas ke kotak lain.
Tetapi biasanya monolit pada dasarnya bukan kumpulan layanan yang longgar yang dipasang pada kotak yang sama. Akan ada panggilan memori di antara modul yang akan menyebabkan kegagalan aplikasi.
sumber
Titik layanan mikro adalah 1) pemisahan kekhawatiran dan 2) mendistribusikan beban. Pada dasarnya ini membebaskan kita untuk membuat layanan kotak hitam terbaik yang kita bisa dengan teknologi spesifik untuk tugas itu. Layanan kami dapat berupa polyglot - yang ditulis dalam berbagai bahasa pemrograman pada tumpukan berbeda. Tim yang berbeda dapat bekerja pada setiap layanan tanpa pengetahuan tentang bagaimana yang lain bekerja di luar kontrak api mereka. Ini, secara keseluruhan, memungkinkan basis kode yang lebih sederhana untuk setiap layanan yang lebih mudah untuk di-debug, dipahami, dan disesuaikan untuk kinerja.
sumber