Новый движок Абсурдопедии

Материал из Викиреальностя
Перейти к: навигация, поиск

Новый движок Абсурдопедии[1] — гипотетический высокопроизводительный кэширующий HTTP-сервер с встроенной функциональностью викидвижка. Реально не существует.

Содержание

[править] История

Разрабатывался Edward Chernenko в качестве научной работы в вузе. По состоянию на 23 января 2011 года был готов чуть более, чем наполовину (написано примерно 7000 строк кода).

Впервые о разработке нового движка Edward Chernenko сообщил 2 декабря 2010 года.[2]

Во время фуршета в ru_wikipedia в февраля 2011 года Edward Chernenko дал ряд пояснений о работе нового движка,[3] но затем удалил все свои комментарии в этой ветке.

На лето 2014 года реализован не был, скорее всего разработка заброшена.

[править] Основы

Реализован на языке Си. Приоритет — максимальная скорость работы и минимальный расход системных ресурсов. Рассчитан на операционную систему Linux и не переносим (для ускорения использует множество механизмов, специфичных для Linux — epoll, inotify и т.п.).

В общем случае не соответствует стандарту HTTP/1.1. Если есть возможность сэкономить время/трафик, не навредив пользователям основных браузеров — он делает это. При первом намёке на некорректный HTTP-запрос (DOS-атака, кривой бот и т.п.) соединение немедленно обрывается без уведомления другой стороны об ошибке.

Максимально MediaWiki-совместим (тот же язык разметки страниц, может напрямую использовать базу данных MediaWiki, включает скин Monobook). Также включает уникальный скин RilPoint, существующий и для MediaWiki, но малораспространенный в википроектах.

[править] Технические детали

[править] Управление памятью

В ситуации «памяти полным полно» кэширует абсолютно всё. При этом расход системных ресурсов практически не зависит от числа посетителей (только от количества шаблонов и страниц).

Если запрос некорректен, прерван, должен вернуть ошибку 404 и т. п. (не дошёл до собственно этапа генерации страницы), то рабочий расходует фиксированное количество памяти.

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

[править] Многопоточность и меры против DoS

Используется модель worker (в терминологии Apache) с одним процессом, внутри которого есть один главный поток (thread), распределяющий задания для рабочих (worker threads).

Режим «с более чем одним процессом» (для работы на системах с несколькими процессорами) пока что не поддерживается.[4]

[править] Конфигурационный файл

Файл конфигурации cfg.c — это одна большая структура, записанная на языке Си и содержащая все настраиваемые переменные. Он компилируется в подгружаемую движком на старте библиотеку cfg.compiled. Пример синтаксиса:

struct config _CONFIG = {
        .worker_threads = 50,
        .user = "httpd",
        .skin = "monobook",
        /* и так далее */
};

[править] Несколько сайтов на одном движке

Движок поддерживает т. н. виртуальные хосты (virtual hosts), то есть показывает разные викисайты в зависимости от DNS-адреса сервера, указанного в запросе. Эти сайты настраиваются отдельно; не заданные в конфигурации переменные наследуются из глобальных настроек.

[править] Концепция источников

Движок получает тексты страниц из разных хранилищ (файлы, БД, сеть и т. п.) при помощи т. н. «драйверов источников», взаимодействующих с «родными» базами данных ранее существовавших систем управления контентом. Что, по задумке, позволяет быстро перевести на этот движок практически любой проект Веб 2.0.

Источник «привязывается» к одному или нескольким пространствам имён.

Пример поддерживаемого «фокуса», не реализованного в MediaWiki: на нескольких викисайтах (виртуальных хостах) может быть общий форум (пространство имён 100).

Изначально поддерживаются источники file и mediawiki.

Запросы, не направленные ни к корню сайта (вроде "/?title=Заглавная_страница"), ни к путям "*/index.php" или "/wiki/", считаются запросами к статическим файлам, лежащим в document_root (корневой папке для документов). Именно там, в частности, размещаются стили, скрипты и изображения для скинов.

[править] Оптимизация работы с БД

Поддерживается постоянное соединение с MySQL-сервером, используемое всеми потоками.

[править] Расширения движка

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

#ifdef HOOK_LabudaHappened
  /* здесь код */
  return 1; /* всё нормально */
#endif

Вместе с движком поставляется специальный препроцессор makehooks (компилируется перед сборкой самого движка), который извлекает эти кусочки из кода расширений и заполняет отдельную папку файлами вида LabudaHappened.hook. Эти файлы *.hook уже включаются в самом движке при помощи обычной директивы #include.

Таким образом, для добавления нового расширения достаточно скопировать его в папку extensions и перекомпилировать движок.

[править] Примечания

  1. Официального названия нет.
  2. Правка Edward Chernenko
  3. Архив:Edward Chernenko:Фуршет в феврале 2011 года
  4. Точнее, такая настройка уже существует, но у процессов пока нет общего кэша. Это очень неэффективно (вместо, к примеру, кэша 128Мб получаются четыре по 32Мб, которые могут хранить несколько копий одного и того же).
Новый движок Абсурдопедии относится к темам: