SlideShare a Scribd company logo
1 of 35
Download to read offline
Использование	
  очередей	
  
асинхронных	
  сообщений	
  с	
  
       PostgreSQL
     Илья	
  Космодемьянский
    ik@PostgreSQL-­‐ConsulLng.com
Предпосылки




              2
синхронный	
  подход	
  
                    vs	
  
               асинхронный
• Писатель	
  пишет	
  сообщение	
  и	
  ждет	
  пока	
  
  читатель	
  подвердит	
  прочтение
• Писатель	
  не	
  ждет	
  читателя,	
  прочесть	
  
  сообщение	
  могут	
  когда	
  угодно
Асинхронная	
  очередь
•   Message
•   Channel
•   RouLng
•   Filters
•   Durability




                                    4
Асинхронная	
  очередь
• Удобно
• Быстро
• Позволяет	
  интегрировать	
  разнородные	
  
  системы
• Можно	
  построить	
  SOA
• Серебрянная	
  пуля



                                                  5
Проще:	
  очередь	
  заданий
• В	
  чем	
  проблема:
   – Concurrency	
  
   – Падения




                                      6
Проще:	
  очередь	
  заданий
• В	
  чем	
  проблема:
   – Concurrency	
  
   – Падения
                       Решено	
  в	
  СУБД




                                             7
Проще:	
  очередь	
  заданий
• В	
  чем	
  проблема:
   – Concurrency	
  
   – Падения


• При	
  стандартных	
  уровнях	
  изоляции	
  плохо,	
  
  при	
  жестких	
  -­‐	
  медленно.
• В	
  распределенном	
  случае	
  добавляются	
  
  “византийские”	
  конфликты
                                                            8
“Реляционная	
  модель	
  плохо	
  
         масштабируется”
                      Народная	
  мудрость




                                             9
Что	
  именно	
  имели	
  ввиду?
• Целостность	
  данных	
  внутри	
  БД
• Внутри	
  отдельно	
  взятой	
  базы	
  ACID,	
  что	
  
  делать	
  в	
  случае	
  шардинга,	
  непонятно




                                                             10
Распределенный	
  commit
• Предполагается,	
  что	
  все	
  участники	
  умеют	
  
  локальные	
  транзакции
• Протокол	
  занимается	
  организацией	
  
  распределенного	
  взаимодействия
• Coordinator	
  и	
  slave	
  (slaves)
• 1PC,	
  2PC,	
  PA,	
  PC,	
  3PC	
  (Skeen,	
  Stonebracker,	
  
  Gray,	
  Ozsu,	
  Mohan	
  ...)


                                                                      11
2PC
• Обеспечивает	
  распределенную	
  целостность
• Является	
  индустриальным	
  стандартом




                                              12
2PC




      Figure 8.9 Two-phase commit protocol example.


                                                      [Rahimi, Haug]
331




                                                                       13
2PC
• Работает	
  если	
  все	
  в	
  порядке
• Для	
  аварийных	
  сценариев	
  нужно:
   – 	
  2PC	
  TerminaLon	
  protocol
   – 	
  2PC	
  Recovery	
  protocol
• Падение	
  slave	
  (>=1)	
  -­‐	
  OK,	
  падение	
  
  coordinator	
  и	
  slave	
  -­‐	
  не	
  OK	
  
  [Skeen&Stonebraker]
• Высокий	
  оверхэд	
  на	
  обмен	
  сообщениями

                                                           14
Что	
  такое	
  JMS
• Спецификация	
  высокого	
  уровня
• Реализации	
  (IBM	
  WebSphere	
  MQ,	
  Oracle	
  AQ,	
  
  Tibco	
  EMS,	
  Oracle	
  Open	
  ESB	
  etc.)
• 	
  Чем	
  хорошо?
   – Спецификация	
  разумна
   – Транзакционный	
  EJB




                                                            15
Базы	
  и	
  очереди
• Oracle	
  +	
  Advanced	
  Q
• IBM	
  DB2	
  +	
  IBM	
  WebSphere	
  MQ
