Категории
Микросервисы как архитектура разработки ПО
Довольно-таки модная и уважаемая архитектура - Микросервисы, в первоисточнике называется как MSA (MicroService Architecture) и впервые о ней я узнал вот на этом докладе:
Скажу, что у MSA есть старший брат - SOA (Service Oriented Architecture). Об этой архитектуре я пока ничего не упоминал, если когда-нибудь решу написать о ней, то вместо этого предложения здесь появится ссылка. Продолжу дальше об архитектуре микросервисов и их основных принципах:
- Модульность. Приложение состоит из нескольких сервисов, представляющих собой законченные приложения
- Независимость реализации. Сервисы могут быть реализованы на различных языках программирования, с использованием различных технологий
Исходя из этих принципов мы имеем определенные плюсы...
- Высокая стабильность. При отказе одного из сервисов, например, из-за программной ошибки, есть возможность откатить неработающий сервис или установить новую, более стабильную версию, не останавливая все приложение.
- Разнообразие технологий. Микросервисы не ограничены только одной технологией, принятой для всего приложения.
- Независимое развертывание. Простые сервисы проще разворачивать, и меньше вероятность отказа системы.
... и определенные минусы
- Время работы напрямую зависит от проходимости каналов, по которым микросервисы общаются между собой.
- Сложность разработки из-за наличия различных технологий.
- Каждый микросервис должен быть достаточно маленьким, чтобы выход его из строя не остановил работу всего приложения.
- Каждый микросервис должен быть достаточно автономным, чтобы выход из строя соседних микросервисов не остановил работу текущего.
Из перечисленных минусов мы видим, что к архитектуре есть только одно требование, тогда как к проектированию и разработке - три. Правильным выходом из этой ситуации может быть разбиение кода по сервисам основываясь на бизнес логике (обработка запроса на вход в систему, составление отчета по продажам, построение графика по данным из базы), а не на функционале, как мы это обычно делаем в монолитном приложении (Users, Storage, Back-End, DB). Такие функционально-законченные модули становятся действительно независимыми и их применение становится очевидным. Кроме того, общий функционал приложения может быть легко и безболезненно расширен либо изменен.
При общении я слышал и читал в сети о распространенной проблеме микросервисов в плане тестирования. В тестировании монолитного приложения все понятно. Проводить мануальное тестирование для микросервисной архитектуры это, мягко говоря, кошмар. Зато открывается не паханное поле идей для автоматизированного тестирования. Если проектировщики и разработчики все сделают правильно, то у нас получается приложение, которое:
- Состоит из набора функционально законченных сервисов
- Имеет взаимодействие между своими сервисами через менеджер сообщений
- Имеет стандартный интерфейс сообщений у всех сервисов
Здесь ключевой точкой является менеджер сообщений, к которому нам нужно подключить логгер и вуаля! Мы получаем четкий и понятный лог работы каждого сервиса, при этом взаимодействие сервисов между собой так же становятся прозрачным. А значит мы можем быстро выявить проблемный сервис и при необходимости его исправить. В случае WEB-приложения можно реализовать мониторинг, который будет в режиме реального времени сообщать нам о возникших проблемах.
Так как интерфейс сообщений у нас стандартный, нам не надо подстраиваться под каждый сервис в отдельности, достаточно использовать набор известных пар "запрос-ответ", например, из той же БД. А это так всеми любимый DDT (Data Driven Testing), что приводит нас к потрясающей масштабируемости и производительности.
Информация | |||
---|---|---|---|
Автор | webmancer | Нравится | 0 |
Рейтинг | 1 | Не нравится | 0 |
Голосов | 1 | Прочитали | 1 |
Дата | 2012-04-07 09:00:00 | В избранном | 0 |
Ваша реакция |
Только авторизованные пользователи могут участвовать в рейтингах, делать заметки и добавлять в избранное. |
На рекомендательном сервисе WEBmancer.Org только зарегистрированные пользователи могут комментировать и оставлять рецензии. Авторизованный пользователь так же может ставить отметки книгам, фильмам и другим постам. Вести учет прочитанных книг и просмотренных фильмов. Добавлять посты в избранное и иметь к ним быстрый доступ.