Наш аналитический сервер написан на С++. Он в основном запрашивает базовый механизм хранения и возвращает довольно большие структурированные данные через бережливость. Типичные запросы занимают от 0,05 до 0,6 секунды, чтобы завершить, зависит от размера запроса.
Я заметил, что есть несколько вариантов, с помощью которых сервер Thrift можно использовать в коде С++, в частности, TNonblockingServer, TThreadedServer и TThreadPoolServer. Похоже, что TNonblockingServer - это путь, так как он может поддерживать гораздо больше параллельных запросов и по-прежнему использовать пул потоков за сценой, чтобы справиться с задачами. Это также позволяет избежать затрат на создание/разрушение потоков.
Обновление Facebook по экономии: http://www.facebook.com/note.php?note_id=16787213919
Здесь, в Facebook, мы работаем над полностью асинхронным клиентом и сервером для С++. Эта сервер использует управляемый событиями ввод-вывод, как текущий TNonblockingServer, но его интерфейс к код приложения основан на асинхронных обратных вызовах. Это позволит нам написать серверы, которые могут обслуживать тысячи одновременных запросов (каждый из которых требует выполнение вызовов на другие серверы Thrift или Memcache) с несколькими потоками.
Связанные записи в stackover: Большое количество одновременных подключений в экономии
Таким образом, вы не сможете реально работать быстрее (обработчики все равно выполняются в пуле потоков), но больше клиентов смогут сразу подключиться к вам.
Просто интересно, есть ли какие-то другие факторы, которые мне здесь не хватает? Как я могу решить, какой из них лучше всего подходит мне?