Notre serveur analytique est écrit en C++. Il interroge essentiellement le moteur de stockage sous-jacent et renvoie une assez grande quantité de données structurées via l'épargne. Une demande typique prendra environ 0,05 à 0,6 secondes pour terminer dépend de la taille de la demande.TNonblockingServer, TThreadedServer et TThreadPoolServer, lequel correspond le mieux à mon cas?
J'ai remarqué qu'il y a quelques options concernant le serveur Thrift que nous pouvons utiliser dans le code C++, en particulier TNonblockingServer, TThreadedServer et TThreadPoolServer. Il semble que TNonblockingServer soit la solution, car il peut supporter beaucoup plus de requêtes simultanées et utiliser encore un pool de threads derrière la scène pour croiser les tâches. Cela évite également le coût de construction/destruction des threads.
mise à jour de Facebook sur Thrift: http://www.facebook.com/note.php?note_id=16787213919
Chez Facebook, nous travaillons sur un client totalement asynchrone et le serveur C++. Ce serveur utilise des E/S pilotées par événements comme le TNonblockingServer actuel, mais son interface avec le code d'application est basée sur des rappels asynchrones. Cela nous permettra d'écrire des serveurs capables de traiter des milliers de requêtes simultanées (chacune nécessitant de faire des appels vers d'autres serveurs Thrift ou Memcache) avec seulement quelques threads.
Related posts sur stackover: Large number of simulteneous connections in thrift
Cela étant dit, vous serez pas nécessairement en mesure de réellement faire travailler plus vite (gestionnaires exécutons encore dans un pool de threads), mais plus les clients seront capable de se connecter à vous à la fois.
Je me demandais s'il y avait d'autres facteurs qui me manquent ici? Comment puis-je décider lequel correspond le mieux à mes besoins?