Ho un'applicazione a tre livelli con il livello client di base, il livello intermedio e il livello del database. Il livello intermedio è destinato a raccogliere richieste di lavoro e dati dal client, elaborarlo e quindi memorizzarlo nel database.
Ci sono alcuni punti chiave qui:
-
Innanzitutto, le richieste di lavoro dal livello client dovrebbero essere asincrone quindi il cliente non sta aspettando il completamento del lavoro.
-
In secondo luogo, è necessario che più client siano in grado di accedere al livello intermedio allo stesso tempo. Se solo una connessione alla volta fosse possibile, quella potrebbe essere ok se i client possono essere forzati ad aspettare.
- In terzo luogo, il lavoro del livello intermedio deve essere parallelizzato per sfruttare il server multi-core su cui verrà eseguito.
- Infine, le prestazioni sono generalmente importanti qui. Io non ho benchmark specifici, ma è probabile che ne starò un sacco a pezzi dati, quindi assicurandoti che il design faciliti le prestazioni ragionevoli è import.
Considerato tutto ciò, ho problemi a progettare il livello intermedio. Per prima cosa, qual è il modo migliore per connettere il client e il livello intermedio? Inizialmente avevo concepito l'uso di TCP per connettere i due usando un livello intermedio con un thread principale per gestire le connessioni e prendere i dati dai client e poi rilasciare i thread dei bambini per eseguire il lavoro effettivo in modo che i client non dovessero aspettare.
Tuttavia, WCF sarebbe una scelta migliore? Se lo faccio, come faccio a farlo funzionare in modo asincrono? Inoltre, sembra che utilizzerei il parallelo per ogni ciclo in ogni chiamata di servizio che esegue il lavoro: è corretto? O c'è un approccio migliore qui che non vedo?
Qualsiasi aiuto sarebbe molto apprezzato!