Saya berada di awal proyek yang melibatkan pembacaan dari beberapa sensor dan menggabungkan data dari sensor tersebut bersama-sama. Secara keseluruhan akan ada 4 sensor yang terhubung melalui USB dan webcam, juga terhubung melalui USB.
Salah satu kolega saya sangat vokal tentang betapa menyenangkannya membagi program menjadi bagian-bagian yang lebih kecil dan membuat mereka berkomunikasi melalui jaringan. Dia menyarankan bahwa kita harus memiliki executable untuk setiap sensor (atau kamera) dan kemudian aplikasi pengendali pusat yang berkomunikasi dengan yang lain.
Secara intuitif saya tidak menyukai ide ini. Kolega yang bersangkutan bekerja pada proyek lain yang menggunakan pendekatan itu dan tidak memiliki masalah yang sulit dilacak dan debug.
Itu tidak tampak seperti desain yang sangat canggih dan menganggap saya agak tidak sopan. Saya ingin menulis perpustakaan untuk berurusan dengan masing-masing sensor dan mungkin menjalankannya di utas terpisah.
Juga harus ditunjukkan bahwa perhitungan yang perlu kita lakukan akan memberikan pembaruan ke sistem lain di hampir 1000Hz. Menambahkan lapisan komunikasi jaringan sepertinya menambah hambatan potensial.
Saya tertarik mendengar pendapat orang lain tentang hal ini dan mungkin beberapa referensi mengenai jenis praktik ini.
Jawaban:
Yah, secara intuitif, saya suka gagasan membagi program menjadi bagian-bagian yang lebih kecil. Tetapi jika proses yang berbeda berjalan selalu semua pada mesin yang sama, komunikasi jaringan mungkin bukan bentuk optimal dari IPC. Untuk komunikasi kecepatan tinggi antar proses, memori bersama mungkin merupakan opsi yang lebih baik. Tetapi pendekatan apa pun yang Anda pilih, Anda harus mengukur atau setidaknya memperkirakan kinerja sebelum membuat penilaian apa pun.
Anda harus memeriksa masalah seperti apa, dan di mana akar masalahnya. Jika mereka memiliki masalah karena konkurensi, Anda akan menghadapi masalah yang sama (jika tidak lebih) ketika Anda mencoba solusi multi-threaded.
Jika itu "kecepatan tinggi", tergantung pada kecepatan mesin produksi, dan ukuran operasi yang terlibat dalam setiap pembaruan. Ketika datang ke kinerja, firasat sangat tidak dapat diandalkan, Anda perlu mengukur hal-hal . Jika kolega Anda yakin pendekatannya akan cukup cepat, dan Anda yakin itu tidak akan terjadi, setidaknya salah satu dari Anda harus membuktikan atau memalsukan keyakinannya. Sebagai contoh, salah satu dari Anda dapat mengimplementasikan prototipe kecil untuk mensimulasikan komunikasi antarproses, dan mengukur kecepatan. Yang lainnya melihat ke dalam mangkuk kaca.
sumber
Mereka mungkin atau mungkin tidak relevan dengan aplikasi Anda, tetapi beberapa manfaat untuk solusi multi-proses yang tampaknya belum Anda pertimbangkan adalah:
Kelemahan tambahan untuk solusi multi-proses:
sumber
Pendekatan yang dianjurkan oleh rekan kerja Anda sering disebut sebagai arsitektur layanan mikro dan cukup populer saat ini. Ini memiliki sejumlah keunggulan potensial :
Ini juga memiliki sejumlah kelemahan:
Saya tidak yakin apa yang Anda maksud ketika Anda mengatakan desain "sepertinya bukan desain yang sangat canggih". Secara umum "state-ful" dianggap sebagai karakteristik yang buruk dari suatu desain dan layanan mikro "stateless" dianggap sebagai desain yang baik.
Namun, mengingat informasi tentang persyaratan yang Anda berikan di pos Anda, saya pikir desain berbasis microservices akan berlebihan untuk kasus penggunaan Anda dan manfaatnya tidak akan membenarkan kompleksitas tambahan. Manfaat arsitektur layanan microsoft cenderung hanya benar-benar ikut berperan ketika membangun layanan web skala besar yang mengutamakan skalabilitas, kekokohan, dan ekstensibilitas.
Manfaat potensial dari arsitektur layanan microsoft hanya diwujudkan dengan desain yang dipikirkan dengan baik juga. Menurut pendapat saya, arsitektur seperti itu membutuhkan desain yang lebih maju (terutama ketika menyangkut protokol untuk berkomunikasi antara layanan microser) daripada desain proses tunggal jika ingin berhasil memecahkan masalah yang dihadapi.
sumber