Facebook открыл код Proxygen, фреймворка для создания HTTP-серверов
5 ноября 2014 года
Facebook объявил об открытии исходных текстов проекта Proxygen, в рамках которого подготовлена коллекция С++ библиотек, используемых для создания высокопроизводительных серверных и клиентских приложений, работающих по протоколу HTTP. В состав также входит простая реализация HTTP-сервера с поддержкой протоколов HTTP/1.1, SPDY/3, SPDY/3.1, TLS и частично HTTP/2 (в разработке). При обработке соединений применяются неблокирующие операции ввода/вывода и вызов epoll. Код Proxygen распространяется под лицензией BSD.
Proxygen не претендует на роль замены Apache httpd и nginx, а сфокусирован на развитии фреймворка, обладающего разумными настройками по умолчанию и подходящего для простой интеграции функций HTTP-сервера или клиента в уже существующие приложения на языке C++. Изначально Proxygen был создан как высокопроизводительный HTTP/HTTPS-прокси для балансировки соединений, но позднее перерос в универсальный фреймворк c реализацией простого HTTP-стека, позволяющий превращать уже существующие приложения в самостоятельные http-сервисы.
Библиотека предлагает четыре уровня абстракции: сеанс, кодек, транзакцию и обработчик. Основным высокоуровневым элементом библиотеки является объект HTTPSession, определяющий сеанс соединения. За каждым сеансом закрепляется кодек (HTTPCodec), определяющий специфичные для используемого протокола особенности сериализации сообщений. Для каждого запроса и ответа, обработанных внутри сеанса, создаётся объект HTTPTransaction, связанный с отдельным индентификатором. Непосредственно логика обработки запросов определяется через callback-вызовы HTTPTransation::Handler.
Proxygen отлично протестирован и уже помог обработать в Facebook многие триллионы соединений. Фреймворк обеспечивает достаточно неплохую производительность, например, простой тестовый сервер способен обработать до 300 тысяч запросов в секунду при запуске 8 потоков-обработчиков и до 40 тысяч при одном потоке, при тестировании на системе с CPU Intel Xeon E5-2670 @ 2.60GHz c 16 GiB ОЗУ.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.