• PostgreSQL	
  +	
  PgQ?




                                              16
Для	
  PostgreSQL	
  нужны	
  очереди
• Postgres	
  нужно	
  масштабировать
   – 	
  v.v.	
  <	
  9.2	
  → <	
  24х	
  ядер
   – fsync
   – партиционирование
• Postgres	
  можно	
  масштабировать
   – не	
  нужно	
  платить	
  за	
  лицензию!




                                                  17
PgQ
• Обвязка	
  на	
  Python
• Ticker	
  
• Event	
  log	
  table	
  и	
  снапшоты




                                           18
PgQ
• Обвязка	
  на	
  Python
• Ticker	
  
• Event	
  log	
  table	
  и	
  снапшоты

        Идея:	
  средствами	
  SQL	
  в	
  PostgreSQL	
  очередь	
  сделать	
  нельзя!




                                                                                    19
PgQ
• Обвязка	
  на	
  Python
• Ticker	
  
• Event	
  log	
  table	
  и	
  снапшоты

     Кому	
  администрирование	
  Londiste	
  кажется	
  простым	
  и	
  логичным?;-­‐)




                                                                                 20
mbus
•   h–p://code.google.com/p/mbus/
•   v	
  1.1	
  stable
•   PostgreSQL	
  extension
•   depends	
  on	
  hstore	
  only




                                      21
mbus
=# create extension hstore;
=# create extension mbus;
                         v1.1	
  by	
  default,	
  Postgres	
  9.2

=# create extension mbus version 1.0;

                         specify	
  version	
  for	
  Postgres	
  9.1	
  or	
  9.0




                                                                                     22
mbus
• hstore	
  headers
• hstore	
  payload
• paterns:
   – queue
   – publish/subscribe
   – request/responce
• selectors
• delivery	
  expiraLon/delivery	
  delay

                                            23
mbus
                    queue
mbus.create_queue(qname,	
  ncons)




                                     24
mbus
                    queue
mbus.create_queue(qname,	
  ncons)

                  consumers_cnt
                  Количество	
  частей,	
  от	
  2х	
  до	
  128-­‐256
                  Разумное	
  число	
  -­‐	
  сколько	
  консьюмеров	
  
                  хотите	
  повесить	
  на	
  очередь,	
  слишком	
  много	
  
                  -­‐	
  тяжелее	
  просмотреть	
  всю	
  очередь




                                                                             25
mbus
                                 queue
mbus.post_<qname>(
  data hstore,
  headers hstore DEFAULT NULL::hstore,
  properties hstore DEFAULT
  NULL::hstore,
  delayed_until timestamp DEFAULT NULL,
  expires timestamp DEFAULT NULL)

Возвращает	
  iid	
  сообщения


                                          26
mbus
              queue
mbus.consume(qname)
              Вычитывает	
  сообщение	
  из	
  очереди




                                                         27
mbus
                           queue
mbus.consume(qname)
Resultset	
  вида:
CREATE TABLE qt_model (
	        id integer NOT NULL,
	        added timestamp without time zone NOT NULL,
	        iid text NOT NULL,
	        delayed_until timestamp without time zone NOT NULL,
	        expires timestamp without time zone,
	        received integer[],
	        headers hstore,
	        properties hstore,
	        data hstore
);




                                                               28
mbus
           publish/subscribe
mbus.create_consumer(qname, cname, selector)




                                               29
mbus
           publish/subscribe
mbus.create_consumer(qname, cname, selector)

                       Только	
  durable




                                               30
mbus
           publish/subscribe
mbus.create_consumer(qname, cname, selector)

                    Статический	
  селектор	
  вида:
                    $$(t.properxes-­‐>'STATE')='DONE'$$,	
  




                                                               31
mbus
         publish/subscribe
mbus.consume(qname, cname)
mbus.consume_<qname>_by_<cname>()
mbus.consumen_<qname>_by_<cname>(amt integer)




                                                32
mbus
                             security
• mbus.control
   – superuser	
  =	
  true
   – relocatable	
  =	
  false
   – schema	
  =	
  'mbus'
