РАЗРАБОТКА СЕРВЕРНОЙ ЧАСТИ МОБИЛЬНОГО ПРИЛОЖЕНИЯ С ИСПОЛЬЗОВАНИЕМ МИКРОСЕРВИСНОЙ АРХИТЕКТУРЫ

№11,

Технические науки

Мытникова Екатерина Анатольевна


Ключевые слова: МИКРОСЕРВИСНАЯ АРХИТЕКТУРА; МИКРОСЕРВИС; СОЦИАЛЬНАЯ СЕТЬ; СЕРВЕР; СЕРВИС; MICROSERVICE ARCHITECTURE; MICROSERVICE; SOCIAL NETWORK; SERVER; SERVICE.


Аннотация: При разработке архитектурно-сложного приложения, например, мобильной социальной сети, существует необходимость в реализации отказоустойчивости, масштабируемости и доступности этого приложения. Один из архитектурных паттернов, позволяющих реализовать эти требования – это микросервисная архитектура, реализующая подход к созданию приложения, который подразумевает отказ от монолитной структуры. Вместо того чтобы исполнять все действия одного приложения на сервере с помощью внутрипроцессных взаимодействий, следует использовать несколько небольших приложений, каждое из которых выполняет только свою часть общего бизнес-процесса приложения и соответствует какой-то определенной задаче. При этом приложения могут быть «разбросаны» на разных серверах и взаимодействовать друг с другом посредством сетевых протоколов.

Определение, данное Эдрианом Кокрофтом, одним из пионеров микросервисной архитектуры звучит так: «Микросервисная архитектура — это архитектура на основе свободно сопряжённых сервисов с ограниченными контекстами».

Микросервисная архитектура обладает следующими преимуществами над монолитной архитектурой.

• Частичное развертывание – это значит, что есть возможность обновлять приложение по частям, не вызывая остановки всего приложения.
• Доступность – если один из микросервисов оказался недоступен по причине остановки, то это не приведет к недоступности всего приложения.
• Сохранение модульности – гарантированное отсутствие общих состояний между модулями, возможность инкапсуляции модулей.
• Кроссплатформенность – позволяет использовать различные технологии и языки программирования в зависимости от задач, возложенных на модуль.

Для реализации микросервисной архитектуры используются бесплатные (open-source) программные решения, ставшие популярными в последние годы:
— NodeJs – платформа для разработки серверных приложений на языке программирования JavaScript, активно развивается вместе со спецификацией языка программирования, имеет однопоточную event-driven архитектуру, реализованы возможности работы с сетью, файловой системой. Экосистема NodeJs весьма развита, существует множество библиотек и фреймворков для разработки полнофункциональных серверных приложений. Приложения, написанные на NodeJs – асинхронны, поэтому выполняются очень быстро.
— Pm2 – менеджер процессов, написанный на NodeJs и позволяющий организовать запуск и мониторинг приложений, ориентирован на кластеризацию и удобное управление через веб-интерфейс. Ключевые особенности – возможность запуска приложений в режиме кластеризации.
— MongoDB – объектно-ориентированная NoSQL СУБД. Имеет встроенные возможности по шардингу и репликации данных между несколькими узлами. Все запросы к базе данных выполняются посредством встроенного в него интерпретатора JavaScript.
— JsonWebToken – метод аутентификации пользователей, решает проблему синхронизации сессий пользователей между микросервисами.
— Redis – сверхбыстрое in-memory хранилище данных, используемое для временного хранения пар ключ-значение с поддержкой кластеризации. Также Redis имеет встроенный механизм реализации паттерна publish-subscribe, позволяющий микросервисам отправлять друг другу односторонние сообщения.
— Websocket – непрерывное соединение клиент-сервер поверх протокола HTTP с двусторонним обменов сообщениями.

Представим, что мы создали социальную сеть с некоторыми на первый взгляд простыми возможностями:
— лента новостей с фотографиями и геолокацией;
— обмен моментальными сообщениями между участниками;
— push-уведомления на мобильный телефон.

Эти требования реализуемы при использовании монолитной архитектуры, однако возникнут сложности с масштабированием и доступностью приложения. При использовании микросервисной архитектуры серверную часть концептуально можно разделить на следующие сервисы:
— RESTful API – HTTP-сервер с авторизацией, аутентификацией, разграничением доступа к данным на основе ролей (ACL), манипуляцией структурами данных, взаимодействие с СУБД.
— Chat API – HTTP-сервер, предоставляющий возможность обмена сообщениями между участниками социальной сети. Все сообщения сохраняются в отдельной базе данных.
— PubSub bridge – сервер, реализующий концепцию publish-subscribe между микросервисами и пользователями в режиме реального времени, имеющий подключения через адаптеры к Redis, WebSocket, сервису push-уведомлений.
— Upload – сервер, реализующий загрузку мультимедиа файлов, имеет встроенную возможность оптимизации изображений, а также изменение размеров и обрезку.

Архитектурный бизнес-процесс работает так: при отправке сообщения от одного пользователя к другому, сообщение достигает сервиса Chat, сохраняется в базу данных, далее этим сервисом отправляется в шину pubsub через Redis и достигает всех кластеров PubSub. Если к одному из них подключен получатель сообщения, то ему отправляется пакет данных по WebSocket и отображается в интерфейсе приложения. Также отправляется push-нотификация в операционную систему с предварительно зарегистрированным ключом устройства.

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