Fork me on GitHub
#clojure-russia
<
2016-11-05
>
be904:11:32

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

be904:11:10

а я пожелаю всем хороших выходных 🙂

niquola10:11:51

@be9 кроме того, что это очередь и будет крон - еще требования есть?

be910:11:02

без использования сторонних сервисов типа Amazon SQS

be910:11:56

управляемый повтор, если исполнение свалилось с exception

a.espolov10:11:10

@be9 immutant.message и immutant.scheduling не подходят?

be910:11:12

я когда-то смотрел на него, меня испугала зависимость от JBoss

be910:11:54

я люблю легкие решения, а тут как-то энтерпрайзненько получается

a.espolov10:11:47

1. jboss уже нет давно 2. без контейнера это просто библиотеки

be910:11:53

в описании последнего релиза на http://immutant.org/ JBoss-таки поминается

a.espolov11:11:28

jboss переименовали во wildfly, а то что есть на главной странице относится к приблуде JBoss EAP 7, а она денег стоит.

a.espolov11:11:50

сам immutant может работать как в контейнер так и без

be911:11:06

ясно. поглядел в доки. а где этот HornetQ держит очереди?

be911:11:20

(т.е. что случится при падении/рестарте)

a.espolov11:11:42

в файловой системе

a.espolov11:11:00

опять таки если не ошибаюсь

be911:11:40

я сам еще вспомнил про http://kr.github.io/beanstalkd/ , к которому есть clojure-клиент. никто не пользовал?

a.espolov11:11:50

be9: судя по примеру далеко на этом не уедешь

be911:11:43

пока еще вопрос, получится ли взлететь с immutant 🙂

be911:11:55

и вообще, есть другие решения?

mike_ananev11:11:26

@be9 RabbitMQ используем для таких задач (если не бигдата)

niquola11:11:02

А нагрузка большая планируется?

niquola11:11:04

Что уже есть в системе - pg, redis?

niquola11:11:10

Ты можешь собрать очередь на чем угодно - начиная с rdbms - вопрос нагрузки и того что есть - дабы не плодить

be911:11:29

основная база pg

be911:11:36

нагрузка маленькая

be911:11:56

редис тоже есть

niquola11:11:24

Ну и собери на pg ;)

niquola11:11:24

Будет транзакционность целостность

be911:11:37

собрать очередь я могу на чём угодно, просто времени нет и хочется готовое решение взять

niquola11:11:49

Так не бывает ;)

niquola11:11:22

Собрать ненагруженную очередь на pg дело одного дня

niquola11:11:47

Ковыряться и подключать кролика или Хорнет - дольше

be911:11:51

а хорнет — это внешняя какая-то хрень, т.е. immutant — клиент к нему?

niquola11:11:16

Это типа rabbitmq, но для jboss stack

niquola11:11:42

Сделай табличку jobs со своими полями - в один поток поль ее и исполняй в транзакции 🙂

niquola11:11:06

Когда будет несколько серверов - будешь локи расставлять

niquola11:11:57

Технические моменты можешь в https://github.com/QueueClassic/queue_classic подсмотреть

be911:11:23

да, к QueueClassic я в своё время свою обёртку на Ruby писал

be911:11:41

оно не умело retry failed jobs

be911:11:44

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

niquola11:11:00

Ну думаю раза в 3-4 больше времени потратишь - этож надо еще деплоить

be911:11:05

деплоить самого кролика?

niquola11:11:21

персистеть, backupить, синкать с основной базой etc

be911:11:25

кстати, вопрос. как лучше хранить clojure-данные в PG? EDN -> Text или EDN -> Transit -> JSONB? 😄

niquola11:11:57

clj -> jsonb (по transit сложно будет искать) доп типы ручками промапишь

be911:11:21

а приспособы для ручного мапления есть? (кроме update-in 😄 )

niquola12:11:20

Ну тебе нужно схему написать какую нибудь - типа в этом поле дата - а потом коэрсить

niquola12:11:22

jsonb -> hash-map of strings, vectors and numbers -> schema-coerce -> more convenient hash-map

niquola12:11:39

prismatic умел коэрсить

be912:11:39

о, это хорошо

be912:11:05

а через что сейчас хорошо с PG работать? я какое-то время назад пробовал suricatta и hugsql, но оба не доставили на 100%

niquola12:11:54

мы используем honeysql + https://github.com/niquola/clj-pg

be912:11:58

тесты посмотрел, но README хорошего не хватает 🙂

be912:11:54

а миграции чем делаете?

niquola12:11:57

Самописное - там есть вроде от weavejester https://github.com/weavejester/ragtime