Мобильные веб-приложения и событийно-ориентированная архитектура

Пока разбирался с тем, как лучше использовать Server Sent Events в своих web-приложениях, пришло осознание, что для взаимодействия сервера с клиентом по SSE лучше всего подходит Event Driven Architecture.

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

Ведь что такое классическое взаимодействие в клиент-серверной архитектуре? Клиент отправляет запрос на сервер, сервер обрабатывает запрос и возвращает клиенту результат. То есть, когда в интернет-магазине пользователь оформляет заказ, он нажимает кнопку "Отправить", данные заказа уходят на сервер, сервер проверяет заказ, сохраняет его, в некоторых случаях ещё и изменяет остатки по складу, после чего возвращает номер заказа и подтверждение, что заказ принят. Всё это время пользователь смотрит, как у него на экране крутится спиннер.

А как то же самое могло бы происходить в событийно-ориентированном приложении? По нажатию на кнопку "Отправить" данные о заказе уходят на сервер в виде события "Создан новый заказ" и пользователь может продолжать использовать приложение. Всё, фронт не имеет возможности узнать, что там на сервере происходит - только убеждается, что событие дошло до сервера. Если событие не дошло (например, мобильное устройство перешло в offline), то у фронта есть возможность повторно отправить сообщение при выходе в online. Если же сервер получил сообщение о создании нового заказа, то он начинает его обработку и отправляет сообщения об этапах обработки заказа обратно на фронт. Так же асинхронно. В те моменты, когда фронт способен принять его сообщения (находится online).

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

Вот такой вывод я могу сделать на основании собственных размышлений, зафиксированных в публикации "EDA для PWA". Я позиционирую vc.ru как средство для продвижения своих взглядов, а основной свой блог веду на medium.com. Поэтому здесь я постараюсь публиковать лишь выводы. Насколько я понял, правила сервиса это позволяют.

Начать дискуссию