- Главная
- Документация
- Описание WEB панели игрового сервера
- Приложения
- Фреймворк (ядро) Моя Фантазия - описание и системные требования
Фреймворк (ядро) Моя Фантазия - описание и системные требования
Для создания любого продукта первым встает выбора скелета проекта на котором он будет работать (фреймворк)
Он должен отвечать требованиям по скорости работы, простоты работы с ним программистами и функциональными возможностями. В настоящее время популярные фреймворки имеют множество зависимостей от сторонних библиотек и , как это часто бывает, из за обще направленности чрезмерно сложные , обладающим функционалом который может никогда не пригодится.
Данный проект - Российский и сделан с уклоном на простоту работы с ним, с минимальным набором зависимостей от других библиотек учитывая опыт работы с западными системами. На данном проекте сделан этот сайт с его сервисами и проекты которые на нем опубликованы
В настоящее время на данном фреймворке ведется разработка проекта для внесения онлайн в игры - подробнее имеется пример ранней версии в github
Краткий обзор:
1 Легкий в освоении (фреймворк состоит из ряда фаилов в папке core/)
2 Архитектура основана на сервисах (независимые приложения в папке app/) легко переводимые на микросервисы (расположенные физически на разных серверах)
3 MVC (разделение кода и представления) паттерн
4 Передерживание принципа SOLID
5 Cледование стандартам PSR
6 Современные шаблоны проектирования (фабрика, синглтон, декоратор, адаптер и тп)
7 Скорость работы (нагрузочное тестирование показало в x30 более быстрый результат чем на фреймворках Symfony/Laravel)
8 Свой собственная ORM/DBAL (гибридный принцип Database First и Object First основанный не на аннотациях классов, а на ключах БД и именовании полей), есть плагин для работы с XML
9 При разработке используются практики современных фреймворков (Symphone, Laravel, Yii)
10 Минимум зависимостей: проект использует лишь то, что реально нужно (легко отслеживать просадки в скорости, потребление памяти, особенно в CLI режиме с многопоточными приложениями)
11 Для администрирования игрового мира используется веб сервис (Аналог CMS для сайтов и CRM для взаимодействия с пользователями)
Используемые технологии:
- PHP 8 (Reflection, Closure, Cli)
- Mysql 8 с поддержкой асинхронной работы
- Parallel (работа на разных ядрах процессора)
- Поддержка скриптов на языке LUA
- Поддержка скриптов на языке JavaScript
- GIT интеграция CI/CD
- PostgreSql (добавлен адаптер на перспективу)
- Bootstrap 3
- Smarty
- Redis с поддержкой асинхронной работы
- APCU
- Doctrine (DBAL, ORM, поддержка принципа Object First поддерживается, на перспективу)
- Symfony компоненты (в перспективе, например тч кеш)
- JQuery
- Асинхронный сервер Workerman
- Composer
- Apache (RewriteEngine) , (можно использовать Nginx)
На базе данного каркаса было успешно сделано множество приложений (сервис контейнеров) как для моих личных проектов (онлайн игры) так и для компаний в которых было необходимо в сжатые сроки разработать прототипы приложений MVP (CMS, CRM, ERP ...)
Сравнительные тесты CORE (ядра) фреймворка от 02.2021
Результат нагрузочного тестирования HTTP запросами для обычного сайта, указан в в миллисекундах (1 секунда = 1000 миллисекунд).
Инструменты SoapUI, 50 потоков, 5 секунд, кеш отключен) на страницу 404.
На Данном примере видно что помимо нагрузки на сервер имеет место тот факт что Laravel и Symfony не успевают освобождать FPM Child (стандартные php fpm с max_children = 5) и создается очередь ожидания освобождения процесса FPM .
Тем самым даже при увеличении числа max_children до достаточного что бы обработать все запросы параллельно скорость выполнения каждого будет равна параметру "min" в табличке ниже на сервере где производилось тестирование. На более мощных серверах и при использовании кэш показатели Symfony и Laravel можно улучшить в Х10 , но не стоит забывать что и показатели фреймворка "Моя Фантазия" вырастут пропорционально. Скорость Symfony и Laravel обусловлена большим количеством библиотек и overhead на роутинг http запросов
Однако скорость обработки запросов в секунду ограничена скоростью HTTP соединений (который работает на базе TCP) и работой самого PHP FPM . Выбрав медленное из них из данных выше можно сделать вывод что 2 миллисекунды (0.002 секунды) на сервере тестирования занимала скорость поднятия такого соединения и она не будет меньше на нем (те чистый результат работы PHP составляя min - 2 )
Laravel 8 : min 266 max 1730 avg 1077
Symfony 5 : min 574 max 4400 avg 2571
"Моя Фантазия" фреймворк : min 7 max 45 avg 10