timo-71

Рейтинг
63
Регистрация
19.09.2018
ArbNet #:
ведь люди думают, а чего это он действительно не делает на тех инструментах которые есть и обсуждение переходит в деструктивное русло..

Да не. В деструктивное русло разговор переходит после заявлений, типа

ArbNet #:
Мне хочется делать сайты\проекты именно на таком инструменте, а не каком то джанге или прочем шлаке..

При том, что ни одного аргумента, чем несуществующий инструмент круче той же джанги нет. А джанга при этом - шлак. Я не сторонник джанги. Но, несправедливо 😒

Простой пример. Aisamiery, просто сказал попробую так. По мне, так реально круто. Ваша реакция - шлак.  Если на похожем основании зачислено в шлак все остальное - печаль.

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 минут склеить скрины в гимпе.

<?php

use 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  
ArbNet #:
но это неоптимальное решение ИМХО

Если даже цифры не убеждают... Хозяин-барин🤪

И да, странно, что с такой логикой вы PHP выбрали, а не написали свое - оптимально😀

ArbNet #:
и неоптимальное использование ресурсов компьютера

Так вам и показали инструмент, который непосредственно и влияет на оптимальность.

Вы даже не испробовав, пустились в рассуждение, почему этого не может быть. А она, оптимальность, очевидно, что тут есть.


php-fpm vs workerman. 6 как минимум процессов в среднем 22мб у php-fpm (дефолтные настройки, не помню pm сколько там по дефолту), против 4 в среднем 15мб. Это на задаче "хелло ворд".

<?php
echo "<b>oooooooo</b>";
exit();

vs
...
$connection->send(<b>oooooooo</b>);

При усложнении, догадаетесь, что будет оптимальней - прочитать 1 раз ваш xml или при каждом запросе?


ArbNet #:
так как это просто интерпретатор который сам работает на сервере

Дался вам интерпретатор.


Итерпретировался при старте в процессы с 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

Итог

Теперь этот объект доступен без запроса в базу. Хоть всю бд в память положи🤣

ArbNet #:
А зачем на сервере на интерпретируемом языке делать имитацию сервера

Всегда можно проверить🧐

ab -n 2000 -c 500 http://...   2000 запросов с конкурентностью 500, ( одновременных)

nginx+php-fpm

Concurrency Level:      500
Complete requests:      2000
Failed 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:      2000
Failed requests:        0

Non 200 нет

Видно, что пхп-фпм процессов больше. Там конечно можно pm.max_children и прочими поиграть и нон-200 исключить, но процессов станет больше. А и так  нагрузка на систему от пхп-фпм больше.

Aisamiery #:
Но все равно не все там так гладко

У всех плюсы/минусы.

Наверное лучший вариант.

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;


Aisamiery #:

В этом и суть готовых инструментов, разве нет? Но я как раз хочу пощупать немного другую парадигму, непривычную для php, а соответственно тут даже не все драйвера под это подойдут, ваш фреймворк точно не запустится =))) Вот что то из этой серии https://github.com/walkor/workerman

Как только я спрыгнул с php😒

Круто👍



ставится 6сек, php-fpm на свалку. Правда до async  не дошел, но пхп конкурентен

ArbNet #:
А на существующих фреймворках каждый раз под каждый конкретный случай надо писать обработчики\классы и тд., у меня же это будет делаться просто указанием инструкций в XML.
Думаю, у любого, разработчика на всякий стандартный случай, почти всегда, готовое решение есть. Писать приходится под нестандартную логику. У вас ИИ под капотом? Тогда, что вы про XML да XML? Пишите про то, что ваш ИИ поймет как обработать любой, самый замысловатый import.xml 1с.

ArbNet #:
Да, у меня что-то типа интерпретатора.

Ну и интерпретатором php выполняете свой интерпретатор. Где то лишние сущности. Не находите?

То, что современный хтмл документ сильно усложняется, это всем понятно. Теперь  модель

"урл/тайтл/дескрипшн/контент/последние новости/с этим ищут еще" не всегда катит. А дальше будет больше. Так что, может лучше сосредоточиться на чем то другом.

Тем более, львиную долю вашего xml, можно впихнуть в шаблон, который как правило хорошо документирован

{% if topslider %}
  {{ topslider | safe }}
{% endif

Всего: 541