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

5,517 views

Published on

1 Comment
11 Likes
Statistics
Notes
No Downloads
Views
Total views
5,517
On SlideShare
0
From Embeds
0
Number of Embeds
180
Actions
Shares
0
Downloads
25
Comments
1
Likes
11
Embeds 0
No embeds

No notes for slide

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

  1. 1. Сравнение AMQP и ZeroMQ Долгарев Александр Principal Engineer at Mirantis adolgarev@mirantis.com http://kharkovpromenade.com.ua/
  2. 2. О чем ● Зачем это нужно и когда это не нужно ● RabbitMQ Hellow world ● Zmq Hellow world ● Займемся делом: задача из жизни ● Делаем на RabbitMQ: вид сверху ● Делаем на Zmq: вид сбоку ● Делаем на Zmq: HA, LB и блэкджек ● Из опыта: RabbitMQ и Zmq – недостатки05/05/2012 2
  3. 3. Зачем это нужно и когда это не нужно ● Аналогия с почтой (sound only)05/05/2012 3
  4. 4. RabbitMQ Hellow world05/05/2012 4
  5. 5. RabbitMQ Hellow world05/05/2012 5
  6. 6. RabbitMQ Hellow world05/05/2012 6
  7. 7. Zmq: под капотом ● Сокет на стероидах05/05/2012 7
  8. 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);05/05/2012 8
  9. 9. Zmq типы сокетов: REQ, REP05/05/2012 9
  10. 10. Zmq типы сокетов: DEALER, ROUTER05/05/2012 10
  11. 11. Займемся делом: задача из жизниочень много→ 1) Выполнить задачу Websocket backend 2) Задача запущена Manager 7) Задача выполнена ↑ очень много 3) Выполнить подзадачу 1 2) Задача запущена 4) Подзадача 1 выполнена 4) Подзадача 1 выполнена 7) Задача выполнена 6) Подзадача 2 выполнена 5) Выполнить подзадачу 2 6) Подзадача 2 выполнена Event logger Appliance 4) Подзадача 1 выполнена 6) Подзадача 2 выполнена Subtask1 executor Subtask2 executor ← очень05/05/2012 много 11
  12. 12. Делаем: добавим брокерочень много → Websocket backend Manager 2) Задача запущена 3) Выполнить подзадачу 1 ↑ 1) Выполнить задачу 5) Выполнить подзадачу 2 очень много 7) Задача выполнена Broker 4) Подзадача 1 выполнена 6) Подзадача 2 выполнена Event logger Appliance Subtask1 executor ← очень много 05/05/2012 Subtask2 executor 12
  13. 13. Делаем на RabbitMQ: вид сверху05/05/2012 13
  14. 14. Делаем на Zmq: вид сбоку05/05/2012 14
  15. 15. Делаем на Zmq: отправка и получение сообщений REQ App 1) Message 2) OK ROUTER Broker ROUTER 0) I am a websocket client for client N 3) Message 4) OK App REQ05/05/2012 15
  16. 16. Делаем на Zmq: LB REQ App ● Zmq обеспечивает 1) Message 2) OK равномерное распределение Broker ROUTER запросов ROUTER → n ai Dom 0) I am a websocket client for client N r1 3) Message fo s 4) OK IP 2 ← Broker App REQ05/05/2012 16
  17. 17. Делаем на Zmq: HA (это не LB!) App REQ ● Если не получен OK от 1) Message брокера, то 2) OK пересылаем Broker ROUTER сообщение ROUTER Linux heartbear & Virtual IP → 0) I am a websocket client for client N 3) Message 4) OK Backup Broker App REQ05/05/2012 17
  18. 18. Делаем на Zmq: persistence и история ● Message history (local & fast) ● Persistent messages (remote & fsync & RAID) с помощью DRDB, AOE или nbd05/05/2012 18
  19. 19. Из опыта: RabbitMQ - недостатки ● Можно создать 50 способов доставки сообщения от источника к получателю, но если у вас 51-й случай, то у вас проблемы ● Используется round-robin, если нужно что-то сложнее, то у вас проблемы ● HA и LB есть из коробки, но они далеко не идеальны, у вас опять проблемы ● Только TCP, если нужно что-то сложнее (reliable multicast), то у вас проблемы05/05/2012 19
  20. 20. Из опыта: Zmq - недостатки ● Нужно многое писать с нуля ● Безопасность нужно осуществлять либо на уровень ниже (впн и т.п.) либо на уровень выше (средствами протокола прикладного уровня) ● Год назад еще была неставильной, но ситуация улучшается05/05/2012 20
  21. 21. Вывод ● Нужно ли вам почтовое отделение? ● RabbitMQ годится в 95% случаев, но как дело доходит до продакшн, то приходится допиливать напильником, что еще сложнее чем в случае с созданием своего решения поверх zmq05/05/2012 21
  22. 22. Спасибо за внимание, поставьте куда-нибудь оценку05/05/2012 22

×