SlideShare a Scribd company logo
1 of 25
Технологии и подходы в разработке высоконагруженных приложений
Часть 1. Брокеры сообщений
Attributes
•
•
•
•
•

Distributed system
Horizontal scaling
Constant response time
Loose coupling
Reliability
Message broker
• is an intermediary program which translates the language of a system from one
Globally acceptable languages to another by way of a telecommunications medium
• is an architectural pattern for message validation, message transformation and
message routing
Name

Implementation Protocols
language

License

OS

Current
version

RabbitMQ Erlang

AMQP

Mozilla Public
License 1.1

Windows, Linux, OS X,
VxWorks

3.2.3

Apache
Java
ActiveMQ

JMS 1.1,
OpenWire,
REST,
Stomp,
WS Notification,
XMPP,
AMQP 1.0

Apache 2.0

Windows, OS X, Linux,
Solaris (any with JDK ≥ 5.0)

5.9.0

Apache
Qpid

Java, C++

AMQP

Apache 2.0

Windows, Debian, Fedora

0.24

SonicMQ

Java

JMS 1.1, J2EE 1.4,
XML, SOAP

Proprietary

Windows, RHEL, SuSE, AIX,
HP-UX

MSMQ

C++

MSMQ

Windows
component

Windows (95 - Server 2012)

5.0

ZeroMQ

C++

ZMTP

LGPLv3+

Linux, Windows, OS X

4.0.3
Cloud services
• Amazon SNS
• Windows Azure ServiceBus
• IronMQ (iron.io)
Advanced Message Queuing Protocol (AMQP)
• Open protocol,
• V 0.9.1 – Nov. 2008, v 1.0 – Oct. 2011
• Bank of America, Cisco Systems, Progress Software, JPMorgan Chase, Microsoft
Corporation, Novell, Red Hat, VMware and others
Exchange, Binding, Queue
Terms
• Durable queue survives after broker restart
• Persistent messages are written to disk
• Per-Queue Message TTL determines how long an unconsumed message can live in a
queue before it is automatically deleted
• Per-Message TTL determines the TTL on a per-message basis
• Queue TTL determines how long an unused queue can live before it is automatically
deleted

• Message acknowledgments are turned on by default
• Nack (or Reject) = discard message or requeue itDead Letter Exchanges - messages
can be republished to another exchange when:
• The message is rejected (Nack or Reject) with requeue=false
• The TTL for the message expires
• The queue length limit is exceeded
Topic exchange
• Routing based on a pattern (a.b.c.d)
• * - 1 word, # - 0..N words
Direct exchange
• Routing based on a key
Fanout exchange
• Routing key is ignored
• Fast
• Broadcast
Other exchange types
• Headers exchange - Routing based on message header content
• RabbitMQ: Custom exchanges for even message distribution between queues:
• consistent-hash
• x-random
RabbitMQ – AMQP v. 0.9.1+
Clustering
Several RabbitMQ servers on a local network can be clustered together, forming a
single logical broker.
Highly Available Queues
Queues can be mirrored across several machines in a cluster, ensuring that even in the
event of hardware failure your messages are safe.
Many Clients
There are RabbitMQ clients for almost any language you can think of.
Management UI
RabbitMQ ships with an easy-to use management UI that allows you to monitor and
control every aspect of your message broker.
Rabbit + .NET = ?
• RabbitMQ.Client*
• Burrow.NET
• EasyNetQ
Reliability
Failover (= fail-over) обход отказа, обработка *ситуации+ отказа в кластерных
конфигурациях - способность системы автоматически эластично реагировать на
отказ какого-либо устройства, разрыв связи и т. п., переключаясь на другое
(обычно резервное или находящееся в состоянии ожидания)
Loose coupling
Publish-subscribe (публикация/подписка) - отправители сообщений отправляют их
не конкретным получателям, а публикуют их в специальных каналах, не зная о
том, сколько и какие подписчики у этого канала. Подписчики же, проявляют
интерес к одному или нескольким каналам, из которых получают сообщения,
соответствующие их интересам, не задумываясь об отправителях. Подобное
разделение отправителей (публикующих) и получателей (подписчиков) позволяет
достигать большей масштабируемости и более динамичную топологию сети
Pattern: interoperability
Pattern: asynchronous processing / smoothing
• For each request we only validate it and immediately return response, process later
Pattern: publish-subscribe, broadcasting
• Notify different subsystems about an event
Изобретаем велосипед очередь
• Хранилище сообщений
• Оповещение о постановке сообщения в очередь
ServiceStack.RedisMQ
Azure ServiceBus

