Volevo creare un programma composto da 3 elementi:
- Un componente centrale senza UI che funzionerà sul traffico HTTP e attiva uno o più elementi "worker" secondo le necessità
- Un componente monitor che è un frontend opzionale per il componente centrale che leggerà i log e invierà i dati a un componente centrale attraverso un mailslot (a meno che non ci sia una buona ragione per cambiarlo)
- Elementi di lavoro che eseguiranno l'elaborazione in batch.
Per spiegare le mie scelte finora, per darti un'idea di dove vengo (anche se sono aperto ai suggerimenti). Il componente centrale sarà sempre in esecuzione anche se per mantenerlo leggero e silenzioso. Il monitor verrà lanciato solo quando necessario per verificare il componente centrale e inviare comandi. Ho scelto l'approccio mailslot in quanto si tratta di dati molto piccoli e inviati di rado su base ad hoc.
Volevo mantenere i lavoratori come processi separati, poiché dovranno elaborare i dati in parallelo. A causa dei dati che stanno elaborando, potrebbero avere una vita breve e alcuni dati sono ingombranti, il che rallenterà un singolo lavoratore.
Volevo dei pensieri su alcuni articoli sottostanti e sebbene apprezzi che potrebbe non esserci una soluzione "corretta" qualsiasi considerazione sarebbe anche ben accetta:
- Vorrei eseguire il componente centrale come un servizio in quanto lo manterrà più nascosto e consentirà l'esecuzione senza dover effettuare l'accesso. Sebbene in termini di servizio vs processo:
- Ci sono problemi di sicurezza con l'invio e la ricezione del traffico HTTP verso un servizio?
- Ci sono problemi con i servizi che creano thread?
- Progettando i lavoratori, mi piace l'idea di farli funzionare in parallelo, anche se la mia domanda ora è in termini di avere 1 processo per lavoratore e 1 processo con più thread:
- Ci sarebbero motivi per avere istanze separate degli stessi processi in esecuzione invece di eseguire i thread?
- In termini di invio di dati dai lavoratori al componente centrale quali sono i vantaggi di pipe vs mailslot, questi dati saranno di dimensioni molto ridotte anche se saranno regolari e frequenti (~ una volta al secondo ciascun lavoratore invierà un una piccola quantità di dati al componente centrale) e ci sono metodi migliori che ho trascurato?
Posso aggiornare quanto sopra con ulteriori informazioni su eventuali sezioni che sono necessarie anche se ho cercato di tenerlo breve. Il mio vero obiettivo alla base di questo progetto è imparare a far comunicare i diversi componenti.