Il nostro server analitico è scritto in C++. In pratica, interroga il motore di archiviazione sottostante e restituisce dati strutturati piuttosto grandi tramite parsimonia. Una richiesta tipica richiederà da 0,05 a 0,6 secondi per finire dipende dalla dimensione della richiesta.TNonblockingServer, TThreadedServer e TThreadPoolServer, quale si adatta meglio al mio caso?
Ho notato che ci sono alcune opzioni in termini di server Thrift che possiamo usare nel codice C++, in particolare TNonblockingServer, TThreadedServer e TThreadPoolServer. Sembra che TNonblockingServer sia la strada da percorrere poiché può supportare molte più richieste simultanee e continuare a utilizzare un pool di thread dietro la scena per crunch attraverso le attività. Evita anche il costo di costruzione/distruzione dei thread.
aggiornamento di Facebook sul risparmio: http://www.facebook.com/note.php?note_id=16787213919
Qui a Facebook, stiamo lavorando su un client completamente asincrono e il server per C++. Questo server utilizza l'I/O basato sugli eventi come TNonblockingServer corrente, ma la sua interfaccia su il codice dell'applicazione si basa tutto su callback asincroni. Questo ci consentirà di scrivere server che possono servire migliaia di richieste simultanee (ognuna delle quali richiede effettuare chiamate ad altri server Thrift o Memcache) con pochi thread.
Post relativi stackover: Large number of simulteneous connections in thrift
Detto questo, non sarà necessariamente in grado di fare effettivamente lavorare più velocemente (gestori ancora eseguire in un pool di thread), ma più clienti sarà in grado di connettersi a voi in una sola volta.
Basta chiedersi ci sono altri fattori che mi mancano qui? Come posso decidere quale si adatta meglio alle mie esigenze?