Progettazione di un servizio always-on che deve essere in grado di gestire nuovi tipi di richieste

0

Ho bisogno di progettare un servizio che preforma i calcoli, i calcoli sono nella forma di fatturare un metodo e restituire un valore in qualche modo.

Uno dei requisiti è che quando viene reso disponibile un nuovo calcolo, non è necessario rimuovere l'intero sistema.

Ho pensato a uno dei metodi per raggiungere questo obiettivo, ma non sono soddisfatto del mio progetto che fondamentalmente non è sicuro per il tipo e soggetto a errori (e in questo modo raggiunge le sue capacità dinamiche), vorrei mostrarti cosa Avevo in mente e spero che le risposte mi aiutino a realizzare strumenti per raggiungere obiettivi come la sicurezza del tipo. Sto scrivendo in C #, ma non dovrebbe importare troppo.

A modo mio: ho pensato di fare questo avendo un server che riceve XML (fondamentalmente una stringa) che include il nome del calcolo seguito dai parametri di input (diversi calcoli possono ricevere quantità diverse di argomenti di input). Il server utilizza quindi il nome del calcolo richiesto per scrivere la richiesta su un altro server che preforma il calcolo specifico richiesto e scrive l'output risultante come XML in un'area dedicata in cui il richiedente può leggerlo. Intendevo utilizzare un MQ per implementare i messaggi di invio e di instradamento, ma questo è più di un dettaglio di implementazione.

I vantaggi a mio modo sono che il richiedente può inviare un XML che richiede un nuovo servizio e il mio server saprebbe come gestire la richiesta (basta instradarlo in qualche coda in modo che venga eseguito un nuovo programma che esegue il nuovo calcolo) - questo senza dover aggiornare Dll sul lato client e, cosa più importante, è che tutti i calcoli esistenti offerti dal servizio sono disponibili (ad esempio il sever non sa quali siano i calcoli effettivamente esistenti e quindi non è necessario eliminarli).

Gli svantaggi sono che l'XML è fondamentalmente una stringa con tutti gli svantaggi relativi alla sicurezza del tipo (inoltre - qualcuno può ottenere il numero di parametri errati!).

Un modo per mitigare questo è dare al cliente una nuova DLL per ogni servizio con un'interfaccia con un metodo e un'implementazione che serializza correttamente i dati e li invia al server - ma questo non è l'ideale principalmente perché non lo faccio Voglio che il mio codice sieda al client (diciamo che ho dei bachi o aggiorno il mio componente IO, ora devo notificare e aggiornare il codice per i miei utenti).

Che cosa pensi della mia soluzione? Apprezzerei qualsiasi miglioramento, specialmente quelli che possono rendere il design più robusto e meno soggetto a errori.

    
posta Belgi 31.07.2016 - 14:03
fonte

0 risposte

Leggi altre domande sui tag