@phpclubru

Страница 634 из 956
Pavel
27.07.2018
18:28:03
Вот TS мне нравится

Кстати да, если бы e-loop набросать на TS было бы круто

Plomipu
27.07.2018
19:20:45
может просто глюк а по факту все работает
я уже попробовал конвертировать картинку через ПО magick. Сработало. Осталось тока это сделать через php либу imagick.

Dmitry
27.07.2018
23:12:32
а вот задачка, есть редиска и есть консьюмер делающий sub на изменение ключей или какой-то структуры. Получив некий id он консьюмер что то делает.

Google
Dmitry
27.07.2018
23:13:33
когда этот id удаляют из редиски - перестает делать

ну id может быть много, вот как этот консьюмер масштабировать...

или все же слушать кролика, а редис только для персиста оставить

Artem
28.07.2018
06:24:30
ну id может быть много, вот как этот консьюмер масштабировать...
в лоб просто реплики создаешь и Sentinel как LB а дальше на каждую реплику свой консьюмер.

Dmitry
28.07.2018
07:16:11
реплики чего и где у редиски LB?

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

Artem
28.07.2018
07:36:45
это я с утра так хорошо выражаю мысли) под репликами я понимал в данном случае просто инстансы, с разным состоянием конечно (ну т.е. не реплики совсем:)), а LB, как раз sentinel вместо него https://redis.io/topics/sentinel

там логику LB все равно свою придется писать но он свои боксы добавляет и там конфиги настраиваемые + мониторинг, т.е. почти все уже есть с коробки. Как оно на самом деле я не очень знаю, поскольку не пользовался, он просто у меня в списке попробовать стоит и хочу куда -то прикрутить) Но это вроде как родное решение для редиски и должно быть самым простым

Dmitry
28.07.2018
07:48:08
консьюмер не родное для редиски, все равно мониторить его самим... балансить по редисам, что бы балансить по консьюмерам... ну можно, но оверхедом выглядит...

не мой вариант по крайнкй мере, сложно получается

Artem
28.07.2018
07:53:19
ну тогда тебе просто в докер заворачивать (в теории если ты не хочешь редисы разделять то можно просто консьюмера образ, но тогда синхронизация сложней будет) и через kubernetes (или что -то подобное) по загрузке поднимать образы

Dmitry
28.07.2018
07:56:50
да проблема не в этом... пробоема в том, как дистрибутить id... ибо никто не знает число нод... ну ладно, дистрибутить могу кроликом, хрен с подпиской у редиски, в редиску складываю стейт... но как потом этот стейт разгребать то после перезапуска нод

Artem
28.07.2018
07:59:22
ну так sentinel умеет паралельно все обрабатывать и хранит состояние после рестарта

Google
Artem
28.07.2018
08:00:44
хотя не факт, он точно из конфига состояние востанавливает, а вот текущее состояние вернуть будет сложно

Dmitry
28.07.2018
08:00:47
ну лежит у меня там 10к idшников, я стартую 5 консьюмеров, им нужно взять каждому свой стейт...

Artem
28.07.2018
08:02:29
ну как в sentinel тут я хз, хоть и надеюсь что он по боксам держит состояние. А почему тогда тебе просто не взять докер образы с консьюмером и закешировать, просто из кеша поднимаешься когда упал и все

если консьюмеров несколько у них у всех свой кеш и свое состояние. можно даже что то для глобального держать отдельно

Dmitry
28.07.2018
08:03:55
ну тогда, например, число консьюмеров так просто не уменьшить

Artem
28.07.2018
08:05:56
sentinel кстати тут как минимум поможет тем, что он мониторит же операции все, и можно просто логи парсить и куда то id шники бекапить. А уменьшать тебе и не нужно, если kubernetes он же сам по ограничениям будет смотреть и либо поднимать либо убивать инстансы. Но придется отдельно логику описывать, если данные где -то остались, но идет простой -перекидывать в другой инстанс

но это все как то сложно выглядит. и просто нереально поддерживать. проще консьюмера код разделять на сервисы и их уже по мере надобности масштабировать

Dmitry
28.07.2018
08:07:27
у меня один сервис который нужно балансить

Artem
28.07.2018
08:09:15
ну так если у него одна задача то просто дели на образы и любой инструмент который умеет автоматом следить за состоянием и поднимать/убивать. Просто чуть сложней правила будут, поскольку придется иногда состояние синхронизировать, хз может при рестарте смотреть кеш и какие -то объединять

Dmitry
28.07.2018
08:10:38
ну наверное само приложение должно уметь восстанавливать стейт свой... вот как раз вопрос в том, что считать своим...

