Шаблон архитектуры по шина событий

Архитектурный паттерн — это типовое, повторно переиспользуемое решение часто встречающейся проблемы при разработке архитектуры программного обеспечения. Архитектурные паттерны аналогичны паттернам проектирования за исключением более широкого охвата у первых.

В этой статье я расскажу о 10 самых распространённых архитектурных паттернах, об их плюсах и минусах.

  1. Многоуровневая архитектура (Layered)
  2. Клиент-сервер (Client-server)
  3. Ведущий-ведомый (Master-slave)
  4. Канал-фильтр (Pipe-filter)
  5. Посредник (Broker)
  6. Одноранговое соединение (Peer-to-peer)
  7. Шина событий (Event-bus)
  8. Модель-представление-контроллер (MVC)
  9. Доска объявлений (Blackboard)
  10. Интерпретатор (Interpreter)

Видео:Шаблоны проектирования микросервисов на примере Авито / Фрол Крючков (Авито)Скачать

Шаблоны проектирования микросервисов на примере Авито / Фрол Крючков (Авито)

1. Многоуровневая архитектура

Этот паттерн используется для структурирования программ, разбиваемых на группы подзадач, каждая из которых находится на определенном уровне абстракции. Каждый уровень обслуживает следующий уровень выше.

Чаще всего встречаются 4 таких уровня:

Видео:Почему я использую паттерн "Шина событий" в продеСкачать

Почему я использую паттерн "Шина событий" в проде

Использование

Шаблон архитектуры по шина событий

В этом паттерне участвует две стороны — один сервер и несколько клиентов. Клиенты делают запросы к серверу, а сервер их обслуживает и продолжает ждать новых запросов.

Видео:Шаблоны проектирования для микросервисовСкачать

Шаблоны проектирования для микросервисов

Использование

Шаблон архитектуры по шина событий

Видео:Понятие "состояние" в шаблонах проектирования //занятие курса «Архитектура и шаблоны проектирования»Скачать

Понятие "состояние" в шаблонах проектирования //занятие курса «Архитектура и шаблоны проектирования»

3. Ведущий-ведомый

Здесь так же два главных компонента — ведущий и ведомые. Ведущий распределяет работу среди идентичных ведомых и агрегирует возвращаемые результаты.

Видео:Канал событий (event channel) ► Шаблон проектирования ► Урок №3Скачать

Канал событий (event channel) ► Шаблон проектирования ► Урок №3

Использование

Шаблон архитектуры по шина событий

Видео:Дмитрий Нестерук «Брокеры событий как связующий элемент архитектуры»Скачать

Дмитрий Нестерук «Брокеры событий как связующий элемент архитектуры»

4. Канал-фильтр

Этот паттерн можно использовать для структурирования систем, которые создают и обрабатывают поток данных. Каждый шаг обработки данных — фильтр. Сами данные передаются по каналам. Каналы могут использоваться для буферизации или синхронизации.

Видео:Event-Driven Architecture в контексте микросервисов: основные паттерны | Николай Голов, ManyChatСкачать

Event-Driven Architecture в контексте микросервисов: основные паттерны | Николай Голов, ManyChat

Использование

Шаблон архитектуры по шина событий

Видео:MVC, MVVM Архитектура. Наглядная теория и примерыСкачать

MVC, MVVM Архитектура. Наглядная теория и примеры

5. Посредник

Этот шаблон используется для структурирования распределенных систем, состоящих из индивидуальных компонентов. Последние могут взаимодействовать друг с другом, используя удалённый сервис. Посредник отвечает за координацию взаимодействия между компонентами.

Серверы отправляют информацию о своих возможностях (услугах и характеристиках) посреднику. Клиенты запрашивают услуги посредника, который перенаправляет запрос подходящему серверу из своего реестра.

Видео:Шаблоны проектирования в программированииСкачать

Шаблоны проектирования в программировании

Использование

Шаблон архитектуры по шина событий

Видео:Общие шаблоны распределения ответственностей // курс «Архитектура и шаблоны проектирования»Скачать

Общие шаблоны распределения ответственностей // курс «Архитектура и шаблоны проектирования»

6. Одноранговое соединение

Отдельные компоненты в терминах этого паттерна называются пирами. Особенность пиров в том, что они могут выступать как клиентами, получающими услуги, так и серверами, обслуживающими другие пиры. Пир может менять свою роль динамически или просто выполнять обе роли одновременно.

