TNonblockingServer, TThreadedServer и TThreadPoolServer, какой из них лучше всего подходит для моего случая?

Наш аналитический сервер написан на c ++. Он в основном запрашивает базовый механизм хранения и возвращает довольно большие структурированные данные через экономию. Типичные запросы будут занимать около 0,05 до 0. 6 секунд до завершения зависят от размера запроса.

Я заметил, что есть несколько вариантов, с точки зрения того, какой сервер Thrift мы можем использовать в коде c ++, в частности TNonblockingServer, TThreadedServer и TThreadPoolServer. Похоже, что TNonblockingServer - это то, что нужно, поскольку он может поддерживать гораздо больше параллельных запросов и все еще использовать пул потоков за сценой для сокращения задач. Это также позволяет избежать затрат на создание / уничтожение потоков.

Обновление Facebook по вопросам экономии: http://www.facebook.com/note.php?note_id=16787213919

Здесь, в Facebook, мы работает над полностью асинхронным клиентом и сервером для C ++. Эта и TThreadPoolServer. Похоже, что TNonblockingServer - это то, что нужно, поскольку он может поддерживать гораздо больше параллельных запросов и все еще использовать пул потоков за сценой для сокращения задач. Это также позволяет избежать затрат на создание / уничтожение потоков.

Обновление Facebook по вопросам экономии: http://www.facebook.com/note.php?note_id=16787213919

Здесь, в Facebook, мы работает над полностью асинхронным клиентом и сервером для C ++. Эта и TThreadPoolServer. Похоже, что TNonblockingServer - это то, что нужно, поскольку он может поддерживать гораздо больше параллельных запросов и все еще использовать пул потоков за сценой для сокращения задач. Это также позволяет избежать затрат на создание / уничтожение потоков.

Обновление Facebook по вопросам экономии: http://www.facebook.com/note.php?note_id=16787213919

Здесь, в Facebook, мы работает над полностью асинхронным клиентом и сервером для C ++. Эта работаем над полностью асинхронным клиентом и сервером для C ++. Эта работаем над полностью асинхронным клиентом и сервером для C ++. Эта сервер использует управляемый событиями ввод-вывод, как текущий TNonblockingServer, но его интерфейс код приложения основан на асинхронных обратных вызовах. Это позволит нам написать серверы, которые могут обслуживать тысячи одновременных запросов (каждый из которых требует совершать вызовы на другие серверы Thrift или Memcache) только с несколькими потоками.

Похожие сообщения о стэкинге: Большое количество одновременных соединений в Thrift

При этом вы не обязательно сможете на самом деле делать работать быстрее (обработчики все еще выполняется в пуле потоков), но больше клиентов смогут подключаться к вам сразу.

Просто интересно, есть ли другие факторы, которые я здесь упускаю? Как мне решить, какой из них лучше всего соответствует моим потребностям?

13
задан 3 revs 23 May 2017 в 12:09
поделиться