-
Микросервисная архитектура - это архитектурный подход к разработке больших приложений.
Суть его заключается в том, что приложение рассматривается не как единое целое, в привычном нам понимании,
а как множество маленьких независимых друг от друга сервисов.
В роли сервисов выступают также приложения, но с ограничением на то, что
каждый сервис должен работать только над 1 задачей!
Например, сервис, который сохраняет информацию о транзакциях, не должен заниматься выполнением этой транзакции.
Если вам не требуется высоконагруженное приложение, то нет смысла использовать микросервисную архитектуру.
Это как отсортировывать массив из 10 элементов с помощью алгоритма быстрой сортировки, когда есть пузырьковая:)
- Монолитное приложение - это привычное нам, студентам,
архитектура, когда программа состоит из одного .exe или .jar файла.
Для маленьких и простых приложений такая архитектура работает прекрасно, но, по мере расширения
приложения, появляются существенные проблемы.
-
Обсудим плюсы и минусы микосервисов и монолита, сравнивая друг с другом.
Не буду сильно вдаваться в подробности и приведу самые наглядные и интересные.
-
Первый плюс микросервисов это возможность смешивать языки программирования. Появляется возможность под каждую
задачу выбрать подходящий язык программирования.
Например:
-
для сервисов, на которые ожидается высокая нагрузка, лучше всего использовать язык Go
-
для работы с базами данных - Python
-
для разработки банковских ресурсов - Java
-
Основной минус микросервисов - это сложность коммуникации сервисов друг с другом.
В монолите разные модули приложения общаются привычным нам образом, взаимодействуя с памятью.
В микросервисах ситуация гораздо сложнее, так как сервисы не должны быть зависимы друг от друга,
вплоть до того, что они могут быть запущены на разных серверах.
Для решения этой проблемы и нужна система очередей сообщений.
-
Приведу еще плюс - дешевая масштабируемость, в сравнении с монолитом.
Что такое масштабируемость? Если простыми словами, это увеличение кол-ва серверов, на которых работает наше приложение,
с целью выдержать большую нагрузку на всю систему. Этот аспект является критически важным в обслуживании высоконагруженных приложений!
Кому нужно банковское приложение, которое не может выдерживать нагрузку в сотни тысяч активных пользователей?
А если нагрузка миллионы активных пользователей? Если ваше приложение не готово к такому, выши сервера буквально начнут гореть!
И единственный верный вариант в таких ситуациях это масштабирование.
Довольно очевидно чем микросервисы выигрывают в масштабируемости.
Типичная ситуация, например, в банке: у вас повышенная нагрузка на транзакции по валютным переводам.
Единственный вариант ее пережить это увеличить количество серверов. Монолитное приложение придется запускать целиком,
теряя драгоценные ресурсы сервера, в то время, как в микросервисах нужно будет запустить лишь нужный сервис
-
О плюсах и минусах можно говорить много, но вы, наверное, задаетесь вопросом. А что именно используется в реальной разработке?
Тут все достаточно просто. Молодая компания решила нанять команду разработчиков для написания.... пусть будет системы брокерских счетов.
Что хочет компания? Максимально быстрый результат и прибыль! Что можно написать максимально быстро? Правильно, монолитное приложение!
А как же высокая нагрузка? А масштабируемость? Я вам дам ответ! Очень низкий шанс того, что у маленькой компании будет высокая нагрузка
в сотни тысяч активных пользователей. А если появится? Тогда существует множество способов миграции с монолита на микросервисы!
Продемонстрирую вам картинку для наглядности!
-
Перейдем к более подробному обсуждению технологии очередей сообщения