Artem
28.07.2018
08:11:04
тебе для начала нужно просто запустить пару консьюмеров отдельно и посмотреть как они себя вести будут. Если у них общего состояния нет, то никаких проблем, ты можешь просто добавить логику graceful shutdown и перед смертью его скидывать куда то данные, а рестарт делать как угодно.

т.е. хотя бекапы все равно нужны, но переложишь логику востановления состояния куда -то отдельно

Dmitry
28.07.2018
08:11:53
я и так знаю какие у них состояния :) это список id

Artem
28.07.2018
08:12:37
тебе просто нужно какой -то сервис держать между редисом и консьюмером, который будет кеш хранить и как то бекапить/востанавливать данные

Dmitry
28.07.2018
08:12:54
а редис на что

он и хранит данные

Artem
28.07.2018
08:14:09
ну так если вопрос в масштабировании консьюмера, то тебе нужно именно консьюмера разделять. И тебе полюбому нужно где то кеш держать с мапингом, какие данные кому, они будут протухать или просто часть места пустая будет. Вот этот сервис и будет их перенаправлять на разных консьюмеров, редис тут вообще не важен он сам по себе же жить будет

Dmitry
28.07.2018
08:14:22
просто если у каждого консьюмера стейт свой - теряем возможность менять число консьюмеров... вернее уменьшать

если стейт общий, то вопоос в том, как делить данные

Artem
28.07.2018
08:15:26
так тут и будет этот сервис работать. Если уменьшаешь число консьюмеров, он просто пересчитывает на кого разделить данные, и вообще все логика именно мапинга всего скопа данных с редиса между инстансами там.

Google
Artem
28.07.2018
08:15:37
а так как хочешь хоть по проценту загрузки хоть по len() )))

да просто ограничения на клиента можно поставить или адрес машины/образа с консьюмером

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

и лучше отдельный, чтобы всегда можно было его на что -то заменить

Dmitry
28.07.2018
08:19:20
да понял, менеджера хочешь, но как-то усложнение излишнее

Artem
28.07.2018
08:22:07
ну иначе тебе придется логику в консьюмеров добавлять. а она им не нужна совершенно, они же должны только получать id, а кто -то должен решать сколько id им дать и когда.

по хорошему тебе нужно посмотреть что -то вроде terraform, он довольно сложные конфиги поддерживает и вполне возможно что логику этого менеджера можно туда переложить.

Dmitry
28.07.2018
09:23:13
о, придумал, по шатдауну консьюмер будет все свои id выкидывать на шину, и пусть другие их разбирают

Artem
28.07.2018
09:30:13
Ну да и надо учесть что шатдаун не всегда бывает запланирован и они должны кому -то говорить о том, сколько взяли. Ну и делать это все транзакциями. и тебе все равно состояние нужно востанавливать после сбоев, т.е. какой -то кеш будет нужен. Вот только завязывая всю логику внутри консьюмера ты обрекаешь процессы изменения и расширения в атракцион :)

Dmitry
28.07.2018
09:35:31
незапланированный шатаун - это упал и был поднят мониторингом и подхватил свой стейт из редиса. Мена вопрос запланированного шатдауна интересовал, когда мы число нод хотим уменьшить

Artem
28.07.2018
09:57:47
ну по сути ты можешь просто на базе редиса сделать очередь и просто оттуда консьюмерами забирать id, а если нужно уменьшить число, добавь в очередь приоритеты и просто ставь слитые id с убитых консьюмеров в верх списка

Dmitry
28.07.2018
10:11:03
редис не умеет балансить сообщения вроде

Dmitry
28.07.2018
10:11:44
а если пулить, что уже не айс, то еще состояние гонки решать

Artem
28.07.2018
10:12:57
ну так есть же пакеты вроде https://github.com/gabfl/redis-priority-queue/tree/master/clients/php

да и свой сделать в принципе не сложно

Dmitry
28.07.2018
10:31:24
делать очередь на редис вообще не вижу причин, у меня кролик есть была идея совместить хранение стейта и оповещение консьюмера - т.е не консьюмер сбрасывает стейт, а задачи ставятся добавлением в редис, о чем приходит сообщение в консьюмер и он просто перечитывает список задач из редиса. Редис умеет слать сообщения об изменении ключей

но балансировать это как-то сложно получается, лучше возьму кролика

Artem
28.07.2018
10:38:50
ну как минимум это выглядит самым простым вариантом, а пытаться прикрутить что -то сложное не упираясь в какие то ограничения наверно странно

тут ктонибудь с aliexpress работал? нифига не пойму где там и что включить чтобы эти гады мне токен дали. Портал их с методами api нашел, но там пишут > To register as a developer, simply sign up for an AliExpress.com account и че? ну сигнапнулся я и куда тыкать так и не понял...