• mbus.create_view(qname,	
  [cname,	
  vname])	
  
  →	
  grant


                                                      33
mbus	
  roadmap
• 2PC
• JMS-­‐клиент




                                   34
• Gerhard Weikum, Gottfried Vossen - Transactional
  Information Systems: Theory, Algorithms, and the
  Practice of Concurrency Control and Recovery
• Saeed K. Rahimi, Frank S. Haug - Distributed Database
  Management Systems: A Practical Approach
• Gregor Hohpe, Bobby Wolf - Enterprise Integration
  Patterns




                                                      35

More Related Content

What's hot

nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)Ontico
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахAlexey Vasiliev
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationAlexey Lesovsky
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...Ontico
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...Ontico
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Ontico
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Ontico
 
Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Alexey Lesovsky
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
 
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupMail.ru Group
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Ontico
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Ontico
 

What's hot (20)

nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
Tempesta FW: challenges, internals, use cases / Александр Крижановский (Tempe...
 
Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
Защита данных и датацентров от катастроф. Подход Nutanix / Максим Шапошников ...
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
 

Viewers also liked

Как PostgreSQL работает с диском
Как PostgreSQL работает с дискомКак PostgreSQL работает с диском
Как PostgreSQL работает с дискомPostgreSQL-Consulting
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 
Linux internals for Database administrators at Linux Piter 2016
Linux internals for Database administrators at Linux Piter 2016Linux internals for Database administrators at Linux Piter 2016
Linux internals for Database administrators at Linux Piter 2016PostgreSQL-Consulting
 
PostgreSQL Meetup Berlin at Zalando HQ
PostgreSQL Meetup Berlin at Zalando HQPostgreSQL Meetup Berlin at Zalando HQ
PostgreSQL Meetup Berlin at Zalando HQPostgreSQL-Consulting
 
10 things, an Oracle DBA should care about when moving to PostgreSQL
10 things, an Oracle DBA should care about when moving to PostgreSQL10 things, an Oracle DBA should care about when moving to PostgreSQL
10 things, an Oracle DBA should care about when moving to PostgreSQLPostgreSQL-Consulting
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaAutovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaPostgreSQL-Consulting
 
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015PostgreSQL-Consulting
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performancePostgreSQL-Consulting
 
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya KosmodemianskyPostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya KosmodemianskyPostgreSQL-Consulting
 

Viewers also liked (12)

Иван Фролков. Tricky SQL
Иван Фролков. Tricky SQLИван Фролков. Tricky SQL
Иван Фролков. Tricky SQL
 
Kosmodemiansky wr 2013
Kosmodemiansky wr 2013Kosmodemiansky wr 2013
Kosmodemiansky wr 2013
 
Как PostgreSQL работает с диском
Как PostgreSQL работает с дискомКак PostgreSQL работает с диском
Как PostgreSQL работает с диском
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
Linux internals for Database administrators at Linux Piter 2016
Linux internals for Database administrators at Linux Piter 2016Linux internals for Database administrators at Linux Piter 2016
Linux internals for Database administrators at Linux Piter 2016
 
PostgreSQL Meetup Berlin at Zalando HQ
PostgreSQL Meetup Berlin at Zalando HQPostgreSQL Meetup Berlin at Zalando HQ
PostgreSQL Meetup Berlin at Zalando HQ
 
Pgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemianskyPgconfru 2015 kosmodemiansky
Pgconfru 2015 kosmodemiansky
 
10 things, an Oracle DBA should care about when moving to PostgreSQL
10 things, an Oracle DBA should care about when moving to PostgreSQL10 things, an Oracle DBA should care about when moving to PostgreSQL
10 things, an Oracle DBA should care about when moving to PostgreSQL
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaAutovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
 
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performance
 
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya KosmodemianskyPostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
 

Similar to Илья Космодемьянский. Использование очередей асинхронных сообщений с PostgreSQL

Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStackYandex
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipesAlexey Ermakov
 
Software craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interactionSoftware craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interactionPavel Veinik
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantomyaevents
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JSFestUA
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ RubtsovOntico
 
Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)
Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)
Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)Ontico
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Yandex
 
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresProit-people
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryTatyanazaxarova
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015OSLL
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...Mail.ru Group
 