AMQP 1.0 is a much more narrow standard than the 0.9.1. It only defines the network wire-level protocol for the exchange of messages
between two endpoints.
Consumer code

PeekLock – default
ReceiveAndDelete
Масштабирование в Azure
1 очередь < 500 rpm
QUESTION AND ANSWER PERIOD

More Related Content

Similar to Технологии и подходы в разработке высоконагруженных приложений

Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Ontico
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Tanya Denisyuk
 
Spread Zaytsev3
Spread Zaytsev3Spread Zaytsev3
Spread Zaytsev3Ontico
 
Локальная и глобальные сети
Локальная и глобальные сетиЛокальная и глобальные сети
Локальная и глобальные сетиKirill1999
 
Matrix: a pragmatic decentralized messenger
Matrix: a pragmatic decentralized messengerMatrix: a pragmatic decentralized messenger
Matrix: a pragmatic decentralized messengerIvanShapovalov
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Lenvendo
 
Сетевое оборудование ETegro Technologies
Сетевое оборудование ETegro TechnologiesСетевое оборудование ETegro Technologies
Сетевое оборудование ETegro TechnologiesETegro Technologies
 
Алексей Котов. "Разделяй и властвуй". IT-пятница, октябрь 2018
Алексей Котов. "Разделяй и властвуй". IT-пятница, октябрь 2018Алексей Котов. "Разделяй и властвуй". IT-пятница, октябрь 2018
Алексей Котов. "Разделяй и властвуй". IT-пятница, октябрь 2018GigaCloud
 
ук 03.011.01 2011
ук 03.011.01 2011ук 03.011.01 2011
ук 03.011.01 2011etyumentcev
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Ontico
 
Функциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridФункциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridАрсений Жижелев
 
Отечественные решения на базе SDN и NFV для телеком-операторов
Отечественные решения на базе SDN и NFV для телеком-операторовОтечественные решения на базе SDN и NFV для телеком-операторов
Отечественные решения на базе SDN и NFV для телеком-операторовARCCN
 
Обзор файловой системы GlusterFS
Обзор файловой системы GlusterFSОбзор файловой системы GlusterFS
Обзор файловой системы GlusterFSOSLL
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Ontico
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...DevDay
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Ontico
 

Similar to Технологии и подходы в разработке высоконагруженных приложений (20)

Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
Nutanix Acropolis - облако на базе KVM под ключ, Максим Шапошников (Nutanix)
 
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
Дмитрий Лазаренко-«Живая миграция и отказоустойчивость контейнеров в гибридно...
 
Spread Zaytsev3
Spread Zaytsev3Spread Zaytsev3
Spread Zaytsev3
 
Локальная и глобальные сети
Локальная и глобальные сетиЛокальная и глобальные сети
Локальная и глобальные сети
 
Matrix: a pragmatic decentralized messenger
Matrix: a pragmatic decentralized messengerMatrix: a pragmatic decentralized messenger
Matrix: a pragmatic decentralized messenger
 
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
Конференция Highload++ 2014, "Инструменты высоконагруженных проектов: кеширов...
 
Сетевые службы
Сетевые службыСетевые службы
Сетевые службы
 
Сетевое оборудование ETegro Technologies
Сетевое оборудование ETegro TechnologiesСетевое оборудование ETegro Technologies
Сетевое оборудование ETegro Technologies
 
Алексей Котов. "Разделяй и властвуй". IT-пятница, октябрь 2018
Алексей Котов. "Разделяй и властвуй". IT-пятница, октябрь 2018Алексей Котов. "Разделяй и властвуй". IT-пятница, октябрь 2018
Алексей Котов. "Разделяй и властвуй". IT-пятница, октябрь 2018
 
ук 03.011.01 2011
ук 03.011.01 2011ук 03.011.01 2011
ук 03.011.01 2011
 
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
Использование асинхронной очереди сообщений в высоконагруженном проекте / Анд...
 
Функциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridФункциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGrid
 
Отечественные решения на базе SDN и NFV для телеком-операторов
Отечественные решения на базе SDN и NFV для телеком-операторовОтечественные решения на базе SDN и NFV для телеком-операторов
Отечественные решения на базе SDN и NFV для телеком-операторов
 
Comp seti2
Comp seti2Comp seti2
Comp seti2
 
Обзор файловой системы GlusterFS
Обзор файловой системы GlusterFSОбзор файловой системы GlusterFS
Обзор файловой системы GlusterFS
 