Fly
28.07.2018
16:24:02
Добрый день! Тут можно вопрос по php задать? Я просто написал в одном чате, а меня сразу почему-то забанили, вопрос не сложный для бывалых, но я гуглил пол дня, сдался, не могу решить.

Google
Fly
28.07.2018
16:30:15
Задача следующая, надо выковырять картинку из страницы, но сложность в том, что она без https и в конце лишниее расширение добавлено: Вот кусок кода страницы: <span class="pimg"> <img onerror="_errIMG_(this)" src="//img12.server.com/s800x800_jfs/asdasd123.jpg.dpg" width="44" height="38" /> </span> Я выковыриваю ссылку следующим методом: $pageOfGood = getPage($link); //Тут выковыриваю ссылку до .dpg" preg_match('/onerror="_errIMG_(this)" src="(.+?).dpg"/s',$pageOfGood, $matches); // а тут пытаюсь добавить вначале строки выковырянной ссылки https: чтобы ссылка получилась полной. $a = 'https:'; $linkToImg = $a . $matches[1]; Вот у меня сильные сомнения по поводу того, что я правильно соединяю строку, чтобы получить полную ссылку?

Pavel
28.07.2018
17:32:09
ну id может быть много, вот как этот консьюмер масштабировать...
А просто сделать очередь из list и повесить на нее слушать 100 консьюмеров нельзя чтоли?

Dmitry
28.07.2018
17:32:43
ну не

у редиса нет rr консюмеров, да вопрос то не в этом, а в том, как хранить консюмеру id с которыми он работает

Pavel
28.07.2018
17:35:30
Можно в редисе хранить ?

Admin
ERROR: S client not available

Dmitry
28.07.2018
17:35:54
не в чем, а как

Pavel
28.07.2018
17:36:08
rr это round robin? Как раз консьюмеры так и работают там

Вернее консьюмер приходит, ждет пока в списке не появится задача, берет ее. И так они по очереди ждут задач.

Вызовы атомарные и блокирующиеся.

Dmitry
28.07.2018
17:39:21
что значит "ждет"? постоянно опрашивает?

а, блокирующийся вызов.... это какой?

Pavel
28.07.2018
17:40:31
Blpop если я правильно помню

что значит "ждет"? постоянно опрашивает?
Нет, висит на этой команде и ждет просто

Они могут кучей так висеть на списке и ждать пока там появятся элементы. Новый элемент будет атомарно отдан только одному консьюмеру

Dmitry
28.07.2018
17:42:30
ок, но все еще не о том, вопрос не в том, как накидать задач консьюмерам

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

BLPOP никак не решает хранение стейта

а раз не решает, то мне фиолетово, задачи будут редисом ставиться или кроликом, кролик в общем предпочтительнее

Google
Pavel
28.07.2018
17:45:31
Так то да

Но зачем совмещать хранение стейта с получением задач. Этим и кролик не занимается

Dmitry
28.07.2018
17:47:00
ну редис умеет слать события при изменении ключей

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

Pavel
28.07.2018
17:48:53
Да, звучит странно и я не понимаю

Dmitry
28.07.2018
17:49:54
ну что такое стейт... это список id с которыми работает консьюмер.... стейт нужно сохранять в редисе, что бы после перезапуска - работа продолжалась, да?

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

Но от этой идеи я отказался уже.

основная задача сейчас как минимальными силами обеспечить 1. подхват задач в случае падения (не важно каким консюмером), 2. скейл числа консьюмеров в обе стороны

нюанс в том, что одна задача (работа с одним id) длится около часа-двух

прерывать ее можно но не более чем на минуту

dypa
28.07.2018
19:28:32
не в чем, а как
можешь написать исходную задачу в личку? листать 2 дня обсуждений по 2м чатам не очень хочется

Dmitry
28.07.2018
19:31:07
да в общем вот она, три сообщения последних ;) есть консьюмеры куда попадают id (т.е. есть некая задача другими словами), они с ними работают как-то

dypa
28.07.2018
19:38:15
задача может быть разделена на части? задача является транзикцией?

dypa
28.07.2018
19:43:39
основная задача сейчас как минимальными силами обеспечить 1. подхват задач в случае падения (не важно каким консюмером), 2. скейл числа консьюмеров в обе стороны
а со скейлом в чем проблема? процесс должен создаваться, отдавать свой pid и свое состояние. процесс должен уметь по сигналу завершать процесс. можно запариться и запихать в докер - там уже решили эту проблему

Dmitry
28.07.2018
19:43:57
задача может быть разделена на части? задача является транзикцией?
по сути задача - это анализ tcp стрима внешнего... часть данных пропустить можно, т.е. прерваться можно, сделать дисконнект и обратно коннект, но паузу небольшую

Страница 634 из 956