Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Message-based architecture in php

Message-based architecture in php

CQRS, EventSourcing, Message-based architecture in PHP

Avatar for Masiukevich Maksim

Masiukevich Maksim

November 22, 2018

Other Decks in Programming

Transcript

  1. Электронный документооборот • РАСТЯНУТЫЕ ВО ВРЕМЕНИ ПРОЦЕССЫ ПРОВЕДЕНИЯ ДОКУМЕНТОВ •

    МНОЖЕСТВО ИЗОЛИРОВАННЫХ КОНТЕКСТОВ • НЕОБХОДИМОСТЬ СОХРАНЕНИЯ ИСТОРИИ
  2. Требования • НАДЕЖНОСТЬ • ВОЗМОЖНОСТЬ МАСШТАБИРОВАНИЯ • ПРИЕМЛЕМАЯ СКОРОСТЬ ОБРАБОТКИ

    СООБЩЕНИЙ • ПОДДЕРЖКА НЕСКОЛЬКИХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ • ТРАССИРОВКА ЗАПРОСОВ
  3. КОМАНДЫ • УКАЗЫВАЮТ НА НЕОБХОДИМОСТЬ ВЫПОЛНИТЬ КАКОЕ-ЛИБО ДЕЙСТВИЕ • НОСЯТ

    ВСЕГДА ИМПЕРАТИВНЫЙ ХАРАКТЕР • НЕ ВОЗВРАЩАЮТ РЕЗУЛЬТАТ
  4. ОТЛИЧИЯ ОТ «ПРИВЫЧНЫХ» СОБЫТИЙ • СОБЫТИЕ НЕВОЗМОЖНО МОДИФИЦИРОВАТЬ • ОБРАБОТКУ

    СОБЫТИЯ НЕВОЗМОЖНО ПРЕКРАТИТЬ • НЕТ ПОРЯДКА ВЫПОЛНЕНИЯ СЛУШАТЕЛЕЙ
  5. ТРАНСПОРТ • ПЕРЕДАЧА КОМАНД • MESSAGE BROKER • HTTP •

    ПЕРЕДАЧА СОБЫТИЙ • MESSAGE BROKER • WEBHOOK • WEBSOCKET
  6. ОБРАБОТКА СООБЩЕНИЙ • ВСЕ СООБЩЕНИЯ ПЕРЕДАЮТСЯ АСИНХРОННО С ПОМОЩЬЮ БРОКЕРА

    СООБЩЕНИЙ • КАЖДАЯ КОМАНДА МОЖЕТ ИМЕТЬ ТОЛЬКО 1 ОБРАБОТЧИК • КАЖДОЕ СОБЫТИЕ МОЖЕТ ИМЕТЬ НЕСКОЛЬКО СЛУШАТЕЛЕЙ • ОБРАБОТЧИК\ПОДПИСЧИК МОЖЕТ БЫТЬ РЕАЛИЗОВАН С ПОМОЩЬЮ ЛЮБОГО ЯЗЫКА ПРОГРАММИРОВАНИЯ
  7. SAGA САГА – РЕАЛИЗАЦИЯ РАСПРЕДЕЛЁННОЙ ТРАНЗАКЦИИ. НЕКОТОРАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕЙСТВИЙ, КОТОРАЯ

    ЛИБО ПРИВОДИТ К СОХРАНЕНИЮ ИЗМЕНЕНИЙ, ЛИБО ВЫПОЛНЯЕТ КОМПЕНСИРУЮЩЕЕ ДЕЙСТВИЕ (ATOMICITY). ПРЕДСТАВЛЯЕТ ИЗ СЕБЯ КОНЕЧНЫЙ АВТОМАТ, КОТОРЫЙ ПРИНИМАЕТ СОБЫТИЯ В КАЧЕСТВЕ ТРИГГЕРА, И ПОСЫЛАЕТ СООТВЕТСТВУЮЩИЕ ШАГУ КОМАНДЫ.
  8. PROCESS MANAGER ПРЕДСТАВЛЯЕТ ИЗ СЕБЯ КОНЕЧНЫЙ АВТОМАТ, КОТОРЫЙ ПРИНИМАЕТ СОБЫТИЯ

    В КАЧЕСТВЕ ТРИГГЕРА, И ПОСЫЛАЕТ СООТВЕТСТВУЮЩИЕ ШАГУ КОМАНДЫ.
  9. РАЗЛИЧИЯ PROCESS MANAGER & SAGA 1. РЕЛИГИЯ 2. НЕ ПОДДЕРЖИВАЕТ

    КОМПЕНСИРУЮЩИЕ ДЕЙСТВИЯ Оригинальная публикация Saga: https://goo.gl/DqGHpq Разъяснение терминологии: https://goo.gl/Yqe6Zm
  10. ОБЛАСТЬ ПРИМЕНЕНИЯ • ДОЛГОЖИВУЩИЕ БИЗНЕС ТРАНЗАКЦИИ • СРОК ЖИЗНИ САГИ

    УКАЗЫВАЕТСЯ В КОНФИГУРАЦИИ. ПРИ ЗАКРЫТИИ МОЖЕТ ВЫПОЛНИТЬСЯ КАКОЕ-ЛИБО ДЕЙСТВИЕ • ОПИСАНИЕ БИЗНЕС ПРОЦЕССОВ, ЗАТРАГИВАЮЩИХ МНОЖЕСТВО КОНТЕКСТОВ
  11. Order Process Manager Order 2. CreateOrder 3. OrderCreated Reservation 4.

    MakeReservation 5. SeatsReserved Client 1. Checkout
  12. Order Process Manager Order 2. CreateOrder 3. OrderCreated Reservation 4.

    MakeReservation 5. SeatsReserved Payment 6. DoPayment Client 1. Checkout
  13. Client Order Process Manager Order 2. CreateOrder 3. OrderCreated Reservation

    4. MakeReservation 5. SeatsReserved Payment 6. DoPayment 7. PaymentAccepted 1. Checkout
  14. Order Process Manager Order 2. CreateOrder 3. OrderCreated Reservation 4.

    MakeReservation 5. ReservationFailed Client 1. Checkout
  15. Order Process Manager Order 7. OrderCanceled 6. CancelOrder Reservation 4.

    MakeReservation 5. ReservationFailed Client 8. CheckoutFailed
  16. ПЛЮСЫ И МИНУСЫ ПЛЮСЫ • МОЖНО ОПИСАТЬ ПРОЦЕСС ЛЮБОЙ СЛОЖНОСТИ

    (С ЛЮБЫМ КОЛИЧЕСТВОМ ШАГОВ) • В РАМКАХ ОДНОЙ САГИ МОЖЕТ ЗАПУСКАТЬСЯ НЕСКОЛЬКО ПАРАЛЛЕЛЬНЫХ • С ТОЧКИ ЗРЕНИЯ САГИ НЕ ВАЖНО КТО И КАК ВЫПОЛНИТ ПОСТАВЛЕННУЮ ЗАДАЧУ МИНУСЫ • ВОЗРАСТАЕТ СЛОЖНОСТЬ В ПОНИМАНИИ ПРОЦЕССА ЦЕЛИКОМ • НЕТ ИНСТРУМЕНТА ВИЗУАЛИЗАЦИИ ПРОЦЕССА • ПОВЫШЕННЫЕ ТРЕБОВАНИЯ К ДОКУМЕНТАЦИИ
  17. Event Sourcing СПОСОБ ХРАНЕНИЯ СОСТОЯНИЯ СИСТЕМЫ В ВИДЕ ПОТОКА СОБЫТИЙ.

    ПОТОК СОБЫТИЙ - ЭТО УПОРЯДОЧЕННЫЙ СПИСОК СОБЫТИЙ, КОТОРЫЕ БЫЛИ ПРИМЕНЕНЫ В РАМКАХ АГЕРАТА. КАЖДОЕ НОВОЕ СОБЫТИЕ УВЕЛИЧИВАЕТ ВЕРСИЮ ПОТОКА НА 1
  18. Event Sourcing ПЛЮСЫ • ИСТОРИЯ ИЗМЕНЕНИЙ • ВЕРСИОНИРОВАНИЕ МИНУСЫ •

    СЛОЖНОСТЬ РЕАЛИЗАЦИИ • НАКЛАДНЫЕ РАСХОДЫ НА ВОССТАНОВЛЕНИЕ АГРЕГАТА • ПРОБЛЕМЫ С ПОИСКОМ, ФИЛЬТРАЦИЕЙ ДАННЫХ • ВОЗРАСТАЕТ ХРАНИМОЕ КОЛИЧЕСТВО ДАННЫХ
  19. Event Sourcing + CQRS ПОЯВЛЯЕТСЯ РАЗДЕЛЕНИЕ НА READ И WRITE

    МОДЕЛИ, ЧТО ПОЗВОЛЯЕТ РЕШИТЬ СЛЕДУЮЩИЕ ПРОБЛЕМЫ: • ПОИСК\ФИЛЬТРАЦИЯ • С ПОМОЩЬЮ СТОРОННИХ ХРАНИЛИЩ • ВОССТАНОВЛЕНИЕ СОСТОЯНИЯ АГРЕГАТА • С ПОМОЩЬЮ SNAPSHOT’ОВ
  20. Snapshot, Projections SNAPSHOT - СОХРАНЁННОЕ СОСТОЯНИЕ АГРЕГАТА ОПРЕДЕЛЁННОЙ ВЕРСИИ. PROJECTION

    - ДАННЫЕ, ПОДГОТОВЛЕННЫЕ ДЛЯ ОТОБРАЖЕНИЯ В ТОМ ВИДЕ, В КОТОРОМ ОНИ НУЖНЫ КЛИЕНТУ
  21. Eventual consistency МОДЕЛЬ, ПРИ КОТОРОЙ ГАРАНТИРУЕТСЯ, ЧТО В ОТСУТСТВИИ ИЗМЕНЕНИЙ

    ДАННЫХ, ЧЕРЕЗ КАКОЙ-ТО ПРОМЕЖУТОК ВРЕМЕНИ ПОСЛЕ ПОСЛЕДНЕГО ОБНОВЛЕНИЯ («В КОНЕЧНОМ СЧЁТЕ») ВСЕ ЗАПРОСЫ БУДУТ ВОЗВРАЩАТЬ ПОСЛЕДНЕЕ ОБНОВЛЁННОЕ ЗНАЧЕНИЕ. ПРЕДСТАВЛЕНИЯ ГЕНЕРИРУЮТСЯ НА ОСНОВАНИИ КАКИХ-ЛИБО СТРАТЕГИЙ И НЕ ВСЕГДА ОТОБРАЖАЮТ ТЕКУЩЕЕ СОСТОЯНИЕ АГРЕГАТА.
  22. Реалии PHP ОТСУТСТВИЕ • ИНФРАСТРУКТУРЫ • ФРЕЙМВОРКОВ\БИБЛИОТЕК • ИНСТРУМЕНТОВ ОТЛАДКИ

    • УТЕЧКИ ПАМЯТИ (БОЛЬШИНСТВО БИБЛИОТЕК НАПИСАНЫ В РАМКАХ «УМИРАЮЩЕЙ» МОДЕЛИ • ОТСУТСТВИЕ ВСТРОЕННОЙ ПОДДЕРЖКИ АСИНХРОННОСТИ • УСЛОЖНЯЕТСЯ ПРОФИЛИРОВАНИЕ И ОТЛАДКА