我们的分析服务器是用 C++ 编写的。它基本上查询底层存储引擎并通过thrift返回相当大的结构化数据。一个典型的请求大约需要 0.05 到 0.6 秒才能完成,具体取决于请求的大小。
我注意到我们可以在 c++ 代码中使用的 Thrift 服务器有几个选项,特别是 TNonblockingServer、TThreadedServer 和 TThreadPoolServer。似乎 TNonblockingServer 是要走的路,因为它可以支持更多的并发请求,并且仍然在后台使用线程池来处理任务。它还避免了构建/破坏线程的成本。
Facebook 关于节俭的更新:http: //www.facebook.com/note.php? note_id=16787213919
在 Facebook,我们正在为 C++ 开发一个完全异步的客户端和服务器。这个服务器像当前的 TNonblockingServer 一样使用事件驱动的 I/O,但它与应用程序代码的接口都是基于异步回调的。这将允许我们编写可以服务数千个并发请求的服务器(每个请求都需要调用其他 Thrift 或 Memcache 服务器),而只需几个线程。
stackover 上的相关帖子:thrift 中的大量同时连接
话虽如此,您不一定能够真正更快地完成工作(处理程序仍然在线程池中执行),但更多的客户端将能够一次连接到您。
只是想知道我在这里还缺少其他因素吗?我该如何决定哪一个最适合我的需求?