SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Downloaden Sie, um offline zu lesen
Использование	
  очередей	
  
асинхронных	
  сообщений	
  с	
  
       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

Weitere ähnliche Inhalte

Was ist angesagt?

Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)
Ontico
 
Как мы храним 75 млн пользователей (Денис Бирюков)
Как мы храним 75 млн пользователей  (Денис Бирюков)Как мы храним 75 млн пользователей  (Денис Бирюков)
Как мы храним 75 млн пользователей (Денис Бирюков)
Ontico
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
phpdevby
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Ontico
 
библиотеки с поддержкой Gpu
библиотеки с поддержкой Gpuбиблиотеки с поддержкой Gpu
библиотеки с поддержкой Gpu
Anatoliy Sviridenkov
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
Alexey Tokar
 
Ostrovok.ru.cache.messages
Ostrovok.ru.cache.messagesOstrovok.ru.cache.messages
Ostrovok.ru.cache.messages
Ilya Biin
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
drupalconf
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатления
fudz1k
 

Was ist angesagt? (20)

MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in Russian
 
Кластер БГУИР: расширенные возможности
Кластер БГУИР: расширенные возможностиКластер БГУИР: расширенные возможности
Кластер БГУИР: расширенные возможности
 
Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)Константин Осипов (Mail.Ru)
Константин Осипов (Mail.Ru)
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandra
 
Как мы храним 75 млн пользователей (Денис Бирюков)
Как мы храним 75 млн пользователей  (Денис Бирюков)Как мы храним 75 млн пользователей  (Денис Бирюков)
Как мы храним 75 млн пользователей (Денис Бирюков)
 
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...MongoDB. Области применения, преимущества и узкие места, тонкости использован...
MongoDB. Области применения, преимущества и узкие места, тонкости использован...
 
1c bitrix-cluster-et
1c bitrix-cluster-et1c bitrix-cluster-et
1c bitrix-cluster-et
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
 
библиотеки с поддержкой Gpu
библиотеки с поддержкой Gpuбиблиотеки с поддержкой Gpu
библиотеки с поддержкой Gpu
 
Apache cassandra (rus)
Apache cassandra (rus)Apache cassandra (rus)
Apache cassandra (rus)
 
HBase inside
HBase insideHBase inside
HBase inside
 
MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
 
Ostrovok.ru.cache.messages
Ostrovok.ru.cache.messagesOstrovok.ru.cache.messages
Ostrovok.ru.cache.messages
 
Kubasov
KubasovKubasov
Kubasov
 
Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)Scaling services with apache mesos (and docker)
Scaling services with apache mesos (and docker)
 
No sql.mongodb scaling
No sql.mongodb scalingNo sql.mongodb scaling
No sql.mongodb scaling
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
MongoDB первые впечатления
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатления
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 

Andere mochten auch

Skytools: PgQ Queues and applications
Skytools: PgQ Queues and applicationsSkytools: PgQ Queues and applications
Skytools: PgQ Queues and applications
elliando dias
 
Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)
Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)
Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)
Ontico
 
Инструменты для тестирования UI
Инструменты для тестирования UIИнструменты для тестирования UI
Инструменты для тестирования UI
ISsoft
 
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Ontico
 

Andere mochten auch (10)

Skytools: PgQ Queues and applications
Skytools: PgQ Queues and applicationsSkytools: PgQ Queues and applications
Skytools: PgQ Queues and applications
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)
Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)
Масштабируемая система голосования на базе PostgreSQL. PGQ (Сергей Нековаль)
 
Как правильно считать деньги в базе данных, Роман Друзягин (404 group)
Как правильно считать деньги в базе данных, Роман Друзягин (404 group)Как правильно считать деньги в базе данных, Роман Друзягин (404 group)
Как правильно считать деньги в базе данных, Роман Друзягин (404 group)
 
Как PostgreSQL работает с диском, Илья Космодемьянский (PostgreSQL-Consulting)
Как PostgreSQL работает с диском, Илья Космодемьянский (PostgreSQL-Consulting)Как PostgreSQL работает с диском, Илья Космодемьянский (PostgreSQL-Consulting)
Как PostgreSQL работает с диском, Илья Космодемьянский (PostgreSQL-Consulting)
 
PostgreSQL: meet your queue
PostgreSQL: meet your queuePostgreSQL: meet your queue
PostgreSQL: meet your queue
 
Индексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизацииИндексы в MSSQL: принципы работы и способы оптимизации
Индексы в MSSQL: принципы работы и способы оптимизации
 
Инструменты для тестирования UI
Инструменты для тестирования UIИнструменты для тестирования UI
Инструменты для тестирования UI
 
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
Spilo, отказоустойчивый PostgreSQL кластер / Oleksii Kliukin (Zalando SE)
 
User Interface Тестирование – все ли так просто?
User Interface Тестирование – все ли так просто?User Interface Тестирование – все ли так просто?
User Interface Тестирование – все ли так просто?
 

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

Веб-сервер Phantom
Веб-сервер PhantomВеб-сервер Phantom
Веб-сервер Phantom
yaevents
 
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JS Fest 2019. Игорь Березин и Николай Крещенко. Эволюция архитектуры многогра...
JSFestUA
 
hl++ Rubtsov
hl++ Rubtsovhl++ Rubtsov
hl++ Rubtsov
Ontico
 
Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)
Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)
Считаем Рунет или миллион pps в секунду / Дмитрий Смирнов (TNS Russia)
Ontico
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
Ontico
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Yandex
 

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

Опыт внедрения OpenStack
Опыт внедрения OpenStackОпыт внедрения OpenStack
Опыт внедрения OpenStack
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
Обзор перспективных баз данных для 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)
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Multimaster2
Multimaster2Multimaster2
Multimaster2
 
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
 
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)
 
Интервью с Анатолием Кузнецовым, автором библиотеки 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
 

Mehr von Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Mehr von Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Использование очередей асинхронных сообщений с 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