Saya punya masalah. Mari kita gunakan Layanan Mikro! Sekarang saya memiliki 13 masalah yang didistribusikan.
Membagi sistem Anda menjadi komponen yang dienkapsulasi, kohesif, dan dipisahkan adalah ide yang bagus. Ini memungkinkan Anda untuk mengatasi masalah yang berbeda secara terpisah. Tetapi Anda dapat melakukannya dengan sangat baik dalam penyebaran monolitik (lihat Fowler: Microservice Premium ). Bagaimanapun, inilah yang telah diajarkan OOP selama beberapa dekade! Jika Anda memutuskan untuk mengubah komponen Anda menjadi layanan microser, Anda tidak mendapatkan keunggulan arsitektur apa pun. Anda mendapatkan beberapa fleksibilitas mengenai pilihan teknologi dan mungkin skalabilitas (tetapi tidak harus!). Tetapi Anda dijamin beberapa sakit kepala yang berasal dari (a) sifat sistem yang terdistribusi, dan (b) komunikasi antar komponen. Memilih layanan microser berarti Anda memiliki masalah lain yang sangat mendesak sehingga Anda bersedia menggunakan layanan microser meskipun ada masalah ini.
Jika Anda tidak dapat merancang monolith yang terbagi menjadi beberapa komponen, Anda juga tidak dapat merancang sistem layanan-mikro. Dalam basis kode monolitik, rasa sakit akan cukup jelas. Idealnya, kode tidak akan dikompilasi jika rusak parah. Tetapi dengan layanan microser, setiap layanan dapat dikembangkan secara terpisah, mungkin bahkan dalam bahasa yang berbeda. Setiap masalah dalam interaksi komponen tidak akan terlihat sampai Anda mengintegrasikan komponen Anda, dan pada saat itu sudah terlambat untuk memperbaiki arsitektur secara keseluruhan.
Sumber bug nomor 1 adalah ketidakcocokan antarmuka. Mungkin ada kesalahan mencolok seperti parameter yang hilang, atau lebih banyak contoh halus seperti lupa untuk memeriksa kode kesalahan, atau lupa untuk memeriksa prasyarat sebelum memanggil metode. Pengetikan statis mendeteksi masalah seperti sedini mungkin: di IDE Anda dan di kompiler, sebelum kode pernah berjalan. Sistem dinamis tidak memiliki kemewahan ini. Itu tidak akan meledak sampai kode yang salah dijalankan.
Implikasinya bagi layanan mikro menakutkan. Layanan Microsoft secara inheren dinamis. Kecuali jika Anda pindah ke bahasa deskripsi layanan formal, Anda tidak dapat memverifikasi segala jenis kebenaran penggunaan antarmuka Anda. Anda harus menguji, menguji, menguji! Tetapi tes mahal dan biasanya tidak lengkap, yang meninggalkan kemungkinan bahwa masalah mungkin masih ada dalam produksi. Kapan masalah itu akan terlihat? Hanya ketika jalur yang salah itu diambil, pada saat dijalankan, dalam produksi. Gagasan bahwa masalah prod akan mengarah pada umpan balik yang lebih cepat adalahmeriah salah berbahaya, kecuali jika Anda terhibur dengan kemungkinan kehilangan data.