SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Сравнение AMQP и ZeroMQ


         Долгарев Александр
    Principal Engineer at Mirantis
       adolgarev@mirantis.com
  http://kharkovpromenade.com.ua/
О чем
 ●   Зачем это нужно и когда это не нужно
 ●   RabbitMQ Hellow world
 ●   Zmq Hellow world
 ●   Займемся делом: задача из жизни
 ●   Делаем на RabbitMQ: вид сверху
 ●   Делаем на Zmq: вид сбоку
 ●   Делаем на Zmq: HA, LB и блэкджек
 ●   Из опыта: RabbitMQ и Zmq – недостатки
05/05/2012                                   2
Зачем это нужно и когда это не
                  нужно



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




05/05/2012                              3
RabbitMQ Hellow world




05/05/2012                           4
RabbitMQ Hellow world




05/05/2012                           5
RabbitMQ Hellow world




05/05/2012                           6
Zmq: под капотом


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




05/05/2012                         7
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
Zmq типы сокетов: REQ, REP




05/05/2012                           9
Zmq типы сокетов: DEALER,
                     ROUTER




05/05/2012                               10
Займемся делом: задача из жизни
очень много
→
                                       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
Делаем: добавим брокер
очень много →



        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
Делаем на RabbitMQ: вид сверху




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




05/05/2012                              14
Делаем на Zmq: отправка и
               получение сообщений
               REQ
        App


                1) Message
                   2) OK

                                          ROUTER
                              Broker
                     ROUTER


                                  0) I am a websocket client for client N
                                              3) Message
                                                 4) OK



                                                                    App
                                                            REQ
05/05/2012                                                                  15
Делаем на 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
                                                                                     REQ

05/05/2012                                                                                           16
Делаем на 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
                                                           REQ

05/05/2012                                                                 17
Делаем на Zmq: persistence и
                 история
                             ●   Message
                                 history (local &
                                 fast)
                             ●   Persistent
                                 messages
                                 (remote &
                                 fsync & RAID)
                                 с помощью
                                 DRDB, AOE
                                 или nbd
05/05/2012                                   18
Из опыта: RabbitMQ - недостатки
 ●   Можно создать 50 способов доставки
     сообщения от источника к получателю, но
     если у вас 51-й случай, то у вас проблемы
 ●   Используется round-robin, если нужно что-то
     сложнее, то у вас проблемы
 ●   HA и LB есть из коробки, но они далеко не
     идеальны, у вас опять проблемы
 ●   Только TCP, если нужно что-то сложнее
     (reliable multicast), то у вас проблемы

05/05/2012                                         19
Из опыта: Zmq - недостатки
 ●   Нужно многое писать с нуля
 ●   Безопасность нужно осуществлять либо на
     уровень ниже (впн и т.п.) либо на уровень
     выше (средствами протокола прикладного
     уровня)
 ●   Год назад еще была неставильной, но
     ситуация улучшается



05/05/2012                                       20
Вывод
 ●   Нужно ли вам почтовое отделение?
 ●   RabbitMQ годится в 95% случаев, но как
     дело доходит до продакшн, то приходится
     допиливать напильником, что еще сложнее
     чем в случае с созданием своего решения
     поверх zmq




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




05/05/2012                          22

Weitere ähnliche Inhalte

Andere mochten auch

Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
Как сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиКак сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиAndrew Mayorov
 
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"Andrew Mayorov
 
Alexander Serbul - Development and administration through testing - cloud ser...
Alexander Serbul - Development and administration through testing - cloud ser...Alexander Serbul - Development and administration through testing - cloud ser...
Alexander Serbul - Development and administration through testing - cloud ser...Andrew Mayorov
 
Roman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureRoman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureAndrew Mayorov
 
Производительность и энергопотребление мобильных приложений на примере Window...
Производительность и энергопотребление мобильных приложений на примере Window...Производительность и энергопотребление мобильных приложений на примере Window...
Производительность и энергопотребление мобильных приложений на примере Window...Andrew Mayorov
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Andrew Mayorov
 
Построение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БДПостроение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БДAndrew Mayorov
 
