Новый движок Абсурдопедии
Новый движок Абсурдопедии[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 и перекомпилировать движок.
[править] Примечания
- ↑ Официального названия нет.
- ↑ Правка Edward Chernenko
- ↑ Архив:Edward Chernenko:Фуршет в феврале 2011 года
- ↑ Точнее, такая настройка уже существует, но у процессов пока нет общего кэша. Это очень неэффективно (вместо, к примеру, кэша 128Мб получаются четыре по 32Мб, которые могут хранить несколько копий одного и того же).
Новый движок Абсурдопедии относится к темам: |