Российская СУБД Postgres Pro
Российская СУБД Postgres ProРоссийская СУБД Postgres Pro
Российская СУБД Postgres ProAndrey Fleyta
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...rit2011
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Fwdays
 

Similar to Илья Космодемьянский. Использование очередей асинхронных сообщений с PostgreSQL (20)

Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStack
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
PostgreSQL performance recipes
PostgreSQL performance recipesPostgreSQL performance recipes
PostgreSQL performance recipes
 
Software craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interactionSoftware craftsmanship 17: Microservices interaction
Software craftsmanship 17: Microservices interaction
 
Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantom
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ Rubtsov
 
Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)
Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)
Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
Multimaster2
Multimaster2Multimaster2
Multimaster2
 
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
 
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ LibraryИнтервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
Интервью с Анатолием Кузнецовым, автором библиотеки BitMagic C++ Library
 
Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015Linuxvirt seminar-csc-2015
Linuxvirt seminar-csc-2015
 
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...Андрей Кондрашов, Банк Москвы.  «АБС в крупном Банке. Тестирование PostgreSQL...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
 
Российская СУБД Postgres Pro
Российская СУБД Postgres ProРоссийская СУБД Postgres Pro
Российская СУБД Postgres Pro
 
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
как написать масштабируемую баннерокрутилку. денис бирюков, артем гавриченков...
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
 

