Dalam hal arsitektur dan desain perangkat lunak, bagaimana layanan microser "menumpuk" (pun intended) terhadap middleware? Saya datang dari Jawa, dan sepertinya saat Anda beralih dari REST langsung sebagai API, dan memisahkan lapisan dan parameter koneksi yang berbeda, setidaknya di Jawa, Anda hampir kembali ke beberapa ide sekolah yang sangat kuno. . Kami telah kembali ke virtualisasi ... sementara JVM sudah virtual.
Dengan cara agnostik, Anda bisa, dan saya akan berdebat tentang kelebihannya, mengabstraksi API yang tenang untuk CORBA. Atau, dengan cara yang lebih java-sentris, JMS atau MDB.
Pada suatu waktu EJB adalah masalah besar di Jawa, maka itu diakui sebagai sedikit efek cluster, tetapi, sekarang, apakah kita kembali ke awal?
Atau, apakah layanan microser menawarkan sesuatu yang kurang dimiliki CORBA, atau bahkan lebih baik, MDB? Ketika saya membaca (TLDR) Martin Fowler menjelaskan microservices, itu menurut saya solusi yang baik untuk masalah buruk, jika Anda mau. Atau lebih tepatnya, pendekatan tertutup yang memperkenalkan tingkat kompleksitas hanya mendorong masalah di sekitar. Jika layanan benar-benar mikro, dan banyak, maka masing-masing memiliki biaya dolar untuk menjalankan dan memeliharanya.
Selain itu, jika satu layanan mikro di antara banyak perubahan API-nya, maka semuanya tergantung pada layanan itu rusak. Ini tidak tampak longgar digabungkan, itu tampaknya kebalikan dari tangkas. Atau apakah saya menyalahgunakan kata-kata itu?
Tentu saja, ada sejumlah pilihan yang tidak pasti di antara yang ekstrem ini.
Hiu versus Gorila ... pergi! (Untuk yang bertele-tele, itu berarti ironis, dan sama sekali bukan maksud saya. Pertanyaan itu dimaksudkan untuk diambil pada nilai nominal. Jika pertanyaan dapat diperbaiki, silakan lakukan, atau komentar dan saya akan memperbaikinya. )
Membayangkan banyak layanan microser berjalan di buruh pelabuhan, semuanya dalam satu mesin, saling berbicara ... kegilaan. Sulit untuk mempertahankan atau admin, dan hampir tidak mungkin untuk mengubah apa pun karena perubahan apa pun akan mengalir dan menyebabkan kesalahan yang tidak terduga. Bagaimana bisa lebih baik bahwa layanan ini tersebar di berbagai mesin? Dan, jika mereka didistribusikan, maka pasti beberapa teknik sekolah yang sangat, sangat tua telah menyelesaikan, setidaknya sampai taraf tertentu, komputasi terdistribusi.
Mengapa penskalaan horizontal begitu lazim, atau setidaknya diinginkan?
giant blob
, itu harus memiliki antarmuka, sehingga setiap bagian mulai dari kernel adalah semacam MS, dan hal pertama sebelum tim mana pun mulai menulis kode untuk menyetujui spesifikasi v0.0.1.Jawaban:
TL; DR. Saya senang minum banyak Microserver rasa Kool-Aid, jadi saya bisa berbicara sedikit tentang alasan di belakang mereka.
Pro:
Cons:
Saya pikir Anda salah paham secara mendasar bagaimana seharusnya arsitektur microservice berfungsi. Cara seharusnya dijalankan adalah bahwa setiap layanan Microsoft (disebut dari sini sebagai MS) memiliki API kaku yang disetujui oleh semua kliennya. MS diizinkan untuk membuat perubahan apa pun yang diinginkan selama API dipertahankan. MS dapat dibuang dan ditulis ulang dari awal, selama API dipertahankan.
Untuk membantu dalam kopling longgar, setiap MS tergantung pada versi n-1 dependensinya. Ini memungkinkan versi layanan saat ini menjadi kurang stabil dan sedikit lebih berisiko. Itu juga memungkinkan versi untuk keluar dalam gelombang. Pertama 1 server ditingkatkan, lalu setengah, dan akhirnya sisanya. Jika versi saat ini pernah mengembangkan masalah serius, MS dapat dikembalikan ke versi sebelumnya tanpa kehilangan fungsionalitas di lapisan lain.
Jika API perlu diubah, itu harus diubah dengan cara yang kompatibel ke belakang.
sumber
Setiap teknik pengembangan perangkat lunak yang pernah kami temukan adalah tentang mengelola kompleksitas, entah bagaimana. Sebagian besar dari mereka telah dan terus tentang abstraksi, enkapsulasi dan kopling longgar. Layanan mikro adalah cara lain untuk melakukan hal-hal itu, yang mungkin mengapa hal itu menyerupai banyak teknik lama pada tingkat teoretis yang tinggi, tetapi itu tidak membuatnya kurang berguna atau relevan.
Mengenai kopling longgar, saya pikir Anda telah sedikit salah memahami tujuan. Jika tugas A perlu memanggil tugas B, tidak akan pernah ada cara untuk membuat A dan B 100% dipisahkan. Tidak akan pernah terjadi. Apa yang dapat Anda lakukan adalah memastikan bahwa, jika tugas B memanggil tugas C, maka tugas C seharusnya tidak perlu khawatir tentang perubahan ke A. Jika ketiga tugas ini semuanya dihubungkan bersama dalam satu gumpalan besar, meneruskan struct satu sama lain, maka ada peluang besar mereka semua harus berubah jika salah satunya melakukannya Tetapi jika ketiganya adalah layanan microser, maka pada dasarnya Anda dijamin bahwa perubahan ke A hanya akan memaksa B untuk memperbarui (kecuali jika itu adalah perubahan besar pada fungsionalitas inti A sehingga Anda mungkin harus menjadikannya layanan baru). Ini terutama benar jika semua pembaruan microservice dilakukan dengan cara yang kompatibel mundur, yang seharusnya.
Mengenai komentar lincah, saya dapat memberi tahu Anda dari pengalaman pribadi bahwa kode microservice-y kami bermain jauh lebih baik dengan gesit daripada kode "tertaut ke gumpalan besar" kami. Dalam yang terakhir, setiap kali seseorang memperbaiki bug dalam fungsi tingkat rendah, ia benar-benar harus mengirim seluruh departemen R&D e-mail yang mengatakan "tolong tinjau kembali tugas Anda atau mereka semua akan crash pada hari Jumat". Kami mendapatkan beberapa dari ini setiap minggu . Jika kodenya ada dalam layanan mikro, kita semua akan secara otomatis mendapat manfaat dari perbaikan segera setelah ia menggunakan versi baru.
Saya tidak sepenuhnya memahami komentar tentang COBRA dan MDB, karena mereka tampaknya bukan arsitektur perangkat lunak melainkan komponen satu; Menurut pemahaman saya, itu adalah cara potensial untuk mendefinisikan protokol pengiriman layanan mikro Anda dan / atau mengimplementasikan layanan-layanan microser tersebut, bukan dalam dan dari diri mereka sendiri alternatif-alternatif untuk layanan-mikro.
sumber
Karena awan.
Belum tertawa? Serius meskipun - untuk banyak bisnis, biaya terbesar untuk perangkat lunak bukan perangkat lunak lagi. Bandwidth, perangkat keras, biaya CDN, dll. Sekarang setiap orang memiliki perangkat seluler, hanya ada lebih banyak lalu lintas. Dan itu hanya akan menjadi lebih buruk karena pemanggang roti Anda mendapatkan konektivitas internet sendiri.
Jadi bisnis mencari untuk mengelola biaya-biaya tersebut. Secara khusus, mereka berusaha menangani masalah bisnis "jika hal ini meledak, bagaimana saya bisa melayani jutaan orang yang mendapatkan / menggunakan perangkat lunak saya - tanpa membayar terlebih dahulu bagi server untuk melayani jutaan orang yang mendapatkan / menggunakan perangkat lunak saya ? "
Karena itu menjawab masalah bisnis ini (besar dan terus meningkat).
Ketika Anda memiliki selusin pengguna, Anda dapat melemparkan semua layanan pada satu kotak. Ini bagus, karena Anda hanya ingin membayar satu kotak. Dan Anda juga tidak ingin membayar perubahan pada aplikasi untuk membagi berbagai layanan saat bisnis Anda berkembang. Saat ini, Anda tidak punya waktu untuk melakukan itu sebelum gerombolan pelanggan menyalakan server Anda.
Ini juga bagus karena memungkinkan Anda menyulap alokasi server sehingga Anda dapat:
Memiliki penyebaran yang sangat terperinci membuat kedua hal ini lebih mudah / lebih baik (selain membantu menegakkan pemisahan keprihatinan yang lebih baik).
sumber