Progettazione dell'architettura RPC multiprocesso

4

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?

    
posta Nonce 04.04.2013 - 06:13
fonte

1 risposta

1

Penso che dovresti avere un processo principale come gateway. Per caricarlo meno, puoi avere altri processi che fanno parte del lavoro. Per ridimensionare il processo principale è possibile farlo ascoltare un IP e una porta ma pubblicizzare l'IP come URL. Quindi puoi utilizzare i provider DNS che danno più di 1 IP alla ricerca (cambiano l'ordine in modo che entrambi gli IP ottengano traffico)

Questo è ciò che fanno piccoli e grandi siti web. Servono pagine web e la tua app dovrebbe essere in ascolto sulle proprie porte (potrebbe essere 80 se su HTTP o qualsiasi altra che hai aperto nel firewall)

I processi secondari possono avere metodi di sincronizzazione o asincroni. In Java abbiamo contenitori ed ejbs che fanno questo, dovremo fare più ricerca per tali sistemi in c ++

    
risposta data 14.04.2013 - 14:25
fonte

Leggi altre domande sui tag