Видео:Основы архитектуры ПО. Глава 14 Event-Driven архитектура / Антон ГращенковСкачать

Основы архитектуры ПО. Глава 14 Event-Driven архитектура / Антон Гращенков

Использование

Шаблон архитектуры по шина событий

Видео:ИВЕНТЫ - ЭТО РЕШЕНИЕ! EVENT-DRIVEN АРХИТЕКТУРА В ПИТОНЕСкачать

ИВЕНТЫ - ЭТО РЕШЕНИЕ! EVENT-DRIVEN АРХИТЕКТУРА В ПИТОНЕ

7. Шина событий

Этот паттерн состоит из четырёх основных компонентов: источник события, подписчик, канал и шина событий. Источники публикуют сообщения для каналов на шине событий. Слушатели подписываются на нужные им каналы и получают уведомления о новых сообщениях.

Видео:Паттерны отказоустойчивой архитектуры – Александр КривощёковСкачать

Паттерны отказоустойчивой архитектуры – Александр Кривощёков

Использование

Шаблон архитектуры по шина событий

Видео:Валентин Гогичашвили — События, шины и интеграция данных в непростом мире микросервисовСкачать

Валентин Гогичашвили — События, шины и интеграция данных в непростом мире микросервисов

8. Модель-представление-контроллер

Паттерн делит приложение на три части:

  1. модель — содержит данные и функции для их обработки
  2. представление — отображает информацию для пользователя (может существовать несколько разных представлений)
  3. контроллер — обрабатывает вводимые пользователем данные

Это делается, чтобы отделить внутреннее представление информации от того, как её будет видеть и модифицировать пользователь. Такой подход позволяет эффективнее переиспользовать код каждой из частей.

Видео:Создание микросервиса // Демо-занятие курса «Архитектура и шаблоны проектирования»Скачать

Создание микросервиса // Демо-занятие курса «Архитектура и шаблоны проектирования»

Использование

Шаблон архитектуры по шина событий

Видео:Топ шаблонов проектирования которые должен знать программист(старая версия)Скачать

Топ шаблонов проектирования которые должен знать программист(старая версия)

9. Доска объявлений

Этот шаблон полезен при работе с задачами, для которых нет точного решения. Доска объявлений состоит из трёх основных компонентов.

  • доска — объект, хранящий задачи и элементы их решений
  • источник знания — модуль, умеющий полностью или частично решать какие-то задачи
  • компонент управления — выбирает, настраивает и выполняет источники знания для решения задач с доски

Читайте также: Какая норма давления воздуха в шинах

Источники знания могут искать на доске задачи, которые способны решить, а так же добавлять новые подзадачи.

Учебный пример реализации паттерна на Python можно посмотреть здесь — прим. перев.

Видео:Model-VIew-Controller (MVC) шаблоны проектирования. Архитектурный шаблонСкачать

Model-VIew-Controller (MVC) шаблоны проектирования. Архитектурный шаблон

Использование

Шаблон архитектуры по шина событий

10. Интерпретатор

Этот паттерн используется для разработки компонента, который интерпретирует программы, написанные на специальном языке. Интерпретатор определяет как разбивать текст программы на элементы (вроде выражений) и выполнять их. Чаще всего у каждого элемента нового языка есть свой класс.

Топ-5 архитектурных паттернов для распределённых систем

Авторизуйтесь

Топ-5 архитектурных паттернов для распределённых систем

Распределённые приложения — главный элемент современной индустрии разработки ПО. Они имеют решающее значение для облачных сервисов хранения данных и позволяют веб-приложениям с огромной аудиторией оставаться реактивными. Для того чтобы эффективно проектировать эти системы, программисты используют фундаментальные блоки — паттерны распределённых систем.

Мы рассмотрим пять архитектур распределённых систем, их плюсы, минусы и области применения.

Что такое паттерн распределённой системы?

Паттерны проектирования — это проверенные способы создания систем, каждый из которых подходит для определённого случая. Паттерны абстрактны и не опираются на конкретную реализацию. Большинство паттернов разрабатываются и обновляются множеством разработчиков на протяжении многих лет. Поэтому они зачастую очень эффективны на старте разработки.

Паттерны — это строительные блоки, которые позволяют программистам использовать существующие знания вместо того, чтобы начинать с нуля строительство каждой системы. Кроме того они имеют набор стандартных моделей, которые помогают другим разработчикам понять, как их проекты могут взаимодействовать с данной системой.

