The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

"Бегун" открыл код многопоточного HTTP-сервера и аллокатора памяти

20.04.2011 17:33

Сервис контекстной рекламы "Бегун" объявил об открытии исходных текстов четырёх проектов: многопоточного HTTP-сервера Lizard, библиотеки с реализацией HTTP-сервера Serverlib, библиотеки для обработки реплицированных данных MySQL libslave и оптимизированной для многопоточных систем реализации функций malloc/free lockfree-malloc. Код проектов написан на языке C++ и распространяется в рамках лицензии LGPLv3.

  • Lizard не похож на классические http-серверы двумя вещами: Во первых, обслуживающее web-запросы приложение оформлено в виде плагина, который не вызывается через интрейфейс подобный FastCGI, а непосредственно линкуется с Lizard. Допускается как динамическая загрузка плагина, так и статическое связывание, при котором приложение и http-сервер составляют единый исполняемый файл. Lizard берёт на себя обеспечение обработки протокола HTTP и вызывает обработчики событий, определенные в плагине.

    Второй особенностью Lizard является поддержка двух логически разделённых пулов потоков-обработчиков соединений: первый пул ("easy") обрабатывает запросы, на которые ответ может быть отдан быстро (например, из кэша), а второй пул ("hard") обслуживает ресурсоёмкие запросы, например, требующие обновления данных в кэше. Запросы к обоим пулам обслуживаются в порядке очереди, размер которой ограничен конфигурацией (запрос отбрасывается, если все позиции в очереди заняты, что позволяет избежать перегрузки сервера). Запросы вначале всегда попадают в easy-пул и в зависимости от логики реализации плагина могут быть переданы по цепочке в hard-пул.

    Конфигурация Lizard задается в XML-формате и отличается наличием всего нескольких базовых директив: IP и порт для обслуживания запросов, таймауты, ограничение на размер и число очередей, параметры ведения логов, путь к динамической библиотеке с выполняемым плагином. В плагине реализуется несколько циклически вызываемых обработчиков запросов: handle_easy для первичной обработки запросов в easy-пуле; handle_hard для выполнения более ресурсоёмких операций; set_param - вызываемый при старте сервера callback-обработчик для разбора собственного файла конфигурации плагина; idle - вызываемая через заданные промежутки времени функция для выполнения типовых периодических действий.

  • Serverlib представляет собой оформленный в виде библиотеки многопоточный http-сервер, который можно встроить в любое приложение на языке C++. В отличие от усложненных многофункциональных HTTP-фреймворков библиотека Serverlib крайне проста в использовании: функциональность доступа через несколько простых функций. Запуск встроенного http-сервера сводится к вызову трёх функций: перевод процесса в фоновый режим, прикрепление к сокету и начало обработки соединений.

    Обработка запроса производится в цикле и по организации работы напоминает FastCGI. Библиотека оптимизирована для 64-разрядных Linux-систем и уже достаточно давно используется в промышленной эксплуатации для обработки тысяч соединений в секунду.

  • Libslave - библиотека для анализа выполнения репликации данных в СУБД MySQL. Позволяет из C++ программы присоединиться к первичному (master) MySQL-серверу и выполнить чтение и разбор используемых в процессе репликации бинарных логов. Т.е. библиотека позволяет создать приложение, которое не связано с кодом MySQL, но действует как вторичный (slave) MySQL-сервер, на который производится передача реплицированных данных. Из областей применения называется возможность создания обработчиков поступающих в базу изменений, получающих данные в режиме реального времени без привлечения промежуточных хранилищ.
  • lockfree-malloc - оптимизированная для многопоточных приложений система распределения памяти, способная заменить стандартные функции malloc и free.

    Достоинства lockfree-malloc:

    • Пригодность для использования в многопоточных программах, поддержка практически неограниченного числа одновременно работающих нитей без падения производительности из-за блокировок;
    • Высокая эффективность в многопоточном окружении: lockfree-malloc значительно опережает по производительности систему распределения памяти libc;
    • В отличие от libc в Lockfree-malloc никогда не выделяются фрагментированные области памяти;
    • Низкий расход памяти, для объектов размером до 8 Кб при хранении полностью отсутствуют накладные расходы;
    • Оптимизация для работы на 64-разрядных системах;
    • Реализация библиотеки занимает всего 800 строк кода;
    • Автономность, библиотека не зависит в процессе работы от других библиотек, таких как pthreads и libc.

    Недостатки lockfree-malloc:

    • Работа только на процессорах с архитектурой x86_64;
    • Библиотека не пытается экономить области маппинга виртуальной памяти;
    • Используемая для хранения небольших объектов память (до 128 Кб) кэшируется аллокатором и никогда не возвращается обратно операционной системе.


  1. Главная ссылка к новости (http://begun.ru/blog/corporati...)
  2. OpenNews: Яндекс начал формирование коллекции своих открытых проектов
  3. OpenNews: Компания Google открыла код Snappy, библиотеки для сжатия данных
  4. OpenNews: Разработчики из компании Google открыли код системы сборки Ninja
  5. OpenNews: Компания Google открыла исходные тексты библиотеки регулярных выражений RE2
  6. OpenNews: Facebook открыл модуль Flashcache для организации кэширования на SSD-накопителях
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/30308-http
Ключевые слова: http, httpd, lib, malloc, memory
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (15) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, vle (ok), 20:13, 20/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    И чем этот lockfree-malloc лучше, чем jemalloc или tcmalloc?
    Бенчмарки то где?
     
     
  • 2.10, Andrey Mitrofanov (?), 09:41, 21/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > И чем этот lockfree-malloc лучше, чем jemalloc или tcmalloc?

    Конечно, gplv3-ей.

    > Бенчмарки то где?

    Щас флеймовар устроим -- это ж лучший бм...

     

  • 1.5, zuborg (?), 20:46, 20/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >Реализация библиотеки занимает всего 800 строк кода;

    код не смотрел, но уважаю ;)

     
  • 1.8, апоеакш (?), 23:49, 20/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Бегун открыл потому, как он банкрот...

    Читайте комменты:
    http://roem.ru/2011/04/17/romanenkov_pro_begun/

     
     
  • 2.14, Aleksey (??), 11:31, 21/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это их проблемы, главное что код оставили.
     

  • 1.9, luserz (?), 07:17, 21/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    libslave - няшка.
    как основа событийки- само то.
    надо погонять.
     
  • 1.11, Аноним (-), 09:46, 21/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А чем к примеру WSGI хуже прерывания описанного в плагине?
     
  • 1.12, Аноним (-), 10:45, 21/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Странная у них реализация кода алакатора весь код в заголовочных файлах, а что если кто-то несколько раз подключит эти заголовки?
     
     
  • 2.13, Vitaly_loki (ok), 11:25, 21/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    > Странная у них реализация кода алакатора весь код в заголовочных файлах, а
    > что если кто-то несколько раз подключит эти заголовки?

    #ifndef
    #define

    не?

     
     
  • 3.22, Аноним (-), 00:18, 23/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    А компилятору как докажешь какую версию функции реализованной таким образом считать правильной - он тебе просто скажет реализация уже есть связывать не могу.
     
  • 2.16, ppppppppp (?), 12:20, 21/04/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    #pragma once
     

  • 1.15, Аноним (-), 12:20, 21/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    К firefox можно lockfree-malloc прикрутить, кто нибудь пробовал?
     
     
  • 2.20, Аноним (-), 18:00, 21/04/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Основные недостатки вкупе с тем фактом, что десктопные приложения выделяют больше разнородных блоков памяти, сводят на нет любой призрачный выигрыш.
     

  • 1.21, rico (ok), 20:51, 21/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    блин, вот какой-то дурак один раз назвал linking связыванием и покатилось
    компоновка, друзья, а не связывание
     
  • 1.23, Bolk (?), 11:05, 24/04/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Lizard не похож на классические http-серверы двумя вещами: Во первых, обслуживающее web-запросы приложение оформлено в виде плагина, который не вызывается через интрейфейс подобный FastCGI, а непосредственно линкуется с Lizard.

    То есть Apache с его mod_php уже перестал быть классическим http-сервером?

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру