Запускаем форум на асме

Тема в разделе "WASM.ARTICLES", создана пользователем Олег, 31 янв 2018.

  1. Олег

    Олег New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2017
    Сообщения:
    7
    Результат
    Сразу начну с результата, пример работы админа форума:
    Протестируем производительность одного воркера сервера при работе с форумом, используя ApacheBenchmark (500K запросов, 50 конкурентных подключений):
    ApacheBenchmark успешно запросил 500K раз список разделов форума за 22.349 секунды, суммарно приняв 1.3 ГБайт от сервера, расчётное время на один запрос составило 4.5E-8. Тестирование проведено на ноутбуке с процессором:
    [​IMG]

    Строение форума
    Структура форума, тем и сообщений хранится в трёх таблицах. Все динамические текстовые строки форума автоматически сохраняются в одном хранилище данных, таблицы хранят номера строк данных в хранилище.
    Таблица 'Структура форума' содержит свойства разделов форума: название, уровни доступа, флаги, номер раздела или ноль, генерируемые аналитической функцией 'ИндексацияФорума' данные: размер отступа в таблице 'Темы форума' начиная с которого подряд расположены темы текущего раздела, количество тем и количество сообщений во всех темах.
    Таблица 'Темы форума' содержит свойства тем форума: название, уровни доступа, флаги, номер раздела, дату и время последнего сообщения, номер последнего автора, номер строки данных в хранилище с текстом первого сообщения, генерируемые аналитической функцией 'ИндексацияФорума' данные: размер отступа в таблице 'Сообщения форума' начиная с которого подряд расположены сообщения текущей темы и их количество.
    Таблица 'Сообщения форума' содержит свойства сообщений форума: номер строки данных в хранилище с текстом сообщения, уровень доступа, флаги, номер темы, дату и время сообщения, номер автора, номер строки данных в хранилище с текстом выводимого сообщения.
    Любое изменение форума приводит к формированию нового кадра базы данных (но не чаще 1/10 секунды), в котором запускается автоматическая сортировка по указанным в свойствах таблиц столбцам: 'Темы форума' по номеру раздела, дате и времени последнего сообщения в теме; 'Сообщения форума' по номеру темы сообщения (дата и время не требуются, т.к. сортируемые сообщения уже располагаются в порядке поступления в базу данных, а сортировка в каждом кадре сортирует исходные данные). Результаты сортировок сохраняются в виде смещений на данные сортируемых строк. После сортировок запускается аналитическая процедура 'ИндексацияФорума', оформляющая результат сортировки сообщений для каждой темы (смещение на начало сообщений темы и их количества) и результат сортировки тем для каждого раздела (смещение на начало тем и количество тем с сообщениями).

    Триггеры
    Основной задачей триггеров является запуск обработки исходных сообщений и сборки из них сообщений к показу с учётом BB-кодов. Кроме этого триггер срабатывающий при создании темы вручную создаёт первое сообщение темы в таблице 'Сообщения форума'. Здесь нужно заметить, что триггеры исполняются не в воркерах, а в потоке ядра, т.е. в фоновом потоке. Рассмотрим код триггеров:
    [​IMG]
    Параметры функций триггеров: lpObjInf=адресу информации о текущем объекте; numStr=номер текущей строки в таблице; lpMasInpCol=указатель на массив использованных/принявших информацию столбцов, причём до массива расположен 32-х битный счётчик размера массива и далее его значения (32-х битный номер столбца и 32-х битное имя столбца); lpCommandDT=указателю на 48-и битную дату и время сохранения транзакции; lpID=указателю на 128-и битный идентификатор транзакции; numObjSecur=номер объекта с пользователем инициатором транзакции; numUser=номер пользователя инициатора транзакции; trgMode=биту, определяющему событие запустившее триггер (15-до создания строки, 14-после создания строки, 13-до изменения строки, 12-после изменения строки, 11-до удаления строки).
    Функция 'MessageAssembling' занимается обработкой исходных текстовых сообщений и формирования из них сообщений готовых к выводу. Её параметры: имя объекта, имя столбца с исходным текстовым сообщением, имя столбца с итоговым сообщением. Кроме этого её входным параметром выступает регистр edi, хранящий указатель на данные текущей строки таблицы.

    Добавление движка форума к текущему проекту
    Продолжим конфигурацию, полученную в результате динамического формирования файлов в разделе «Примеры: конфигурации и скрипты для начинающих». Скопируем в папку с программой все файлы из конфигурации «Создание форума», кроме файлов базы данных 'basa.dbs1' и 'basa.dbs2', т.к. в них уже конечный результат, рассмотрим как дойти до него. Добавляем в 'Тест.NetAsm' функцию:
    [​IMG]
    Функция начинает html документ, устанавливает кодировку текста UTF-8 в текущем воркере и вызывает ядро форума. Далее повторяем действия из видео:
    Краткий пересказ видео: вводим 12345/12345 и входим; добавляем правило кэширования на неделю; изменяем реакцию на обращение к корневой директории сайта (перенаправляем на диск); добавляем правило корневой директории - если запрос пустой, вызов 'HelloWorld'; добавляем ещё одно правило корневой директории - если запрос содержит 'forum', вызов 'Форум'; добавляем ещё один файл для компиляции 'CoreOfForum.NetAsm'; устанавливаем в контейнер компиляцию файла триггеров; смотрим ошибки компиляции; делаем запрос на '127.0.0.1/forum' и ждём 5 секунд (в это время формируются объекты, типы данных и т.п.), пока не появится пустой форум; возвращаемся на '127.0.0.1/setup/' и снова проверяем ошибки компиляции - их нет. Всё, форум готов к работе.
    Create Forum конфигурация для скачивания, распаковывать в папку с программой. Логин/пароль админа - admin/admin, юзера - 12345/12345.
     
    X-Shar нравится это.
  2. Alexey

    Alexey Инициативный Команда форума

    Публикаций:
    1
    Регистрация:
    28 сен 2002
    Сообщения:
    243
    :scratch_one-s_head:Интересные у вас разработки. Сюда бы Джона, думаю тогда перепалки не избежать)
    В целом такие вот проекты, возможно имеют перспективы, но вы должны их больше пиарить, чтобы вовлекать людей и в использование и в доработку совместными усилиям. На вашем месте я бы выложил все исходники в гитхаб, добавил кроме русского англ. документацию, по дефолтному дизу натянул бы свежий боотстрэп и в больших местах рассказывал бы о нем, при этом должны быть какие то реальные преимущества и сравнения с сущ. веб языками. Если это действительно, прорыв, то постепенно информация о проекте разлетится сама собой по интернету и вы получите большой отклик и помощь.
     
    _edge и Олег нравится это.
  3. yashechka

    yashechka Ростовский фанат Нарвахи Команда форума

    Публикаций:
    44
    Регистрация:
    2 янв 2012
    Сообщения:
    1.231
    Адрес:
    Россия, Ростов-на-Дону
  4. X-Shar

    X-Shar Member

    Публикаций:
    0
    Регистрация:
    24 фев 2017
    Сообщения:
    42
    Работа интересная, даже видео посмотрел.

    Но к сожалению не увидил какого-то реального применения этого всего.

    Современные движки, даже-вот взять движок этого форума (XenForo), достаточно легко расширяются (написание плагинов, стилей и т.д.), достаточно легко админитрируются и выглядят не как сайты 90-х годов. :)

    Про нагрузку, ИМХО тоже все решается, куда более простыми способами, нежели переписывать что-то на ассемблере. :)

    ЭТО ПРОСТО МОЕ МНЕНИЕ, ДОЛГО ВЕЛ ФОРУМЫ, В ТОМ-ЧИСЛЕ И КОММЕРЧЕСКИЕ, РАБОТАЛ С РАЗНЫМИ ДВИЖКАМИ.

    ТАК-ТО КРУТО КОНЕЧНО, НО НЕ БОЛЕЕ ЧЕМ ХОББИ-ПРОЕКТ. :)
     
    Олег и yashechka нравится это.
  5. Олег

    Олег New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2017
    Сообщения:
    7
    Да, форум это что-то вроде хобби проекта. Мне стало интересно смогу или нет. Делал самый элементарный функционал, но всё легко расширяется, стили в отдельном файле, логика легко совершенствуется. При малейшем изменении серверной логики, новая версия компилится, и начинает работать с задержкой в 1/10 секунды, т.е. происходит горячая замена кода - это свойства движка на котором сделан форум. Делал около двух месяцев в свободное время. В результате у меня получился самый шустрый форум, не имеющих конкурентов по времени отклика и выдерживаемой воркером нагрузке. :superman2:Но это так, приятный бонус для меня.