Перед вами карта компетенций системного аналитика и сегодня мы поговорим про архитектуру.
Микросервисы и монолит
Сначала поговорим о клиент-серверной архитектуре и микросервисах. Приложение может представлять из себя монолит. Тогда клиент просто обращается к этому монолиту как к серверу и получает нужные данные. В таком формате проект проще реализовать, но сложнее поддерживать. Особенно если он сильно разрастается. Любое изменение в монолите может в теории повлиять на все его функции, а отказ монолита (сервер упал, например) приведет к недоступности сразу всех сервисов. Чтобы избежать большей части этих проблем, можно использовать микросервисную архитектуру. Тут каждый микросервис может выступать как отдельное приложение, иметь свою БД и поддерживаться независимо от остальных микросервисов.
Запрос-ответ
Клиент общается с микросервисами по системе «запрос ответ». Например, нужно получить какие-то данные от сервиса 1. Этот сервис сам знает, куда ему нужно обратиться чтобы эти данные собрать и отдать. Например, он запросит и получит данные от сервисов 2 и 3, а потом используя полученные данные сформирует запрос к сервису 4, получит ответ, обработает его и отправит клиенту. Точно также клиент может иметь возможность обратиться напрямую к тому или иному сервису (а может её и не иметь).
Serverless
Что касается так называемой serverless (безсерверной) архитектуры – она очень похожа на микросервисную, только все эти микросервисы зашиты в облако и клиент общается именно с ним по API. Внутри облака провайдер уже сам разбираться сколько инстенсов (экземпляров) тех или иных сервисов ему поднять и как между ними распределить очередь запросов от клиентов. Это удобнее масштабировать, т.к. масштабирование по сути лежит на провайдере, но вот сменить провайдера при таком подходе будет достаточно сложно. Да и сюрпризы в виду того, что провайдер решил отключить какие-то редко используемые сервисы и при запросе будет запускать их заново вследствие чего клиенту придется подождать, не исключены.
Заключение
В заключении повторим основные моменты:
- Ваше приложение может быть монолитным и клиент будет общаться с ним как с единым сервером, но такое приложение сложнее поддерживать и масштабировать.
- Микросервисы проще поддерживать и масштабировать.
- А если использовать serveless подход, масштабирование вообще можно свалить на провайдера, но это чревато излишней зависимостью от него.