Да не. В деструктивное русло разговор переходит после заявлений, типа
При том, что ни одного аргумента, чем несуществующий инструмент круче той же джанги нет. А джанга при этом - шлак. Я не сторонник джанги. Но, несправедливо 😒
Простой пример. Aisamiery, просто сказал попробую так. По мне, так реально круто. Ваша реакция - шлак. Если на похожем основании зачислено в шлак все остальное - печаль.
Проще можно, какую то демку положить (минимум). Но и там можно обломаться, когда вдруг какой то шлаковый твиг или шлаковая джинджа дают возможность кастомных js/css. А на любой урл (видимо узел) есть app.add_routes. Где можно получить кастомных js/css из xml/yaml/csv/txt/mysql/sqlite/mongo/redis/postgre. Одним словом - откуда угодно. К своему стыду не все испробовал.
systemctl status clickhouse-server ● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data) Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: disabled)
Ну и, все что нужно понимать по вопросу интерпретатора эмулятора над эмулятором интерпретатора.
Все на коленке, 6 минут + 15 минут склеить скрины в гимпе.
<?phpuse Workerman\Worker;require_once __DIR__ . '/vendor/autoload.php';$http_worker = new Worker('http://0.0.0.0:2345');$http_worker->count = 4;$x = file_get_contents('/home/www_data/old_centos_www/www/1c/public/1cbitrix-05c5afb2-2d4c-4453-bea7-8925c9c100ce.xml');$x = new SimpleXMLElement($x);$http_worker->onMessage = function ($connection, $request) use ($x) { $connection->send(print_r($x, 1));};Worker::runAll();
<?php$x = file_get_contents('/home/www_data/old_centos_www/www/1c/public/1cbitrix-05c5afb2-2d4c-4453-bea7-8925c9c100ce.xml');$x = new SimpleXMLElement($x);print_r($x);exit();
Результат:
ab -n 5000 -c 100
РПС 5,6к против 2,8к. По моему все, что было и так очевидно, стало очевидно окончательно.
ab -n 5000 -c 500 ( 500 одновременных )
php-fpm сошел с дистанции, ибо 4162 нон 200 из 5000.
Зы добалю ТОПа (больше актуально для WorkerMan, не опух ли процесс)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 59719 www 20 0 472940 22936 14700 S 0,0 0,1 0:00.00 WorkerMan: master process start_file=/var/www/php_sock/app.php 59720 www 20 0 472940 16460 8204 S 0,0 0,1 0:04.70 WorkerMan: worker process none http://0.0.0.0:2345 59721 www 20 0 472940 16460 8204 S 0,0 0,1 0:04.62 WorkerMan: worker process none http://0.0.0.0:2345 59722 www 20 0 474988 17284 8340 S 0,0 0,1 0:04.58 WorkerMan: worker process none http://0.0.0.0:2345 59723 www 20 0 472940 13912 5656 S 0,0 0,1 0:04.67 WorkerMan: worker process none http://0.0.0.0:2345
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 50091 root 20 0 488728 33892 27608 S 0,0 0,2 0:00.20 php-fpm: master process (/etc/php-fpm.conf) 50094 www 20 0 505932 23156 15500 S 0,0 0,1 0:02.61 php-fpm: pool www 50095 www 20 0 505924 23448 15792 S 0,0 0,1 0:02.62 php-fpm: pool www 50096 www 20 0 505936 25088 17516 S 0,0 0,2 0:02.63 php-fpm: pool www 50097 www 20 0 505856 24160 16516 S 0,0 0,2 0:02.61 php-fpm: pool www 50098 www 20 0 506012 24368 16708 S 0,0 0,2 0:02.64 php-fpm: pool www 50305 www 20 0 505936 25160 17548 S 0,0 0,2 0:02.62 php-fpm: pool www 59848 www 20 0 505828 23320 15852 S 0,0 0,1 0:01.51 php-fpm: pool www 59935 www 20 0 505828 23328 15852 S 0,0 0,1 0:01.10 php-fpm: pool www 59936 www 20 0 505828 22840 15380 S 0,0 0,1 0:00.39 php-fpm: pool www 59937 www 20 0 505828 22876 15408 S 0,0 0,1 0:00.39 php-fpm: pool www
Если даже цифры не убеждают... Хозяин-барин🤪
И да, странно, что с такой логикой вы PHP выбрали, а не написали свое - оптимально😀
Так вам и показали инструмент, который непосредственно и влияет на оптимальность.
Вы даже не испробовав, пустились в рассуждение, почему этого не может быть. А она, оптимальность, очевидно, что тут есть.
php-fpm vs workerman. 6 как минимум процессов в среднем 22мб у php-fpm (дефолтные настройки, не помню pm сколько там по дефолту), против 4 в среднем 15мб. Это на задаче "хелло ворд".
<?phpecho "<b>oooooooo</b>";exit();vs...$connection->send(<b>oooooooo</b>);
При усложнении, догадаетесь, что будет оптимальней - прочитать 1 раз ваш xml или при каждом запросе?
Дался вам интерпретатор.
Итерпретировался при старте в процессы с PID 73324-238. Абсолютно на равных правах с процессами php-fpm
То что вам словами упорно пытался объяснить Aisamiery попытаюсь примером. Воркерманом не владею. Но, принципы очень похожи с аиохттп.
В момент старта приложения
async def on_startup(app): #Read conf data -> app.cnf : CIMultiDict await Cnf(BASE_PATH,app) #Redis support -> app.db_engine : ConnectionsPool await create_redis_pool(app) #Mongodb support -> app.db_engine : AsyncIOMotorDatabase await create_aiodb(app) #Получим гео данные (1 раз при старте приложения) app.cnf['geo_sub'] = {} async for doc in app.db_engine.geo_sub.find({}): app.cnf['geo_sub'][doc['_id']] = doc
Итог
Теперь этот объект доступен без запроса в базу. Хоть всю бд в память положи🤣
Всегда можно проверить🧐
ab -n 2000 -c 500 http://... 2000 запросов с конкурентностью 500, ( одновременных)
nginx+php-fpm
Concurrency Level: 500Complete requests: 2000Failed requests: 952 (Connect: 0, Receive: 0, Length: 952, Exceptions: 0)Non-2xx responses: 952
952 запроса, что то типа того
2021/08/07 10:38:03 [error] 1861#1861: *88395 connect() to unix:/var/run/php-fpm/www.sock failed (11: Resource temporarily unavailable) while connecting to upstream, client: 127.0.0.1, server: ~^(.*?)\.?(?<d_name>[^\.]+)\.php$, request: "GET / HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm/www.sock:", host: "p.php"
nginx +upstream server 0.0.0.0:2345
Complete requests: 2000Failed requests: 0
Non 200 нет
Видно, что пхп-фпм процессов больше. Там конечно можно pm.max_children и прочими поиграть и нон-200 исключить, но процессов станет больше. А и так нагрузка на систему от пхп-фпм больше.
У всех плюсы/минусы.
Наверное лучший вариант.
upstream php_async { server 0.0.0.0:2345 fail_timeout=0;}upstream goland { server 0.0.0.0:9990 fail_timeout=0;}upstream aiohttp_n { server unix:/tmp/app_1.sock fail_timeout=0; server unix:/tmp/app_2.sock fail_timeout=0; #server 0.0.0.0:8081 fail_timeout=0;
В этом и суть готовых инструментов, разве нет? Но я как раз хочу пощупать немного другую парадигму, непривычную для php, а соответственно тут даже не все драйвера под это подойдут, ваш фреймворк точно не запустится =))) Вот что то из этой серии https://github.com/walkor/workerman
Как только я спрыгнул с php😒
Круто👍
ставится 6сек, php-fpm на свалку. Правда до async не дошел, но пхп конкурентен
Ну и интерпретатором php выполняете свой интерпретатор. Где то лишние сущности. Не находите?
То, что современный хтмл документ сильно усложняется, это всем понятно. Теперь модель
"урл/тайтл/дескрипшн/контент/последние новости/с этим ищут еще" не всегда катит. А дальше будет больше. Так что, может лучше сосредоточиться на чем то другом.
Тем более, львиную долю вашего xml, можно впихнуть в шаблон, который как правило хорошо документирован
{% if topslider %} {{ topslider | safe }}{% endif