24–26 ноября, Москва и онлайн, От 14 400 до 28 800 ₽

Паттерны распределённых систем описывают взаимодействие различных узлов системы и то, как они обрабатывают задачи и виды процессов для различных задач.

Эти паттерны широко используются в архитектуре крупномасштабных облачных вычислений и систем масштабируемых микросервисов.

Типы паттернов распределённых систем

Большинство паттернов распределённых систем попадает в одну из трёх категорий, в зависимости от функциональности с которой они работают:

  • Взаимодействие объектов: описывают протоколы отправки сообщений и разрешения для общения между компонентами системы.
  • Безопасность: обеспечивают конфиденциальность, целостность и доступность для защиты системы от несанкционированного доступа.
  • Событийные: описывают создание, определение, использование и реакцию на события системы.

1. Разделение ответственности на команды и запросы (CQRS)

Этот паттерн предполагает разделение операций чтения и записи для увеличения масштабируемости и безопасности системы. Он использует команды для записи данных в постоянное хранилище (они ничего не возвращают) и запросы для обнаружения и получения данных (не могут изменять данные).

Команды и запросы обрабатываются центром управления, который получает запросы от пользователей. Затем центр получает данные и выполняет необходимые изменения, сохраняет их и уведомляет сервис выполняющий чтение. Этот сервис обновляет модель чтения и показывает изменения пользователю.

  • Уменьшение сложности системы благодаря делегированию.
  • Обеспечение чёткого разделения между бизнес-логикой и валидацией.
  • Разделение ответственности.
  • Уменьшение количества непредсказуемых изменений распределённых данных.
  • Уменьшение числа сущностей, которые могут изменять данные.
  • Требует постоянного взаимодействия между командами и запросами.
  • Может увеличить задержку при отправке большого количества запросов.
  • Нет средств связи между сервисными процессами.

Читайте также: Почему нельзя хранить шины дома

Область применения

CQRS отлично подходит для приложений, интенсивно использующих данные, например систем управления базами данных SQL или NoSQL. Также паттерн используется для архитектур микросервисов с большим объемом данных. Он прекрасно подходит для приложений, сохраняющих состояние благодаря разделению на писателя и читателя.

2. Двухфазная фиксация (2PC)

2PC похож на CQRS использованием транзакций и центра управления, но здесь разделение производится на основании того, на какой стадии находится транзакция. Есть две фазы: фаза подготовки (в которой центр управления сообщает службам подготовить данные) и фаза фиксации (которая сигнализирует службе отправить подготовленные данные).

Все сервисы в 2PC по умолчанию заблокированы и не могут отправлять данные. После завершения подготовки координатор по одному разблокирует сервисы и запрашивает их данные. Если сервис не готов подтвердить данные, координатор переходит к другому сервису. Когда все подготовленные данные отправлены сервисы остаются разблокированными и ожидают задачи от координатора.

2PC гарантирует, что одновременно может работать только одна служба, что делает процесс более устойчивым и последовательным, чем CQRS.

  • Консистентность и устойчивость к ошибкам из-за отсутствия параллельных запросов.
  • Масштабируемость — может обрабатывать большие пулы данных так же эффективно, как и данные с одного компьютера.
  • Поддерживает одновременную изоляцию и разделение данных.
  • Не отказоустойчив, подвержен возникновению узких мест и блокировок из-за своей синхронной природы.
  • Требует больше ресурсов, чем другие паттерны.

Область применения

2PC лучше всего подходит для распределенных систем, имеющих дело с транзакциями, которые отдают предпочтение точности, а не эффективности использования ресурсов. Он устойчив к ошибкам и позволяет легко отследить ошибки даже в больших объёмах информации.

3. Saga

Saga — это асинхронный паттерн не использующий центр управления. Сервисы здесь сами взаимодействуют между собой. Эта особенность позволяет избавиться от недостатков упомянутых выше паттернов.

Для связи между сервисами в Saga используется шина событий. Шина передаёт запросы между службами, и каждая участвующая служба создает локальную транзакцию. Затем участвующие службы выдают событие для получения другими службами. Все другие службы прослушивают события. Первая служба, получившая событие, выполнит необходимое действие. Если этой службе не удается выполнить действие, оно отправляется в другие службы.

