
Александр
05.01.2017
18:21:50
вешай воркера который индексирует из базы нужные поля
с подтверждением

Dmitry
05.01.2017
18:22:01
Так а статья есть какая, или нету?

Александр
05.01.2017
18:22:03
и у тебя всё будет консистентно

Google

redbeard
05.01.2017
18:22:48
до пулов для вытягивания еще не добрались? :)
в эластик можно пихать чанками или только поточно, один за другим?

Александр
05.01.2017
18:24:19
можно и bulk загрузку и один за другим
просто у меня в поиске я ещё обновляю данные в рилтайме которые изменились
обычно я перезагружаю целиком, но есть пара проектов где несколько миллионов документов которые обновляются постоянно, там с рабитом как я выше описал
статьи нет, мы с коллегой как-то самобытно к этому пути пришли
не пользовался, но идея интересная
не, там внизу написано что не гарантируют запись
так что либо из кода, либо асинхронно с подтверждением

Dmitry
05.01.2017
18:48:08
Так в результате вот смотри: есть у тебя миллион документов в pg и эластике. Пришёл запрос - один изменить. Тогда из контроллера пилишь в psql и эластик. А зачем брокер?

Александр
05.01.2017
18:51:12
у меня товары сгруппированы в группы и можно из поиска целую группу отключить

Google

Александр
05.01.2017
18:51:36
брокер нужен чтобы эта операция не тревожила пользователя который отключает группу
если одного обновлять конечно же не нужно никаких брокеров, в транзакцию обернул и всё будет хорошо

Dmitry
05.01.2017
18:53:23
Да, так вот и вопрос - как сделать чтобы если в pg прошло а в elastic - нет, оно всю транзакцию завернуло
Или наоборот догнало

Александр
05.01.2017
18:54:38
а ещё, кстати, брокер даёт такой эффект что если эластик не доступен по какой либо причине, то в него всё равно запишется потом

Dmitry
05.01.2017
18:54:50
Ну короче чтоб согласованные данные были там и там

anton
05.01.2017
18:55:13

Dmitry
05.01.2017
18:55:43
Если такое делать в эликсире, брокер из коробки- не знаю как в рельсах

Александр
05.01.2017
18:56:12
раббит это не только брокер, это также мониторинг
персистентные очереди
сложный роутинг
авторизация

Dmitry
05.01.2017
18:56:42
Тут можно вообще впилить в psql и полгода в эластик запихивать, отдав сразу респонс

anton
05.01.2017
18:56:43
+ наличие множества клиентов под разные языки

Александр
05.01.2017
18:56:48
я бы не стал сам его реализовывать, несмотря на видео что выше кидали (хорошее видео, кстати =) )

anton
05.01.2017
18:57:09
можешь писать в рабит с рельсов
читать воркером на эликсире

Dmitry
05.01.2017
18:57:49
Можно написать воркер на эликсире и сайт на эликсире и использовать ets или мнезию

Александр
05.01.2017
18:57:59
проблема, почему не сделали плагин для psql, думаю в том что у ES схема есть и она немаловажна
непонятно как её описывать
мнезия, кстати, очень необычная база
я не пользовался, но там куча фич уникальных по выборкам

Google

anton
05.01.2017
18:59:30

Александр
05.01.2017
19:00:42
ну наверное вы правы, при работе с эликсиром и эрлангом очень мало задач где может пригодиться раббит

Dmitry
05.01.2017
19:00:55
Но все равно я не понимаю: вот к примеру принимаю из rabbit сигнал, что мне нужно put в эластик. А она не доступна. И как мне rabbit поможет?
Я скажу ему - забери сообщение своё обратно, пришли когда эластик будет доступен?

Александр
05.01.2017
19:01:52
там есть подтверждения что задача выполнена

anton
05.01.2017
19:02:04
у раббита персистентная очередь может быть реализована с lock & delete
типа если не получилось в эластик положить - не удаляй сообщ. из очереди
через ретрай полиси повторишь попытку

Александр
05.01.2017
19:02:09
то есть твой воркер берёт у раббита задачу и должен сообщить что обработал её
если произошла ошибка, воркер просто говорит что задача не подошла и спит
потом снова берёт и пробует поновой

Dmitry
05.01.2017
19:03:20
Классная реализация

anton
05.01.2017
19:03:22

Dmitry
05.01.2017
19:03:54
Меня волнует крэш в любом месте моего воркера

Александр
05.01.2017
19:04:17
пока он не подтвердил что задача выполнена, сообщение останется в очереди

