Attualmente sto lavorando a un progetto in cui le applicazioni client comunicano con un processo del server. Le applicazioni client possono essere locali sulla stessa macchina del processo server, sulla stessa rete o su Internet. Avevo scritto un modulo RPC asincrono a thread singolo per il processo del server usando Boost ASIO mentre Google Protobuf era usato per la serializzazione dei messaggi RPC. L'architettura era un modello client-server piuttosto semplice in cui un client avrebbe imballato una richiesta nel messaggio protobuf e l'avrebbe inviata al server che avrebbe restituito una risposta. Il processo del server è scritto in C ++ e le applicazioni client erano in lingue diverse. Il caso d'uso principale per questo era presentare una GUI per consentire agli utenti di monitorare e interagire con il processo del server.
In futuro, il processo server verrà separato in processi funzionalmente separati anziché in un processo monolitico. Questo presenta un problema in cui ora ho più processi per le applicazioni client a cui connettersi. Non penso che questo sarebbe un problema nel caso delle applicazioni locali o client lan, ma, su internet, questo potrebbe diventare ingombrante se il numero di processi cresce. Inoltre, potrei voler abilitare IPC tra i processi del server inviandoci reciprocamente i messaggi RPC.
Non sono sicuro di quale architettura applicativa distribuita si adatti meglio a questo sistema andando avanti. Non voglio reinventare la ruota se non è necessario, quindi ho guardato velocemente D-bus e ZeroMQ, ma visto che la mia architettura non è davvero ambientata ho pensato di chiederti altri programmatori.
Sarebbe saggio disporre di un singolo server per la gestione delle comunicazioni tra le applicazioni client e i processi server oppure esiste uno stile di architettura migliore che dovrei prendere in considerazione? Se voglio abilitare IPC tra i processi del server dovrei averli direttamente inviare messaggi tra loro o dovrei usare il processo a server singolo menzionato in precedenza? Dovrei guardare qualcosa come un modello di pubblicazione / sottoscrizione?