Эта структура похожа на 2PC тем, что службы циклически запускаются, если кто-то не может выполнить задачу. Тем не менее, Saga не использует центр управления, чтобы лучше управлять потоком и уменьшить количество требуемой обратной связи.

  • Отдельные сервисы могут обрабатывать более долгие транзакции.
  • Децентрализация отлично подходит для распределённых систем.
  • Меньше узких мест благодаря одноранговой связи между службами.
  • Асинхронная независимость делает трудным отслеживание сервисов выполняющих индивидуальные задачи.
  • Сложный механизм управления затрудняет отладку.
  • Меньшая изоляция сервисов, чем в предыдущих паттернах.

Читайте также: Размеры шин пежо 5008

Область применения

Этот паттерн распределённой системы хорошо подходит для задач, которым требуется масштабируемая беcсерверная архитектура, способная обрабатывать много запросов одновременно. AWS использует подобные решения в AWS Step Functions и AWS Lambda, и других продуктах.

4. Реплицированные сервисы с распределением нагрузки (RLBS)

RLBS — это самый простой и часто используемый шаблон проектирования. На базовом уровне он состоит из нескольких идентичных сервисов, которые общаются с центральным распределителем. Каждый сервис способен выполнять задачи и перезапускать их в случае неудачи. Распределитель получает запросы от конечного пользователя и разделяет их между сервисами, используя round-robin или более сложный алгоритм.

Дублирующие службы обеспечивают высокую доступность приложения для запросов пользователей и могут перераспределять работу в случае сбоя одного экземпляра службы.

RLBS часто используется с Azure Kubernetes, которая представляет собой технологию оркестровки контейнеров с открытым исходным кодом, разработанную Microsoft, которая предлагает автоматическое масштабирование служб в зависимости от воркфлоу.

  • Стабильная производительность с точки зрения конечного пользователя.
  • Быстрое восстановление после сбоев.
  • Высокая масштабируемость через увеличение числа сервисов.
  • Отличная многопоточность.
  • Нестабильная производительность, зависящая от алгоритма балансировки.
  • Управление сервисами требует много ресурсов.

Область применения

RLBS отлично подходит для систем, с которыми пользователи взаимодействуют напрямую. Нагрузка на эти системы в течение дня изменяется, поэтому требуется низкая задержка, например Netflix или Amazon Prime.

5. Шардинг

Альтернативой репликации является создание отдельных сервисов, каждый из которых выполняет определённый тип запросов. Это называется шардингом, потому что вы разделяете запрос на несколько неодинаковых частей. Например, у вас может быть отдельный сервис, который принимает кэширующиеся запросы, а другой сервис будет отвечать за запросы с высоким приоритетом. Распределитель нагрузки обрабатывает каждый запрос и передаёт его в подходящий сервис.

Шардинг сервисов обычно используется для создания сервисов с поддержкой состояния, потому что объём состояния часто слишком большой для одного stateless контейнера. Шардинг позволяет масштабировать отдельные элементы под размер состояния.

Шардинг также позволяет быстрее обрабатывать высокоприоритетные запросы. Сегменты, предназначенные для запросов с высоким приоритетом, всегда доступны для обработки таких запросов в момент их поступления и не требуют размещения запроса в очереди.

  • Возможность масштабировать сегменты для общих запросов.
  • Легкая приоритизация запросов.
  • Простая отладка, благодаря естественной сортировке.
  • Поддержка большого числа сегментов может потребовать много ресурсов.
  • Непропорциональное использование сегментов может привести к потерям производительности.

Область применения

Шардинг сервисов хорош в тех случаях, когда ваша система работает с предсказуемой несбалансированной нагрузкой для разных запросов, а некоторые запросы имеют приоритет.

Что дальше?

В статье были рассмотрены лишь несколько паттернов распределённых систем. Вот ещё несколько шаблонов проектирования для изучения:

  • Sidecar паттерн;
  • Упреждающая журнализация (Write-Ahead Log);
  • Split-Brain паттерн;
  • Направленная отправка (Hinted Handoff);
  • Чтение с восстановлением (Read Repair).
  • Свежие записи
    • Нужно ли менять пружины при замене амортизаторов
    • Скрипят амортизаторы на машине что делать
    • Из чего состоит стойка амортизатора передняя
    • Чем стянуть пружину амортизатора без стяжек
    • Для чего нужны амортизаторы в автомобиле
Поделиться или сохранить к себе:
Технарь знаток