Saya memulai proyek baru di tempat kerja, dan kemungkinan akan menjadi satu-satunya pengembang di proyek ini, meskipun satu atau dua pengembang lain perlu mengintegrasikan aplikasi yang ada atau skrip sederhana ke dalam proyek utama. Proyek ini perlu menangani curah kecil dan streaming data yang dicerna / diproses, dan juga eksekusi kode berdasarkan kejadian dan sesuai permintaan. Beberapa bagian dari kerangka kerja akan sangat terikat CPU, dan beberapa bagian bisa sangat terikat I / O; sebagian besar data harus hidup pada satu mesin, tetapi kami dapat membuat cluster dan menghubungkan VM untuk meningkatkan daya komputasi yang tersedia. Mungkin akan ada satu atau lebih aplikasi web kecil yang bergantung pada layanan asalkan kerangka inti ini. Bahasa utama adalah Python untuk hampir semua hal.
Pertanyaan saya adalah apakah saya harus mengambil pendekatan layanan mikro untuk upaya seperti ini atau tetap dengan aplikasi monolitik, mengingat bahwa saya akan melakukan sebagian besar pengembangan sendiri. Pemikiran saya adalah bahwa layanan-layanan microser (menggunakan Nameko) memberikan pemisahan alami antara elemen-elemen kerangka kerja yang memiliki model pelaksanaan yang berbeda (jalur pipa data, acara-diluncurkan, sesuai permintaan, aplikasi web, dll.) Dan cara yang jelas untuk mendistribusikan beban kerja dan komunikasi di berbagai proses. Kekhawatiran saya adalah bahwa saya mungkin akan berakhir dengan kluster Kubernetes untuk dikelola (Saya akrab dengan Docker, tetapi masih cukup baru untuk Kubernetes), beberapa layanan (rabbitmq, redis, dll.) Diperlukan hanya untuk memfasilitasi menjalankan sistem, dan berpotensi banyak potongan kode kecil untuk benar-benar menerapkan semua kemampuan yang diperlukan yang kami
Untuk proyek dengan sedikit lebih dari satu pengembang, apakah layanan Microsoft masih menyederhanakan pengembangan dan pemeliharaan sistem yang rumit seperti ini? Apakah ada metode / sistem / kerangka kerja yang harus saya pertimbangkan untuk digunakan, atau untuk mengurangi overhead yang terlibat dalam merancang sistem dengan cara ini?
Jawaban:
Layanan microser umumnya tidak diinginkan karena mereka mengubah perangkat lunak Anda menjadi sistem terdistribusi - dan sistem terdistribusi membuat semuanya jauh lebih sulit. Tetapi arsitektur berorientasi layanan memiliki beberapa manfaat penting:
Karena Anda akan menjadi pengembang tunggal, Anda tidak perlu fleksibilitas untuk mengembangkan layanan secara mandiri.
Tetapi Anda perhatikan bahwa beberapa bagian mungkin terikat CPU. Jadi mungkin diinginkan untuk skala mereka secara mandiri dari sisa aplikasi. Jika itu masalahnya, itu tidak berarti bahwa Anda harus mengubah seluruh proyek menjadi arsitektur-layanan-mikro. Anda hanya perlu memindahkan bagian yang intensif-CPU ke layanannya sendiri, dan dapat menyimpan sisanya dalam monolit yang nyaman. Sejalan dengan itu sistem harus dipisah sulit untuk diketahui, tetapi secara umum gagasan DDD tentang "konteks terbatas" adalah pedoman yang baik.
Perhatikan bahwa monolit tidak buruk. Monolith tidak setara dengan proyek besar yang tidak dapat dipelihara yang berantakan. Di mana Anda dapat membagi sistem menjadi layanan microser yang berbeda, Anda juga dapat membagi sistem menjadi komponen yang berbeda dalam satu monolit. Pemisahan antara komponen-komponen ini hanya lebih terlihat dan lebih jelas ditegakkan dalam arsitektur berorientasi layanan. Ini juga berarti bahwa untuk sistem yang dirancang dengan baik, seharusnya cukup mudah untuk mengubah komponen menjadi layanan di beberapa titik kemudian. Jadi Anda tidak harus memutuskan sekarang, Anda dapat pindah ke layanan microser jika dan ketika monolith telah membuktikan dirinya tidak cocok.
Pertimbangkan juga konsep Martin Fowler tentang Microservice Premium (2015): microservices memperkenalkan kompleksitas substansial mereka sendiri, di samping kompleksitas dasar sistem Anda. Anda harus membayar "premi" ini dalam hal pengurangan produktivitas. Ini berarti bahwa untuk proyek sederhana, layanan microser membuat Anda kurang produktif. Ini berubah untuk proyek yang lebih kompleks: sedangkan solusi monolitik mungkin menjadi semakin sulit untuk dikerjakan, arsitektur layanan mikro berskala jauh lebih baik dan membutuhkan usaha yang konstan. Anda harus tahu apakah upaya awal ekstra dari layanan microser layak dilakukan karena sistem perangkat lunak Anda. Karena Anda menanyakan pertanyaan ini, jawabannya mungkin "tidak". Fowler melanjutkan:
sumber