Practical Microservices Architectural Patterns
Event-Based Java Microservices with Spring Boot and Spring Cloud
Вводная часть книги содержит общее описание классического подхода к построению архитектуры систем:
- менйфрейм архитектура, когда есть центральный супер компьютер и куча «тупых» терминалов, которые отображают данные, но весь стейт хранится на сервере;
- клиент/серверная архитектура, когда стейт хранится на клиента, а тяжелые операции выполняются на сервере
- 3-х уровневая архитектура системы – классическое разделение на клиентский уровень, бизнес логику (средний уровень) и данные
- многоуровневая архитектура – выделение из среднего уровня несколько промежуточных уровней.
В большинстве случаев архитектура систем используется сетевую инфраструктуру для взаимодействия между клиентом и сервером. Для этого есть несколько стандартных решений:
- соединение точка/точка
- брокер сообщений
- общая шина сообщений
В свою очередь, архитектурные уровни, входящие в систему, могут разделяться на слои приложения, которые бьются на модули. Модульный подход – классика построения сложных систем.
У модульного подхода несколько недостатков:
– ад зависимостей, которые с ростом системы все труднее поддаются управлению;
- ограничения масштабирования, которые вытекают из предыдущего пункта;
- монолитность на уровне системы, несмотря на то что внутри приложение разделено на слои и модули, разделение уровней системы невозможно и они развертываются как единый элемент.
Основные принципы построение масштабируемых систем:
- Стейтлес дизайн – без единой точки состояния система может тиражироваться на любое количество узлов;
- Использование принципа разделяй и властвуй – способ разбить монолит на части и вынести части за пределы единого узла развертывания;
Альтернативой классическим монолитным подходам выступает архитектура с независимыми модулями, которая имеет два основных преимущества:
- параллельная разработка
- разделенная публикация
Основная проблема такого решение – организация взаимодействия между модулями. При синхронном взаимодействии возникают длительные периоды когда модуль ничего не делает ожидая ответ, поэтому асинхронная природа запросов – вынужденное зло.
Наиболее продвинутым вариантом построения архитектуры с независимыми модуля является микросервисная архитектура, у нее следующие особенности:
- общение сервисом посредством сообщений, которые передаются через сетевую инфраструктуру
- разнородная, независимая природа сервисов (могут быть реализованы на разных языках, в разных модулях развертывания)
- сосредоточенность на бизнес задачах
- размер сервиса небольшой, ограничен решением маленькой задачи, с возможностью независимой публикации сервиса и его обновления.
В основе взаимодействия микросервисов лежат REST-запросы и JSON нотация для представления данных. Но так же может быть использован другой формат, например XML.
MASA (Mesh App and Service Architecture) – архитектурное решение, которое позволяет объединить и организовать различных пользователей, с различными девайсами, работающих на различные типах сетей. В такой архитектуре бесшовно должны работать мобильные приложения, веб-приложения, десктопные приложения, IOT устройства.
Варианты построения облачной инфраструктуры:
Infrastructure as a Service — одна из моделей обслуживания в облачных вычислениях, по которой потребителям предоставляются по подписке фундаментальные информационно-технологические ресурсы — виртуальные серверы с заданной вычислительной мощностью, операционной системой и доступом к сети
Platform as a Service — модель предоставления облачных вычислений, при которой потребитель получает доступ к использованию информационно-технологических платформ: операционных систем, систем управления базами данных, связующему программному обеспечению, средствам разработки и тестирования
Software as a Service — одна из форм облачных вычислений, модель обслуживания, при которой подписчикам предоставляется готовое прикладное программное обеспечение, полностью обслуживаемое провайдером
Варианты виртуализации: виртуальные серверы или контейнеры.
#microservice