Dmitry
05.01.2017
19:04:18
Тогда как я понимаю, после рестарта я заново получаю то же задание

Александр
05.01.2017
19:04:30
воркер перезапустишь он его снова попробует обработать
по мониторингу видно сколько консумеров онлайн
так что если это значение меняется, значит они рестартят

Dmitry
05.01.2017
19:05:09
А через редис такое можно? Чёт в падлу ещё один процесс в стэк пихать

Александр
05.01.2017
19:05:18
если конечно чего-то посерьёзнее нету для мониторинга
с редисом всё сложно, во первых он теряет задачи при перезапуске

Google

Александр
05.01.2017
19:05:46
если я не ошибаюсь
во вторых там подтверждения нет
то есть он отдал и забыл

Арсений
05.01.2017
19:06:07
Теряет если не успел сбросить на диск

Александр
05.01.2017
19:06:07
и тебе за этим надо следить самостоятельно

anton
05.01.2017
19:06:20

Dmitry
05.01.2017
19:06:26
А в эликсире такое можно сделать интересно...
Если посылать на пид сообщение - то оно потеряется на крэше

Александр
05.01.2017
19:07:04
https://www.rabbitmq.com/tutorials/tutorial-two-python.html
вот тут про Message acknowledgment

Dmitry
05.01.2017
19:07:32
Можно конечно peek и pop в ets

Admin
ERROR: S client not available

anton
05.01.2017
19:07:37

Dmitry
05.01.2017
19:07:46
Но ets сам не персистентный
Если нода упадёт- гуляй Вася

anton
05.01.2017
19:08:08
ну у тебя что упадет, совсем всё?
а.. нода

Александр
05.01.2017
19:08:27
rabbitmq в mnesia сохраняет durable задачи

anton
05.01.2017
19:08:29
ну тогда мнезия, реплицировать её.. но кажется это не самое быстрое решение для очереди будет

Dmitry
05.01.2017
19:08:57
По идее необходима персистентность на уровне внезапного рестарта тачки

Александр
05.01.2017
19:08:57
ну тут надо выбирать между сверхнадёжностью и производительностью

Google

Dmitry
05.01.2017
19:09:07
Но репликация конечно решает
Две тачки за раз - я готов на такую надёжность

anton
05.01.2017
19:10:04
Дима, с другой стороны - у тебя же кейс чисто бросить задачу на то, что бы запихать новое в эластик?
ну если нода крахнется, после поднятия попроси перечитать всё и обновить данные в еластике

Dmitry
05.01.2017
19:10:17
Да, так и есть

Арсений
05.01.2017
19:10:35
Тоже самое хотел написать. Это же индексация, не так страшно если где то потеряется таска на индексацию

Dmitry
05.01.2017
19:10:38
После краша ноды перемндексировать всю базу в эластике

Арсений
05.01.2017
19:10:57
И городить реплекацию для такой задачи смысла мало

Dmitry
05.01.2017
19:11:11
По другому никак кстати

Арсений
05.01.2017
19:11:15
Если конечно у тебя не каждые два часа машина будет ребутиться

Dmitry
05.01.2017
19:11:29
Походу надо как минимум раз в сутки с нуля переиндексировывать и так

Арсений
05.01.2017
19:12:46
Зачем? Можно просто дописывать туда то что нужно по мере необходимости

Dmitry
05.01.2017
19:13:06
Да, но как понять что просрал?

Арсений
05.01.2017
19:13:33
Если у тебя данные не realtime то просто запускаешь по крону, если realtime вешаешь хуки. Ты можешь мониторинг настроить за тасками

Dmitry
05.01.2017
19:13:34
Или просто забить на это)) ну не нашёл 1 товар из миллиона - хрен с ним

Арсений
05.01.2017
19:13:46
Не знаю как в RabbitMQ но в celery это просто все делается

anton
05.01.2017
19:13:56

Dmitry
05.01.2017
19:14:41
Ну, есть один на миллион шанс что я просру именно его)
Походу контакт так делает кстати. В поиске человека нету, реально - есть

Александр
05.01.2017
19:15:48
ну у раббита durable сообщения же есть которые он в мнезию пишет, от рестарта тачки это спасёт
по производительности, всё субъективно

anton
05.01.2017
19:16:17
блин, сижу в чатике про эликсир, у самого проект на скале/акке открыт в идее, а на работе на шарпе пишу..
чувствую себя неуютно как-то.

Dmitry
05.01.2017
19:16:31
Какая разница блин
Все равно обсуждаем эластик , брокеры и персистентность