12. ØMQ
• Разработан компанией iMatix (AMQP)
• LGPL
• Поддерживает C/C++, C#, Java, Python, PHP,
Ruby, Erlang и другие языки
• “Sockets on steroids”
13. Отличия от других MOM
• Отсутствие брокера
• API, похожий на BSD sockets API
• Произвольный формат сообщений
• Различные модели взаимодействия
14. Отличия от обычных сокетов
• N:M взаимодействие
• bind()/connect() могут быть вызваны в
любом порядке на любой стороне
• Поток сообщений а не байтов
• Автоматическое переподключение
30. Publish/subscribe: сервер
while True:
for city in ["Moscow", "Murmansk", "St.
Petersburg"]:
s.send(city, zmq.SNDMORE)
s.send(str(random.randint(10, 20)))
time.sleep(2)
39. Внимание!
• В inproc-сокетах connect() должен быть
вызван после bind()
• Сокеты привязаны к потокам
• Фильтрация на стороне клиента в PUB/SUB
• assert() в случае ошибок
40. Заключение
• Легко использовать
• Высокая производительность
• Большой выбор моделей взаимодействия
• Легко модифицировать существующую
архитектуру
42. Case study: GH ATP
• Автоматизированная торговля ценными
бумагами
• Большой объем данных (сотни тысяч
котировок в секунду)
• Жесткие требования к производительности
43. Задача: получение котировок
• Разные поставщики данных с разными
протоколами
• Данные используются в нескольких
продуктах
• Нужен унифицированный API
44. Требования
• Низкое время отклика (<1 мс)
• Большие объемы данных
• Поддержка нескольких языков (на данный
момент — Scala и C++)
• Load balancing, fault tolerance
49. Цифры
• Тестовые сервер и клиент (Scala), TCP/IP
• Около 250 000 котировок в секунду
• Средняя задержка: <1 мс
• CPU bound (protobuf), ØMQ может дать
большую производительность
50. ØMQ — это
• Легкая разработка высонагруженных
распределенных систем
• Простая модификация и добавление нового
функционала
• Масштабирование и скорость
51. • http://www.zeromq.com
• http://mongrel2.org
• Андрей Охлопков <oh@ghcg.com>
• Алексей Ермаков <ae@ghcg.com>