кто хочет писать микросервисы?

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Кто-нибудь хочет написать со мной пару микросервисов?
Удаленка. График свободный, то есть любой, - как договоримся, так и будет.
ReactPHP/swoole/symfony microkernel, можно golang - но без ноды, пожалуйста :)
пока REST, перестанет получаться - станет rpc

рейт $10-20, depends

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

хотелось бы конечно, со знакомыми по клубу
 
Последнее редактирование:

флоппик

promotor fidei
Команда форума
Партнер клуба
Я бы попробовал мб. А то я последние полгода на жабаскрипте пишу в основном, и это слегка уже не ок, а очень утомительно.
 

fixxxer

К.О.
Партнер клуба
я последние полгода на жабаскрипте пишу в основном, и это слегка уже не ок, а очень утомительно
Как по мне, ReactPHP с его обязательными колбэками намного более утомителен, чем современный JS с async/await/rxjs.

Или речь о фронтенде? :)
 

fixxxer

К.О.
Партнер клуба
ReactPHP с его обязательными колбэками
Я тут подумал, а ведь в reactphp мы можем просто стопать цикл. Какая фиг разница, все равно это кооперативка же, а не треды.
Правда, не знаю, насколько из-за постоянных передергиваний цикла может просесть производительность, это надо проверять.

В общем, вот идея:
https://github.com/kbaryshnikov/reactphp-promise-await

сделал только ожидание единственного promise-а, всякие all(), race() итд можно сделать аналогично, если эта идея вообще имеет смысл. :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да, надеюсь, в 8ке это появится в языке

await нужен, конечно, для выпрямления последовательности написания кода, промисы без него тяжко заходят
если одинарный еще ниче, то пачка непредсказуемого размера в цикле, да с ограничением по размеру одновременно исполняемых задач - тяжело
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Правда, не знаю, насколько из-за постоянных передергиваний цикла может просесть производительность, это надо проверять.
Побенчил (php 7.1, pecl-ev, os x), с остановками цикла у меня получается процентов на 11-12 медленее:

Код:
» php bench.php
500000
Array
(
    [promises] => 3.2847988605499
    [awaits] => 3.708899974823
)
Учитывая, какой ад приходится писать на промисах для того же цикла, оно того стоит, в любом случае для типичного reactphp-приложения время ожидания событий в event loop значительно превышает время собственно исполнения php-кода. Иначе вообще надо писать на том же golang.
 
Последнее редактирование:

grigori

( ͡° ͜ʖ ͡°)
Команда форума
к сожалению, только в https://github.com/spatie/async сделали await

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

fixxxer

К.О.
Партнер клуба
await() = $pool->wait() = while (...) usleep(...), это несерьезно.

есть же генераторы
Ммм, ну, если сделать одну FSM на вообще все, и гонять ее на каждый tick... Наверное, сработает, но что-то мне подсказывает, что оверхед будет значительно выше, чем у моего костыля с остановкой цикла.
А если заниматься кодогенерацией а-ля babel - можно обойтись и без генераторов, хотя с ними проще, да. (Вообще кодогенерация для PHP - если уж рассматривать ее - сильно усложняется тем, что, в отличие от JS, надо генерить еще и блок use() для closures, что в общем случае вообще нерешаемая задача (extract($array) etc)).
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
у spatie/async другая цель - роутить тяжелые задачи воде обработки изображений между воркер-процессами
там этот usleep теряется просто

а для promiseAll напишешь? :)

Как по мне, ReactPHP с его обязательными колбэками намного более утомителен, чем современный JS с async/await/rxjs.
1. для php я уже поддерживаю образы, мне не нужен registry, и у меня нет опыта эксплуатации ноды - нелья просто взять официальный образ, надо жонглировать пакетами.
Если есть рабочий образ на dockerhub, в который можно подмонтировать приложение - то можно что угодно, но деплоить бинарными образами слишком сложно.

2. речь о микросервисах - пара endpoint-ов, какой-нибудь обсчет в фоне, очередь на редисе, и все
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
эта рекурсия меня всегда напрягала - у тебя хотя бы promisesCount есть, а если я не знаю количество?
была у меня в браузере, на ecma5 без async/await, обработка сотен тысяч записей каталога, которые приходили с сервера.
упрусь в размер стека вызовов, и все? в браузере цикл не остановить, решил через setTimeout
а для сервера решение прикольное

кстати, про кодогенерацию! вспомнил, где async реализована - https://preprocess.io/#async
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
эта рекурсия меня всегда напрягала - у тебя хотя бы promisesCount есть, а если я не знаю количество?
была у меня в браузере, на ecma5 без async/await, обработка сотен тысяч записей каталога, которые приходили с сервера.
упрусь в размер стека вызовов, и все? в браузере цикл не остановить, решил через setTimeout
Rxjs подобные штуки позволяет делать очень элегантно. Но его надо осилить сначала, это целый новый мир. :) (Для php тоже есть реализация Rx, кстати).

кстати, про кодогенерацию! вспомнил, где async реализована - https://preprocess.io/#async
Тут есть большая проблема - без IDE-плагина этим пользоваться затруднительно.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
любопытно, попробую осознать реактивное программирование

ты заходи, если что
 
Сверху