22
Сравнение AMQP и ZeroMQ Долгарев Александр Principal Engineer at Mirantis [email protected] http://kharkovpromenade.com.ua/

Alexander Dolgarev "Comparizon of AMQP and Zero MQ"

Embed Size (px)

Citation preview

Page 1: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

Сравнение AMQP и ZeroMQ

Долгарев АлександрPrincipal Engineer at Mirantis

[email protected]://kharkovpromenade.com.ua/

Page 2: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 2

О чем● Зачем это нужно и когда это не нужно● RabbitMQ Hellow world● Zmq Hellow world● Займемся делом: задача из жизни● Делаем на RabbitMQ: вид сверху● Делаем на Zmq: вид сбоку● Делаем на Zmq: HA, LB и блэкджек● Из опыта: RabbitMQ и Zmq – недостатки

Page 3: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 3

Зачем это нужно и когда это не нужно

● Аналогия с почтой (sound only)

Page 4: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 4

RabbitMQ Hellow world

Page 5: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 5

RabbitMQ Hellow world

Page 6: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 6

RabbitMQ Hellow world

Page 7: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 7

Zmq: под капотом

● Сокет на стероидах

Page 8: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 8

Zmq Hellow world

● void *responder = zmq_socket (context, ZMQ_REP);

● zmq_bind (responder, "tcp://*:5555");● zmq_recv (responder, &request, 0);● zmq_send (responder, &reply, 0);● zmq_close (responder);

Page 9: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 9

Zmq типы сокетов: REQ, REP

Page 10: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 10

Zmq типы сокетов: DEALER, ROUTER

Page 11: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 11

Займемся делом: задача из жизни

Websocket backend Manager

Event logger

Appliance

Subtask1 executor

Subtask2 executor

1) Выполнить задачу2) Задача запущена

7) Задача выполнена

3) Выполнить подзадачу 14) Подзадача 1 выполнена5) Выполнить подзадачу 26) Подзадача 2 выполнена

4) Подзадача 1 выполнена6) Подзадача 2 выполнена

4) Подзадача 1 выполнена6) Подзадача 2 выполнена

2) Задача запущена7) Задача выполнена

← очень много

очень много →

↑очень много

Page 12: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 12

Делаем: добавим брокер

Websocket backend Manager

Event loggerAppliance

Subtask1 executor

Subtask2 executor

← очень много

очень много →

↑очень много

Broker

1) Выполнить задачу

2) Задача запущена3) Выполнить подзадачу 15) Выполнить подзадачу 2

7) Задача выполнена

4) Подзадача 1 выполнена6) Подзадача 2 выполнена

Page 13: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 13

Делаем на RabbitMQ: вид сверху

Page 14: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 14

Делаем на Zmq: вид сбоку

Page 15: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 15

Делаем на Zmq: отправка и получение сообщений

Broker

App

App

0) I am a websocket client for client N3) Message

4) OK

1) Message2) OK

REQ

REQ

ROUTER

ROUTER

Page 16: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 16

Делаем на Zmq: LB● Zmq обеспечивает равномерное распределение запросовBroker

App

App

0) I am a websocket client for client N3) Message

4) OK

1) Message2) OK

REQ

REQ

ROUTER

ROUTER

Broker

← 2

IPs f

or 1 D

omain →

Page 17: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 17

Делаем на Zmq: HA (это не LB!)

Broker

App

App

0) I am a websocket client for client N3) Message

4) OK

1) Message2) OK

REQ

REQ

ROUTER

ROUTER

BackupBroker

Linux heartbear& Virtual IP →

● Если не получен OK от брокера, то пересылаем сообщение

Page 18: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 18

Делаем на Zmq: persistence и история

● Message history (local & fast)

● Persistent messages (remote & fsync & RAID) с помощью DRDB, AOE или nbd

Page 19: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 19

Из опыта: RabbitMQ - недостатки

● Можно создать 50 способов доставки сообщения от источника к получателю, но если у вас 51-й случай, то у вас проблемы

● Используется round-robin, если нужно что-то сложнее, то у вас проблемы

● HA и LB есть из коробки, но они далеко не идеальны, у вас опять проблемы

● Только TCP, если нужно что-то сложнее (reliable multicast), то у вас проблемы

Page 20: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 20

Из опыта: Zmq - недостатки

● Нужно многое писать с нуля● Безопасность нужно осуществлять либо на

уровень ниже (впн и т.п.) либо на уровень выше (средствами протокола прикладного уровня)

● Год назад еще была неставильной, но ситуация улучшается

Page 21: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 21

Вывод

● Нужно ли вам почтовое отделение?● RabbitMQ годится в 95% случаев, но как

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

Page 22: Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"

05/05/2012 22

Спасибо за внимание, поставьте куда-нибудь оценку