Banana Shelf Life Testing
Banana Shelf Life TestingBanana Shelf Life Testing
Banana Shelf Life Testingshubhamchandra
 
об удобстве иерархических структур данных
об удобстве иерархических структур данныхоб удобстве иерархических структур данных
об удобстве иерархических структур данныхAndrew Mayorov
 
(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)Internews Ukraine
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?Andrew Mayorov
 

Andere mochten auch (14)

Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Как сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиКак сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпути
 
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
 
Alexander Serbul - Development and administration through testing - cloud ser...
Alexander Serbul - Development and administration through testing - cloud ser...Alexander Serbul - Development and administration through testing - cloud ser...
Alexander Serbul - Development and administration through testing - cloud ser...
 
Roman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureRoman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows Azure
 
Производительность и энергопотребление мобильных приложений на примере Window...
Производительность и энергопотребление мобильных приложений на примере Window...Производительность и энергопотребление мобильных приложений на примере Window...
Производительность и энергопотребление мобильных приложений на примере Window...
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.
 
Построение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БДПостроение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БД
 
Asad C.V
Asad C.VAsad C.V
Asad C.V
 
Banana Shelf Life Testing
Banana Shelf Life TestingBanana Shelf Life Testing
Banana Shelf Life Testing
 
об удобстве иерархических структур данных
об удобстве иерархических структур данныхоб удобстве иерархических структур данных
об удобстве иерархических структур данных
 
(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?
 
Xslt
XsltXslt
Xslt
 

Alexander Dolgarev "Comparizon of AMQP and Zero MQ"

  • 1. Сравнение AMQP и ZeroMQ Долгарев Александр Principal Engineer at Mirantis adolgarev@mirantis.com http://kharkovpromenade.com.ua/
  • 2. О чем ● Зачем это нужно и когда это не нужно ● RabbitMQ Hellow world ● Zmq Hellow world ● Займемся делом: задача из жизни ● Делаем на RabbitMQ: вид сверху ● Делаем на Zmq: вид сбоку ● Делаем на Zmq: HA, LB и блэкджек ● Из опыта: RabbitMQ и Zmq – недостатки 05/05/2012 2
  • 3. Зачем это нужно и когда это не нужно ● Аналогия с почтой (sound only) 05/05/2012 3
  • 7. Zmq: под капотом ● Сокет на стероидах 05/05/2012 7
  • 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. Zmq типы сокетов: REQ, REP 05/05/2012 9
  • 10. Zmq типы сокетов: DEALER, ROUTER 05/05/2012 10
  • 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. Делаем: добавим брокер очень много → 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. Делаем на RabbitMQ: вид сверху 05/05/2012 13
  • 14. Делаем на Zmq: вид сбоку 05/05/2012 14
  • 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 REQ 05/05/2012 15
  • 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 REQ 05/05/2012 16
  • 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 REQ 05/05/2012 17
  • 18. Делаем на Zmq: persistence и история ● Message history (local & fast) ● Persistent messages (remote & fsync & RAID) с помощью DRDB, AOE или nbd 05/05/2012 18
  • 19. Из опыта: RabbitMQ - недостатки ● Можно создать 50 способов доставки сообщения от источника к получателю, но если у вас 51-й случай, то у вас проблемы ● Используется round-robin, если нужно что-то сложнее, то у вас проблемы ● HA и LB есть из коробки, но они далеко не идеальны, у вас опять проблемы ● Только TCP, если нужно что-то сложнее (reliable multicast), то у вас проблемы 05/05/2012 19
  • 20. Из опыта: Zmq - недостатки ● Нужно многое писать с нуля ● Безопасность нужно осуществлять либо на уровень ниже (впн и т.п.) либо на уровень выше (средствами протокола прикладного уровня) ● Год назад еще была неставильной, но ситуация улучшается 05/05/2012 20
  • 21. Вывод ● Нужно ли вам почтовое отделение? ● RabbitMQ годится в 95% случаев, но как дело доходит до продакшн, то приходится допиливать напильником, что еще сложнее чем в случае с созданием своего решения поверх zmq 05/05/2012 21
  • 22. Спасибо за внимание, поставьте куда-нибудь оценку 05/05/2012 22