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