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