SDN технологии
SDN технологииSDN технологии
SDN технологии
 
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
Инструменты высоконагруженных проектов - кэширование и очереди, Вячеслав Моск...
 
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...Платформа для автоматического тестирования Erlang проектов на примере UserGat...
Платформа для автоматического тестирования Erlang проектов на примере UserGat...
 
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
Использование 0MQ для построения распределёных систем (Андрей Охлопков, Алекс...
 
Softswitch datasheet
Softswitch datasheetSoftswitch datasheet
Softswitch datasheet
 

More from Olga Lavrentieva

15 10-22 altoros-fact_sheet_st_v4
15 10-22 altoros-fact_sheet_st_v415 10-22 altoros-fact_sheet_st_v4
15 10-22 altoros-fact_sheet_st_v4Olga Lavrentieva
 
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive Performance
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive PerformanceСергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive Performance
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive PerformanceOlga Lavrentieva
 
Андрей Козлов (Altoros): Оптимизация производительности Cassandra
Андрей Козлов (Altoros): Оптимизация производительности CassandraАндрей Козлов (Altoros): Оптимизация производительности Cassandra
Андрей Козлов (Altoros): Оптимизация производительности CassandraOlga Lavrentieva
 
Владимир Иванов (Oracle): Java: прошлое и будущее
Владимир Иванов (Oracle): Java: прошлое и будущееВладимир Иванов (Oracle): Java: прошлое и будущее
Владимир Иванов (Oracle): Java: прошлое и будущееOlga Lavrentieva
 
Brug - Web push notification
Brug  - Web push notificationBrug  - Web push notification
Brug - Web push notificationOlga Lavrentieva
 
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"Olga Lavrentieva
 
Максим Жилинский: "Контейнеры: под капотом"
Максим Жилинский: "Контейнеры: под капотом"Максим Жилинский: "Контейнеры: под капотом"
Максим Жилинский: "Контейнеры: под капотом"Olga Lavrentieva
 
Александр Протасеня: "PayPal. Различные способы интеграции"
Александр Протасеня: "PayPal. Различные способы интеграции"Александр Протасеня: "PayPal. Различные способы интеграции"
Александр Протасеня: "PayPal. Различные способы интеграции"Olga Lavrentieva
 
Сергей Черничков: "Интеграция платежных систем в .Net приложения"
Сергей Черничков: "Интеграция платежных систем в .Net приложения"Сергей Черничков: "Интеграция платежных систем в .Net приложения"
Сергей Черничков: "Интеграция платежных систем в .Net приложения"Olga Lavrentieva
 
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...Антон Шемерей «Single responsibility principle в руби или почему instanceclas...
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...Olga Lavrentieva
 
Егор Воробьёв: «Ruby internals»
Егор Воробьёв: «Ruby internals»Егор Воробьёв: «Ruby internals»
Егор Воробьёв: «Ruby internals»Olga Lavrentieva
 
Андрей Колешко «Что не так с Rails»
Андрей Колешко «Что не так с Rails»Андрей Колешко «Что не так с Rails»
Андрей Колешко «Что не так с Rails»Olga Lavrentieva
 
Дмитрий Савицкий «Ruby Anti Magic Shield»
Дмитрий Савицкий «Ruby Anti Magic Shield»Дмитрий Савицкий «Ruby Anti Magic Shield»
Дмитрий Савицкий «Ruby Anti Magic Shield»Olga Lavrentieva
 
Сергей Алексеев «Парное программирование. Удаленно»
Сергей Алексеев «Парное программирование. Удаленно»Сергей Алексеев «Парное программирование. Удаленно»
Сергей Алексеев «Парное программирование. Удаленно»Olga Lavrentieva
 
«Почему Spark отнюдь не так хорош»
«Почему Spark отнюдь не так хорош»«Почему Spark отнюдь не так хорош»
«Почему Spark отнюдь не так хорош»Olga Lavrentieva
 
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»Olga Lavrentieva
 
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»«Практика построения высокодоступного решения на базе Cloud Foundry Paas»
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»Olga Lavrentieva
 
«Дизайн продвинутых нереляционных схем для Big Data»
«Дизайн продвинутых нереляционных схем для Big Data»«Дизайн продвинутых нереляционных схем для Big Data»
«Дизайн продвинутых нереляционных схем для Big Data»Olga Lavrentieva
 
«Обзор возможностей Open cv»
«Обзор возможностей Open cv»«Обзор возможностей Open cv»
«Обзор возможностей Open cv»Olga Lavrentieva
 
«Нужно больше шин! Eventbus based framework vertx.io»
«Нужно больше шин! Eventbus based framework vertx.io»«Нужно больше шин! Eventbus based framework vertx.io»
«Нужно больше шин! Eventbus based framework vertx.io»Olga Lavrentieva
 

More from Olga Lavrentieva (20)

15 10-22 altoros-fact_sheet_st_v4
15 10-22 altoros-fact_sheet_st_v415 10-22 altoros-fact_sheet_st_v4
15 10-22 altoros-fact_sheet_st_v4
 
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive Performance
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive PerformanceСергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive Performance
Сергей Ковалёв (Altoros): Practical Steps to Improve Apache Hive Performance
 
Андрей Козлов (Altoros): Оптимизация производительности Cassandra
Андрей Козлов (Altoros): Оптимизация производительности CassandraАндрей Козлов (Altoros): Оптимизация производительности Cassandra
Андрей Козлов (Altoros): Оптимизация производительности Cassandra
 
Владимир Иванов (Oracle): Java: прошлое и будущее
Владимир Иванов (Oracle): Java: прошлое и будущееВладимир Иванов (Oracle): Java: прошлое и будущее
Владимир Иванов (Oracle): Java: прошлое и будущее
 
Brug - Web push notification
Brug  - Web push notificationBrug  - Web push notification
Brug - Web push notification
 
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"
Александр Ломов: "Reactjs + Haskell + Cloud Foundry = Love"
 
Максим Жилинский: "Контейнеры: под капотом"
Максим Жилинский: "Контейнеры: под капотом"Максим Жилинский: "Контейнеры: под капотом"
Максим Жилинский: "Контейнеры: под капотом"
 
Александр Протасеня: "PayPal. Различные способы интеграции"
Александр Протасеня: "PayPal. Различные способы интеграции"Александр Протасеня: "PayPal. Различные способы интеграции"
Александр Протасеня: "PayPal. Различные способы интеграции"
 
Сергей Черничков: "Интеграция платежных систем в .Net приложения"
Сергей Черничков: "Интеграция платежных систем в .Net приложения"Сергей Черничков: "Интеграция платежных систем в .Net приложения"
Сергей Черничков: "Интеграция платежных систем в .Net приложения"
 
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...Антон Шемерей «Single responsibility principle в руби или почему instanceclas...
Антон Шемерей «Single responsibility principle в руби или почему instanceclas...
 
Егор Воробьёв: «Ruby internals»
Егор Воробьёв: «Ruby internals»Егор Воробьёв: «Ruby internals»
Егор Воробьёв: «Ruby internals»
 
Андрей Колешко «Что не так с Rails»
Андрей Колешко «Что не так с Rails»Андрей Колешко «Что не так с Rails»
Андрей Колешко «Что не так с Rails»
 
Дмитрий Савицкий «Ruby Anti Magic Shield»
Дмитрий Савицкий «Ruby Anti Magic Shield»Дмитрий Савицкий «Ruby Anti Magic Shield»
Дмитрий Савицкий «Ruby Anti Magic Shield»
 
Сергей Алексеев «Парное программирование. Удаленно»
Сергей Алексеев «Парное программирование. Удаленно»Сергей Алексеев «Парное программирование. Удаленно»
Сергей Алексеев «Парное программирование. Удаленно»
 
«Почему Spark отнюдь не так хорош»
«Почему Spark отнюдь не так хорош»«Почему Spark отнюдь не так хорош»
«Почему Spark отнюдь не так хорош»
 
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»
«Cassandra data modeling – моделирование данных для NoSQL СУБД Cassandra»
 
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»«Практика построения высокодоступного решения на базе Cloud Foundry Paas»
«Практика построения высокодоступного решения на базе Cloud Foundry Paas»
 
«Дизайн продвинутых нереляционных схем для Big Data»
«Дизайн продвинутых нереляционных схем для Big Data»«Дизайн продвинутых нереляционных схем для Big Data»
«Дизайн продвинутых нереляционных схем для Big Data»
 
«Обзор возможностей Open cv»
«Обзор возможностей Open cv»«Обзор возможностей Open cv»
«Обзор возможностей Open cv»
 
«Нужно больше шин! Eventbus based framework vertx.io»
«Нужно больше шин! Eventbus based framework vertx.io»«Нужно больше шин! Eventbus based framework vertx.io»
«Нужно больше шин! Eventbus based framework vertx.io»
 

Технологии и подходы в разработке высоконагруженных приложений

  • 1. Технологии и подходы в разработке высоконагруженных приложений Часть 1. Брокеры сообщений
  • 3. Message broker • is an intermediary program which translates the language of a system from one Globally acceptable languages to another by way of a telecommunications medium • is an architectural pattern for message validation, message transformation and message routing
  • 4. Name Implementation Protocols language License OS Current version RabbitMQ Erlang AMQP Mozilla Public License 1.1 Windows, Linux, OS X, VxWorks 3.2.3 Apache Java ActiveMQ JMS 1.1, OpenWire, REST, Stomp, WS Notification, XMPP, AMQP 1.0 Apache 2.0 Windows, OS X, Linux, Solaris (any with JDK ≥ 5.0) 5.9.0 Apache Qpid Java, C++ AMQP Apache 2.0 Windows, Debian, Fedora 0.24 SonicMQ Java JMS 1.1, J2EE 1.4, XML, SOAP Proprietary Windows, RHEL, SuSE, AIX, HP-UX MSMQ C++ MSMQ Windows component Windows (95 - Server 2012) 5.0 ZeroMQ C++ ZMTP LGPLv3+ Linux, Windows, OS X 4.0.3
  • 5. Cloud services • Amazon SNS • Windows Azure ServiceBus • IronMQ (iron.io)
  • 6. Advanced Message Queuing Protocol (AMQP) • Open protocol, • V 0.9.1 – Nov. 2008, v 1.0 – Oct. 2011 • Bank of America, Cisco Systems, Progress Software, JPMorgan Chase, Microsoft Corporation, Novell, Red Hat, VMware and others
  • 8. Terms • Durable queue survives after broker restart • Persistent messages are written to disk • Per-Queue Message TTL determines how long an unconsumed message can live in a queue before it is automatically deleted • Per-Message TTL determines the TTL on a per-message basis • Queue TTL determines how long an unused queue can live before it is automatically deleted • Message acknowledgments are turned on by default • Nack (or Reject) = discard message or requeue itDead Letter Exchanges - messages can be republished to another exchange when: • The message is rejected (Nack or Reject) with requeue=false • The TTL for the message expires • The queue length limit is exceeded
  • 9. Topic exchange • Routing based on a pattern (a.b.c.d) • * - 1 word, # - 0..N words
  • 10. Direct exchange • Routing based on a key
  • 11. Fanout exchange • Routing key is ignored • Fast • Broadcast
  • 12. Other exchange types • Headers exchange - Routing based on message header content • RabbitMQ: Custom exchanges for even message distribution between queues: • consistent-hash • x-random
  • 13. RabbitMQ – AMQP v. 0.9.1+ Clustering Several RabbitMQ servers on a local network can be clustered together, forming a single logical broker. Highly Available Queues Queues can be mirrored across several machines in a cluster, ensuring that even in the event of hardware failure your messages are safe. Many Clients There are RabbitMQ clients for almost any language you can think of. Management UI RabbitMQ ships with an easy-to use management UI that allows you to monitor and control every aspect of your message broker.
  • 14.
  • 15. Rabbit + .NET = ? • RabbitMQ.Client* • Burrow.NET • EasyNetQ
  • 16. Reliability Failover (= fail-over) обход отказа, обработка *ситуации+ отказа в кластерных конфигурациях - способность системы автоматически эластично реагировать на отказ какого-либо устройства, разрыв связи и т. п., переключаясь на другое (обычно резервное или находящееся в состоянии ожидания) Loose coupling Publish-subscribe (публикация/подписка) - отправители сообщений отправляют их не конкретным получателям, а публикуют их в специальных каналах, не зная о том, сколько и какие подписчики у этого канала. Подписчики же, проявляют интерес к одному или нескольким каналам, из которых получают сообщения, соответствующие их интересам, не задумываясь об отправителях. Подобное разделение отправителей (публикующих) и получателей (подписчиков) позволяет достигать большей масштабируемости и более динамичную топологию сети
  • 18. Pattern: asynchronous processing / smoothing • For each request we only validate it and immediately return response, process later
  • 19. Pattern: publish-subscribe, broadcasting • Notify different subsystems about an event
  • 20. Изобретаем велосипед очередь • Хранилище сообщений • Оповещение о постановке сообщения в очередь
  • 22. Azure ServiceBus AMQP 1.0 is a much more narrow standard than the 0.9.1. It only defines the network wire-level protocol for the exchange of messages between two endpoints.
  • 23. Consumer code PeekLock – default ReceiveAndDelete
  • 24. Масштабирование в Azure 1 очередь < 500 rpm