Илья Космодемьянский. Использование очередей асинхронных сообщений с PostgreSQL

  • 1. Использование  очередей   асинхронных  сообщений  с   PostgreSQL Илья  Космодемьянский ik@PostgreSQL-­‐ConsulLng.com
  • 3. синхронный  подход   vs   асинхронный • Писатель  пишет  сообщение  и  ждет  пока   читатель  подвердит  прочтение • Писатель  не  ждет  читателя,  прочесть   сообщение  могут  когда  угодно
  • 4. Асинхронная  очередь • Message • Channel • RouLng • Filters • Durability 4
  • 5. Асинхронная  очередь • Удобно • Быстро • Позволяет  интегрировать  разнородные   системы • Можно  построить  SOA • Серебрянная  пуля 5
  • 6. Проще:  очередь  заданий • В  чем  проблема: – Concurrency   – Падения 6
  • 7. Проще:  очередь  заданий • В  чем  проблема: – Concurrency   – Падения Решено  в  СУБД 7
  • 8. Проще:  очередь  заданий • В  чем  проблема: – Concurrency   – Падения • При  стандартных  уровнях  изоляции  плохо,   при  жестких  -­‐  медленно. • В  распределенном  случае  добавляются   “византийские”  конфликты 8
  • 9. “Реляционная  модель  плохо   масштабируется” Народная  мудрость 9
  • 10. Что  именно  имели  ввиду? • Целостность  данных  внутри  БД • Внутри  отдельно  взятой  базы  ACID,  что   делать  в  случае  шардинга,  непонятно 10
  • 11. Распределенный  commit • Предполагается,  что  все  участники  умеют   локальные  транзакции • Протокол  занимается  организацией   распределенного  взаимодействия • Coordinator  и  slave  (slaves) • 1PC,  2PC,  PA,  PC,  3PC  (Skeen,  Stonebracker,   Gray,  Ozsu,  Mohan  ...) 11
  • 12. 2PC • Обеспечивает  распределенную  целостность • Является  индустриальным  стандартом 12
  • 13. 2PC Figure 8.9 Two-phase commit protocol example. [Rahimi, Haug] 331 13
  • 14. 2PC • Работает  если  все  в  порядке • Для  аварийных  сценариев  нужно: –  2PC  TerminaLon  protocol –  2PC  Recovery  protocol • Падение  slave  (>=1)  -­‐  OK,  падение   coordinator  и  slave  -­‐  не  OK   [Skeen&Stonebraker] • Высокий  оверхэд  на  обмен  сообщениями 14
  • 15. Что  такое  JMS • Спецификация  высокого  уровня • Реализации  (IBM  WebSphere  MQ,  Oracle  AQ,   Tibco  EMS,  Oracle  Open  ESB  etc.) •  Чем  хорошо? – Спецификация  разумна – Транзакционный  EJB 15
  • 16. Базы  и  очереди • Oracle  +  Advanced  Q • IBM  DB2  +  IBM  WebSphere  MQ • PostgreSQL  +  PgQ? 16
  • 17. Для  PostgreSQL  нужны  очереди • Postgres  нужно  масштабировать –  v.v.  <  9.2  → <  24х  ядер – fsync – партиционирование • Postgres  можно  масштабировать – не  нужно  платить  за  лицензию! 17
  • 18. PgQ • Обвязка  на  Python • Ticker   • Event  log  table  и  снапшоты 18
  • 19. PgQ • Обвязка  на  Python • Ticker   • Event  log  table  и  снапшоты Идея:  средствами  SQL  в  PostgreSQL  очередь  сделать  нельзя! 19
  • 20. PgQ • Обвязка  на  Python • Ticker   • Event  log  table  и  снапшоты Кому  администрирование  Londiste  кажется  простым  и  логичным?;-­‐) 20
  • 21. mbus • h–p://code.google.com/p/mbus/ • v  1.1  stable • PostgreSQL  extension • depends  on  hstore  only 21
  • 22. mbus =# create extension hstore; =# create extension mbus; v1.1  by  default,  Postgres  9.2 =# create extension mbus version 1.0; specify  version  for  Postgres  9.1  or  9.0 22
  • 23. mbus • hstore  headers • hstore  payload • paterns: – queue – publish/subscribe – request/responce • selectors • delivery  expiraLon/delivery  delay 23
  • 24. mbus queue mbus.create_queue(qname,  ncons) 24
  • 25. mbus queue mbus.create_queue(qname,  ncons) consumers_cnt Количество  частей,  от  2х  до  128-­‐256 Разумное  число  -­‐  сколько  консьюмеров   хотите  повесить  на  очередь,  слишком  много   -­‐  тяжелее  просмотреть  всю  очередь 25
  • 26. mbus queue mbus.post_<qname>( data hstore, headers hstore DEFAULT NULL::hstore, properties hstore DEFAULT NULL::hstore, delayed_until timestamp DEFAULT NULL, expires timestamp DEFAULT NULL) Возвращает  iid  сообщения 26
  • 27. mbus queue mbus.consume(qname) Вычитывает  сообщение  из  очереди 27
  • 28. mbus queue mbus.consume(qname) Resultset  вида: CREATE TABLE qt_model ( id integer NOT NULL, added timestamp without time zone NOT NULL, iid text NOT NULL, delayed_until timestamp without time zone NOT NULL, expires timestamp without time zone, received integer[], headers hstore, properties hstore, data hstore ); 28
  • 29. mbus publish/subscribe mbus.create_consumer(qname, cname, selector) 29
  • 30. mbus publish/subscribe mbus.create_consumer(qname, cname, selector) Только  durable 30
  • 31. mbus publish/subscribe mbus.create_consumer(qname, cname, selector) Статический  селектор  вида: $$(t.properxes-­‐>'STATE')='DONE'$$,   31
  • 32. mbus publish/subscribe mbus.consume(qname, cname) mbus.consume_<qname>_by_<cname>() mbus.consumen_<qname>_by_<cname>(amt integer) 32
  • 33. mbus security • mbus.control – superuser  =  true – relocatable  =  false – schema  =  'mbus' • mbus.create_view(qname,  [cname,  vname])   →  grant 33
  • 34. mbus  roadmap • 2PC • JMS-­‐клиент 34
  • 35. • Gerhard Weikum, Gottfried Vossen - Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery • Saeed K. Rahimi, Frank S. Haug - Distributed Database Management Systems: A Practical Approach • Gregor Hohpe, Bobby Wolf - Enterprise Integration Patterns 35