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

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

  1. Олег

    Олег New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2017
    Сообщения:
    10
    Результат
    Сразу начну с результата, пример работы админа форума:
    Протестируем производительность одного воркера сервера при работе с форумом, используя 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
    Сообщения:
    271
    :scratch_one-s_head:Интересные у вас разработки. Сюда бы Джона, думаю тогда перепалки не избежать)
    В целом такие вот проекты, возможно имеют перспективы, но вы должны их больше пиарить, чтобы вовлекать людей и в использование и в доработку совместными усилиям. На вашем месте я бы выложил все исходники в гитхаб, добавил кроме русского англ. документацию, по дефолтному дизу натянул бы свежий боотстрэп и в больших местах рассказывал бы о нем, при этом должны быть какие то реальные преимущества и сравнения с сущ. веб языками. Если это действительно, прорыв, то постепенно информация о проекте разлетится сама собой по интернету и вы получите большой отклик и помощь.
     
    _edge и Олег нравится это.
  3. yashechka

    yashechka Ростовский фанат Нарвахи

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

    X-Shar Active Member

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

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

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

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

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

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

    Олег New Member

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

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    + стоит не забывать, что самой тормознутой частью любого сервера является бд. А плагины -- да, еть жуткая жуть всегда и везде:crazy: короче, опосля всех за-и-против толку от асма будет зеро + асм сам по себе урезает пул разрабов на проект.
     
  7. Олег

    Олег New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2017
    Сообщения:
    10
    Этот "хобби-проект" сделан в "хранимых процедурах бд", работающей в субд, написанной на асме довольно давно и изначально применяемой для биллинга. Так что бд в данном случае не может быть "тормознутой частью любого сервера". Работа с данными бд идёт через имена, указывающие на нужные адреса. Причём после изменений бд, данные всегда лежат отсортированными и в линейном виде, работа с ними быстра и удобна. Момент переключения со старой версии данных на более новую "хранимые процедуры бд" не ощущают.
    Про разрабов и проекты: пусть каждый пишет на том на чём хочет, зачем кому-то что-то навязывать? А этот сайт вроде бы про асм и мне странно видеть "толку от асма будет зеро". Попробуйте на XenForo достигнуть скорости в несколько десятков тысяч ответов в секунду, даже интересно какими мощностями :heat: эта цифра будет достигнута.
     
    X-Shar нравится это.
  8. X-Shar

    X-Shar Active Member

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

    А так вполне решается кешированием, опкод или даже вся база (у небольших проектов) кешируется в память. Если этого не хватает, можно кешировать часто нагружаемые страницы, т.е. страницы не генерируются, а отдаются статикой html. Единственный минус, что страницы будут обновляться не сразу, а через какое-то время, 30-60 секунд например.

    Думаю в таком случае производительность будет весьма сравнима с асмом, а-то и превосходить его. :)

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

    А в вебе особенно. :)
     
  9. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
    Если писать бэкенд на асме - уж и сервер пилите на асме, без всяких опенссл и нжиникс. Хотя и без самопального сервера много лучше любого пэхапэ дерьма.
     
  10. X-Shar

    X-Shar Active Member

    Публикаций:
    0
    Регистрация:
    24 фев 2017
    Сообщения:
    354
    Ога, во первых вы уверены что на асме напишите лучше, чем на том-же си ?

    Я это к тому-что компиляторы в целом не плохо оптимизируют код, что-бы написать лучше чем, то-что выдаст компилятор, нужно во первых неплохо-так знать ассемблер, а во вторых каждый раз просчитывать время исполнения инструкции и т.д.

    Вряд-ли сейчас найдется такой человек, который способен написать серьёзный код, "умнее" чем компилятор, а если и найдется, то еденицы. Тут ещё вопрос сколько времени он потратит на это.

    Чем лучше-то ?

    Код такой нечитаем раз. По поводу безопасности ? Весьма спорно.

    По функционалу, ну-да попробуйте на асме сделать нормальный функционал. Вы будете пользоваться сайтом с функционалом 90-х годов ? Лично я нет. :)

    То-же самое и про другие области, если говорить про разработку чего-либо. Да есть "узкие моменты", где без ассемблера ну вообще никак, это если нужно дернуть какой-то регистр, области где ну действительно он оптимизирует.

    Писать-же всё на ассемблере, как минимум не оптимально, особенно в вебе. :)
     
  11. unc1e

    unc1e Active Member

    Публикаций:
    2
    Регистрация:
    28 июл 2017
    Сообщения:
    287
    X-Shar,
    > компиляторы в целом не плохо оптимизируют код
    спорно
    > Код такой нечитаем
    читаем, разве что топовая оптимизация местами
    > По поводу безопасности
    зависит от разработчика
    > По функционалу, ну-да попробуйте на асме сделать нормальный функционал
    на асме можно сделать все, что можно сделать на языках уровнями выше, вопрос времени и сил

    Кст если говорить о времени и силах - заметьте, я специально написал "Если писать бэкенд на асме - уж и сервер пилите на асме". Ключевым здесь является первая часть предложения (до тире), те если человек решил писать что-то с целью оптимизировать производительность - можно производительность улучшить еще сильнее, написав дополнительно и сервер
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    о чём спорить-то 777 :)
    вот именно, а ежель времени да силов няма == на асме получается ещё больший трэш, чем на вижуал васике фор аппликаций:crazy::laugh3::laugh3::blush2:
     
  13. Олег

    Олег New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2017
    Сообщения:
    10
    Есть и сервер, т.е. имеется всё в одном и сервер и бд и компилятор - минимум накладных расходов при приёме, обработке, передаче ответа.
    Я вот например уверен, что напишу лучше, чем на Си и не буду считать время исполнения инструкций, т.к. это бред. И соглашусь, что "компиляторы в целом неплохо оптимизируют код", только человек может ещё лучше, вот когда компиляторы научатся сами писать мало мальские программы, тогда можно будет говорить о вумных компиляторах. Ну а по времени написания - немногим более чем на Си.
    Во первых там совсем не тот Асм который вы видимо себе представляете, а во вторых что мешает сделать этот
    "нормальный функционал"? Какие сайты были в 90-х я хз, у нас тогда только фидо было :russian:
    Ага, в вебе всё прям летает :rofl:
     
  14. X-Shar

    X-Shar Active Member

    Публикаций:
    0
    Регистрация:
    24 фев 2017
    Сообщения:
    354
    Ну-да, ну-да. Вообще из тех "ассемблерщиков" который я знаю, так никто и не написал ничего лучше.

    Не буду разводить писанину, скажу-лишь две вещи:

    1. Я не против ассемблера, я за его применение, где он действительно нужен.

    2. Для людей которые ничего не знают кроме асма, или для людей которые вообще далеки от разработки, свойственна ошибка, что если всё написать на асме, то типо будет быстрее, круче и т.д.

    Это далеко не так, иначе все-бы и писали на ассемблере. Тут дело не только в удобстве, многие инструменты сами оптимизируют код, во многих инструментах уже есть встроенные средства безопасности и т.д.

    Также много зависит и от квалификации разработчика, например тут, да не только многие ругают PHP, ПРИ ЭТОМ ДАЖЕ НЕЗНАЯ ЧТО-ЭТО ТАКОЕ.

    Да там много школьников, т.к. рынок очень большой, много работы + относительно маленький порог вхождения. Но тем не менее, на пхп можно писать достаточно безопасный и быстрый код, сравнительный с ассемблером.

    Даже в качестве доказательства, что многие сайты, соц. сети и т.д. работают на пхп и никто даже не думают переписывать это на ассемблере. :)
     
  15. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    Ты прав и неправ одновременно..
    1. Прав, что асм неспособен ускорить всё и вся.
    2. Неправ, упоминая оптимизацию кода аки основной элемент производительности: к примеру, сервер БД имеет подавляющий лаг на дисковых операциях. С сервачом также крайне важно сколь эффективно работает манагер сетевой нагрузки.
     
  16. Олег

    Олег New Member

    Публикаций:
    0
    Регистрация:
    1 сен 2017
    Сообщения:
    10
    И где он нужен?? в ВУЗе школоту пугать? :scare2:
    Я не видел вариантов его применения (кроме небольших вставок) пока мне по воле случая в один из проектов не потребовалось прикрутить веб сервер на асме. Скорость произвела глубокое впечатление. И да, я прекрасно понимаю, что от одного слово "Ассемблер" да ещё в вебе, большинство "крутых специалистов" выпадет в осадок и прекратит диалог как минимум. Поэтому не нужно мне раскрывать глаза. Однако была надежда, что на форуме васм есть не стандартно мыслящие личности, но видимо это утопия, мейнстрим наше всё :declare:
    А еще бывает так, что люди далёкие от асма (tasm/masm/fasm в юности не считается) судят не известно на основании чего о его скоростных и иных характеристиках.
    Спасибо за ликбез кэп :good2:
    Я думаю, что дело не в удобстве, оптимизации или безопасности. Есть причины и поважней, например кроссплатформенность и более низкий порог вхождения. Вот например у меня на работе С/Спп с компиляцией без оптимизации, т.к. есть глюки трудноуловимые. И там нужна кроссплатформенность + надёжность, размер и скорость по остаточному принципу.
    Я лично против языка php ничего не имею, даже думаю его прикрутить как один из языков своей субд, но разумеется с компиляцией.
    Про "сравнительный с ассемблером" это 5 :haha:
    Наверное школьников и других низко квалифицированных специалистов много не из-за количества работы, а скорее из-за маленького порога вхождения ? Вообще тенденция существует придумывать языки всё более и более оторванные от железа и с как можно более низким порогом вхождения, чтобы любая домохозяйка могла писать программы. А в результате это обесценивает крутых специалистов, т.к. их можно заменить более дешевой рабсилой, ну а возникшие тормоза или ещё какие спецэффекты юзеры схавают и ещё спасибо скажут, если маркетологи верно подсуетятся.
    Однако в результате крупные соцсети работают не на пхп, а на си. Быть может из пхп переводили бы и на асм, но это сложнее намного, а сравнимого выхлопа наблюдаться не будет.
     
  17. X-Shar

    X-Shar Active Member

    Публикаций:
    0
    Регистрация:
    24 фев 2017
    Сообщения:
    354
    Это называется прогресс. Видел языки, где по блок-схеме уже писалась программа. Хотя язык сразу скажу, гавно ещё-то...:)

    Про обесценивание спецов, если спец. ничего не знает кроме-как что-то там кодить, то-да.

    Я уже несколько раз говорил, но повторюсь. ИМХО, "кодер" и "разработчик" это разный уровень.

    "Кодер" - Это человек, который кроме языка ничего не знает, а зачастую и язык толком незнает даже.

    "Разработчик" - Более квалифицированный спец., он может и не знать язык, зато знает и понимает отрасль, где работает.

    Поэтому важнее изучить сам процесс, где происходит разработка, т.е. архитектура систем, если системная какая-то разработка.

    Если это веб, то важнее знать паттерны разработки, сам-же пхп, или другой-любой язык изучить непроблема в целом.

    Опять-же это всего-лишь моё мнение. :)
     
  18. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    не путай кодера с быдлокодером :laugh1::laugh2::laugh3: оптимизация/безопасность кодов есь целая отдельная дисциплина. допустим, ты сильный математик и написал модельку в матлабе. Но вот незадача == моделька тормознутая. акь же ты такую траблу решать будешь 777 :)