Что такое SEDA (Staged Event Driven Architecture)?

SEDA: архитектура для хорошо обученных, масштабируемых интернет-сервисов

"SEDA - это аббревиатура для ступенчатой ​​архитектуры, управляемой событиями, и разлагает сложное, управляемое событиями приложение на множество этапов, связанных очередями".

Я понимаю, что это архитектура и что существует множество реализаций SEDA (см. Статья в Википедии). Что такое "этап"? Может ли кто-то дать подробное резюме на высоком уровне о поэтапной архитектуре, управляемой событиями, и о том, как она отличается от традиционных (не прошедших этап?) Событийных архитектур?

Ответ 1

A Этап аналогичен "Событию". Чтобы упростить идею, подумайте о SEDA как о серии событий, отправляющих сообщения между ними.

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

Если вы используете Java TPE, вы можете контролировать работоспособность, пропускную способность, ошибки, латентность каждого этапа и быстро находить, где узкое место производительности. И как хороший побочный эффект, с меньшими фрагментами кода, вы можете легко протестировать их и увеличить охват кода (это был мой случай).

Для записи это внутренняя архитектура Cassandra (NoSQL) и Mule ESB (AFAIK).

Я рекомендую прочитать оригинальную бумагу (извините, дублировать ссылку):

Вот структура, которую я создал для модели SEDA для Java EE: http://code.google.com/p/seide/

Ответ 2

Архитектура потоков vs Staged Event-Drive Architecture в реальной жизни:

Представьте, что у вас есть ресторан. Теперь, как это будет работать?

с "Архитектурой потоков":

  • Прибывает клиент.
  • Официант (а) обращается к нему/ей
  • Официант (a) берет его/ее в одну доступную таблицу.
  • Официант (a) принимает заказ
  • Официант (a) готовит заказ
  • Официант (a) принимает по порядку таблицу
  • Официант (а) ждет, пока клиент не закончит свою еду, чтобы заплатить.
  • Официант (а) вытаскивает клиента

В этом случае официант находится с клиентом в течение всего процесса. Если сервер имеет 10 потоков, он может одновременно обрабатывать 10 подключений.

с SEDA:

  • Прибывает клиент.
  • Официант (а) обращается к нему/ей
  • Официант (a) берет его/ее в одну доступную таблицу (и возвращается к другому клиенту)
  • Официант (б) принимает заказ (много ввода-вывода, занимает время)
  • Кук готовит заказ
  • Официант (c) принимает по порядку таблицу
  • Официант (d) ждет, пока клиент не закончит свою еду, чтобы заплатить.
  • Официант (e) отправляет клиента

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

Это экстремальный пример, и, конечно же, с потоковыми серверами можно выполнить некоторые асинхронные задачи. Это только теоретический пример.

Ответ 3

Документы доступны в github

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

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

Я бы попросил вас прочитать прилагаемый PDF файл, так как он упоминает о необходимости очереди событий для развязки материала, логической компендизации для достижения максимальной эффективности компонента, как эффективно повторно использовать существующие ресурсы, над которыми работает приложение, как сеть, хранение, циклы CPU и т.д.,

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

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

Чтобы добавить измерение события в SEDA, подумайте о том, как группа людей взаимодействует друг с другом и количество событий, которые задействованы. Скажем, например, у парней 1-го этапа закончились гайки и болты, чтобы завершить свою сцену, и они сразу же информируют менеджера отдела заказов о гайках и болтах. Вполне возможно, что менеджер раздела заказа получил аналогичный запрос от другого этапа 6 парней, что гайки и болты закончились. Теперь он видит запросы в центральной точке (он подобен контроллеру в SEDA) и листу Excel, который у него есть, где все записи, на которых он хранит запросы на размещение заказов (похоже на очередь в SEDA), он объединяет их и заказывает их вместе, вместо отправки двух запросов заказа (управление потоками и расписанием в SEDA).

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