Выгоды перехода от монолитной к микросервисной архитектуре приложения

Анализ архитектуры микросервисов как распределенной системы простейших и легко заменяемых модулей, их симметричное строение. Факторы перехода с монолитной на микросервисную архитектуру. Преимущества, инструменты и сложности микросервисного подхода.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 17.02.2023
Размер файла 585,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Выгоды перехода от монолитной к микросервисной архитектуре приложения

Кабарухин А.П.

Аннотация

архитектура микросервисная монолитная

распространение облачных сервисов к началу 2010-х годов привело к разочарованию разработчиков в классическом варианте архитектуры приложений. В качестве альтернативы предложили архитектуру микросервисов как распределенную систему простейших и легко заменяемых модулей. Они должны работать, как рабочие у конвейера: выполнять одну элементарную функцию и передавать задачу дальше. При этом микросервисы выстраиваются не иерархично, а симметрично. Массовый переход с монолитной на микросервисную архитектуру (MSA, MicroServiceArchitecture) связан с развитием облачных сервисов и необходимостью обеспечить максимально оперативное обновление и модернизацию сервисов в соответствии с меняющимися бизнес-задачами. В статье раскрываются ключевые особенности, преимущества, инструменты и сложности микросервисного подхода.

Ключевые слова: монолитная архитектура, микросерверная архитектура, преимущества.

Abstract

THE BENEFITS OF MOVING FROM A MONOLITHIC TO A MICROSERVICE APPLICATION ARCHITECTURE Kabarukhin A.P.

the proliferation of cloud services by the early 2010s led to disillusionment of developers with the classical variant of application architecture. As an alternative, microservices architecture was proposed as a distributed system of simple and easily replaceable modules. They should work like workers on a conveyor belt: perform one elementary function and pass the task on. In this case, microservices are not built hierarchically, but symmetrically. Mass transition from monolithic to microservices architecture (MSA, Micro Service Architecture) is associated with the development of cloud services and the need to ensure maximum prompt updating and upgrading of services in accordance with changing business tasks. The article describes key features, advantages, tools and complexities of microservice approach.

Keywords: monolithic architecture, microserver architecture, advantages.

Стремительное развитие и распространение сетевых облачных сервисов к началу 2010-х годов привело к разочарованию в классическом, так называемом монолитном варианте архитектуры приложений. Из-за сложности отдельных модулей, зачастую представляющих собой целые программные системы, а также из-за необходимости обеспечивать совместимость между ними посредством стандартных протоколов, внесение любых изменений и дополнений стало нетривиальной задачей, отнимающей слишком много времени.

Довольно долгое время в разработке информационных систем преобладал метод создания "монолитных" приложений, в которых изначально не выделялись ни пользовательский уровень, ни уровень бизнес-логики. Затем появились подходы, в которых стали выделять несколько уровней (соответствующих монолитной архитектуре клиент-сервер):

1) пользовательские интерфейсы;

2) уровень бизнес-логики системы;

3) уровень базы данных.

Первый уровень называется Front-End, второй и третий - Back-End. Соответственно, разработчики условно делятся на две группы Front-Endразработчиков и Back-Endразработчиков. Основным недостатком монолитных приложений является необходимость сборки всего приложения после внесения изменений, что имеет следующие последствия [1]:

- значительное увеличение времени на развертывание системы и внесение изменений;

- сильная связь, делающая разработчиков зависимыми друг от друга, поскольку отказ одного компонента приводит к отказу всей системы;

- большая часть кода не позволяет легко переходить на новые технологии, внесение изменений также затруднено, в результате приложения устаревают;

- сложно масштабировать приложения;

- при внесении изменений значительно возрастает количество ошибок, что приводит к частым сбоям системы [2].

Приложения, построенные на монолитной архитектуре (или просто монолиты) - это не обязательно приложения с одной функцией. Они содержат отдельные классы и функции, однако те крепко связаны друг с другом. Изъятие одного модуля неизбежно вызывает изменения в работе всей системы. Отсюда - ряд значимых недостатков:

1. Чтобы внести одно изменение, необходимо пересобрать всё приложение.

2. Невозможно масштабировать отдельный модуль - придётся переделывать всё приложение.

3. Разработка ограничена изначально выбранным набором языков программирования, фреймворков и других инструментов. Хочется использовать что- то альтернативное - извините, у нас такого нет, работайте с тем, что есть.

4. Сломался один модуль - работать, скорее всего, перестанет весь сервис.

5. Сложная структура связей между модулями замедляет выход обновлений. Каждое требует серьезного тестирования на баги и регрессии кода (новые ошибки в уже протестированном функционале). Соответственно, в одном обновлении появляется целая кипа изменений.

6. Поначалу приложение имеет понятную структуру и быстро развивается. А потом понеслось: длинный и сложный код, рамки модулей постепенно стираются, между компонентами возникает все больше неочевидных взаимосвязей [3].

В том числе в классической монолитной архитектуре невозможно одновременное использование разных языков программирования. Например, если весь проект написан на Java, а модуль для бухгалтерии выгоднее и актуальнее написать на Go, то осуществить это будет проблематично.

Отказоустойчивость монолитного приложения обеспечить сложнее, чем микросервисного, поскольку при сбое единой базы данных все его модули становятся неработоспособными. Выход из строя базы данных одного из микросервисов не так сильно повлияет на остальные [4].

В качестве ответа на этот вызов была предложена архитектура микросервисов как распределенная система простейших и легко заменяемых модулей, выполняющих по возможности единственную элементарную функцию. При этом микросервисная система имеет симметричную, одноранговую, а не иерархическую организацию, что снимает необходимость в сложной организации взаимосвязей. Сервисы связываются между собой и с клиентами с использованием лёгких протоколов, например, через HTTPили текстовыми сообщениями. В результате создаётся система, простая в развёртывании и модернизации с функциями автоматической разработки и обновления.

К 2021 году микросервисная архитектура в центре внимания, причём, не только специалистов: о ней пишут в блогах, в соцсетях, обсуждают в прессе и на различных конференциях. Об успешном внедрении микросервисов заявляют представители Amazon, Google, Netflixи Twitter. В России об опыте перехода на микросервисы сообщали крупные банки, а также, например, «М.Видео-Эльдорадо» и «МегаФон» [5].

При этом в сообществе программистов всё чаще звучат голоса скептиков, не считающих микросервисы чем-то принципиально новым. По их мнению, это просто реализация сервис-ориентированной архитектуры (SOA) на более низком уровне. Как бы то ни было, микросервисная архитектура имеет очевидные преимущества, особенно в сфере Agile-разработки и развёртывания сложных приложений корпоративного уровня.

Микросервисная архитектура -- это подход к созданию приложения, который предполагает отказ от единой, монолитной структуры. То есть вместо выполнения всех ограниченных контекстов приложения на сервере посредством внутрипроцессных взаимодействий используется множество небольших приложений, каждое из которых соответствует какому-то ограниченному контексту [6].

По состоянию на 2021 год микросервисная архитектура считается наиболее естественным подходом для разработки облачных приложений. Таковые состоят из множества слабо связанных и независимо разрабатываемых мелких модулей -- сервисов. Для этих сервисов, как правило, характерны три свойства:

- у них есть собственный стек, включающий базу и модель данных;

- они взаимодействуют друг с другом посредством сочетания RESTAPI, потоков событий и брокера сообщений;

- модули приложения подбираются исходя из конкретных потребностей бизнеса [7].

С точки зрения бизнеса и чисто организационных задач, преимущества и выгоды переходы к микросервисам сводятся к трём основным:

- лёгкость обновления кода;

- разные команды могут использовать разные стеки для разных модулей;

- компоненты могут масштабироваться независимо друг от друга, что снижает затраты и стоимость масштабирования всего приложения в целом в тех случаях, если узким местом выступает лишь какая-то одна функция [8].

Микросервисная архитектура приложения родилась из монолитной архитектуры, когда та стала сложной и неудобной в работе. Главное отличие микросервисов от монолита - в использовании специализированных более простых программ (модулей) при выполнении сценария приложения. Тогда как в монолитной архитектуре использовались внутрипроцессные взаимодействия. И, что самое удобное, модули могут находиться на разных серверах и их взаимодействие происходит через сеть по протоколонезависимой технологии.

Микросервисная архитектура имеет ряд преимуществ перед монолитной:

- симметричная архитектура (в монолитных приложениях - иерархическая);

- взаимозаменяемость микросервисов;

- независимость микросервисов друг от друга;

- организация модулей вокруг отдельных функций;

- написание микросервисов с помощью любых программных средств, оптимальных для каждого конкретного модуля, при этом они хорошо «понимают» друг друга благодаря интерфейсу. Создание интерфейса является наиболее сложной задачей;

- микросервисы вызываются только потребителем, но не друг другом.

Рис. 1. Различие микросервисной и монолитной архитектуры

Чтобы уточнить отличия микросервисов от других архитектур, отметим, что микросервисное приложение состоит из множества мелких независимых и слабо связанных между собой сервисов, в то время как в монолите все его компоненты тесно взаимосвязаны и работают как единый сервис. Помимо прочего, это значит, что если какой-то один процесс в приложении с монолитной архитектурой становится более востребованным, приходится масштабировать всё приложение в целом. Сбой в каком-то одном процессе может поставить под угрозу всю систему. Наконец, такая сложность ограничивает возможности модернизации и затрудняет внедрение новых идей.

Монолитная архитектура (Monolithic) отличается тесной взаимосвязью между компонентами, включая бизнес-логику (BusinessLogic) и слой доступа к данным (DataAccessLayer), и выступает как единый сервис. В микросервисной архитектуре(Microservices) клиент через общий пользовательский интерфейс (UI) получает доступ к отдельным слабо связанным между собой микросервисам(Microservice).

Рис. 2. Различие микросервисной и монолитной архитектуры с точки зрения сервисов

Микросервисы в современном понимании имеют следующие особенности:

• легкость и простота: каждый модуль выполняет уникальную функцию и имеет небольшой размер;

• конечность, атомарность;

• гибкость: модуль можно легко изменить, добавив в его работу необходимые опции;

• взаимозаменяемость;

• полиморфизм;

• комбинирование микросервисов для реализации разных функций.

Микросервисная архитектура устранила недостатки монолитного ПО, обеспечив:

- изоляцию и минимизацию изменений;

- ускорение разработки;

- возможность легко подстраивать ПО под структуру бизнеса [9].

В итоге отметим, что в монолитной архитектуре функции инкапсулируются в одном приложении. Когда монолитное приложение небольшое по размеру и имеет всего несколько функций, он обладает своими сильными сторонами, например, простота разработки, тестирования, развертывания и масштабирования. Если, например, необходимо больше вычислительных возможностей, достаточно продублировать весь монолит, и при небольшом размере системы будут лишь небольшие накладные расходы.

Слабые стороны этой системы проявляются, когда монолит начинает обновляться и развиваться, увеличиваясь в размере и количестве функций. Как только это произойдет, недостатки монолитной архитектуры перевесят его преимущества.

Например, если требуется больше вычислительных возможностей, масштабирование большого монолита приведет к большим накладным расходам по сравнению с небольшим монолитом. Еще один недостаток, вызванный большим размером монолита, заключается в том, что разработка может замедлиться и, как следствие, стать препятствием для непрерывного развертывания из-за более длительного времени запуска.

У микросервисов есть множество преимуществ по сравнению с монолитной архитектурой, что приводит к миграции существующих монолитных архитектур в архитектуры на основе микросервисов.

Ключевыми преимуществами микросервисов являются отказоустойчивость и ремонтопригодность. Также разделение системы на независимые и самостоятельно развертываемые службы помогает командам разработчиков тестировать свои службы и вносить изменения независимо от других разработчиков, что упрощает распределенную разработку. Небольшой размер микросервисов способствует тому, что код становится более понятным для разработчиков [10].

Еще одно ключевое преимущество микросервисов - масштабируемость. В микросервисной архитектуре каждый микросервис может быть развернут на разных машинах, каждый с разным уровнем производительности, и может быть написан на более подходящем языке программирования. Если, например, существует узкое место в конкретном микросервисе, его можно поместить в контейнер и запустить на нескольких параллельно работающих хостах, без необходимости развертывания системы на новой мощной машине.

Следующее существенное преимущество микросервисов - возможность их замены. Поскольку отдельные микросервисы имеют небольшой размер, их легко заменить на более совершенную реализацию или даже удалить. Команды разработчиков, использующие подходы с использованием микросервисов, не сталкиваются с большими трудностями с полным переписыванием микросервисов, когда это необходимо.

Важным преимуществом микросервисов является отказоустойчивость. Отказ микросервиса обычно не влияет на всю систему. Тем не менее, неисправные микросервисы также могут быть быстро перезапущены.

Еще одно ключевое преимущество микросервисов - надежность, так как данная технология разработки программного обеспечения подразумевает создание больших систем из простых и небольших компонентов с чистыми интерфейсами (микросервисами) [11].

Переход на микросервисную архитектуру приложений позволит компании обеспечить условия для роста - гибкость, масштабируемость, отказоустойчивость систем.

Список литературы /References

1. Холодок Д.А., Пресняцкий В.Ю., ЛецукРА.Микросервисы как архитектурный стиль / / Образование и наука в России и за рубежом, 2019. Ц (62). С. 2Ц 218.

2. Гольчевский Ю.В., Ермоленко А.В. Актуальность использования микросервисов при разработке информационных систем // Вестник Сыктывкарского университета. Серия 1. Математика. Механика. Информатика, 2020. № 2 (35). [Электронный ресурс]. Режим доступа: https://cyberlemnka.ru/ardcle/n/aktualnost-ispolzovaniya-mikroservisov- pri-razrabotke-informatsionnyh-sistem/(дата обращения: 14.01.2022).

3. Микросервисная архитектура: теория и практика. [Электронный ресурс]. Режим доступа: https://vc.ru/dev/295980-mikroservisnaya-arhitektura-teoriya-i-praktika/(дата

обращения: 31.01.2022).

4. Опольский В. Переход от монолита к микросервисам: когда опыт разработчиков трансформируется в бизнес-результат. [Электронный ресурс]. Режим доступа: https://www.it-world.ru/tech/practice/173784.html/(дата обращения: 31.01.2022).

5. Переход на микросервисы: опыт «М.Видео-Эльдорадо» и «МегаФона». [Электронный ресурс]. Режим доступа: https://mcs.mail.ru/blog/perekhod-na-mikroservisy-opyt-m-video- eldorado-i-megafona/(дата обращения: 31.01.2022).

6. Осипов Дмитрий Борисович. Проектирование программного обеспечения с помощью

микросервисной архитектуры // Вестник науки и образования. 2018. №5 (41). URL: [Электронный ресурс]. Режим доступа: https://cyberleninka.ru/artide/n/proektirovanie- programmnogo-obespecheniya-s-pomoschyu-mikroservisnoy-arhitektury/ (дата

обращения: 14.01.2022).

7. What are Microservices? IBM Cloud Education, 2021. [Электронный ресурс]. Режим доступа: https://www.ibm.com/doud/learn/microservices/(дата обращения: 31.01.2022).

8. Нечай О. Все говорят о микросервисной архитектуре приложений. Чем она хороша и как на нее перейти? [Электронный ресурс]. Режим доступа: https://www.tadviser.ru/index.php/(дата обращения: 31.01.2022).

9. Принципиальное отличие микросервисной архитектуры от монолитной. [Электронный ресурс]. Режим доступа: https://hawkhouse.ru/blog/kogda-opravdano- ispolzovanie-mikroservisnoj -arhitektuiy/ (дата обращения: 31.01.2022).

10. Мартин Р. Чистая архитектура. Искусство разработки программного обеспечения. СПБ: Питер, 2018.

11. Радостев Д.К., Никитина ЕЮ. Стратегия миграции программного кода из

монолитной архитектуры в микросервисы // Вестник Пермского университета. Серия: Математика. Механика. Информатика. 2021. №2 (53). [Электронный ресурс]. Режим доступа: https://cyberleninka.ru/artide/n/strategiya-migratsu-programmnogo-koda-iz-

monolitnoy-arhitektury-v-mikroservisy/ (дата обращения: 14.01.2022).

Размещено на Allbest.ru

...

Подобные документы

  • Основные концепции разработки приложения в архитектуре MVVM. Проектирование базы данных, предназначенной для сбора информации о дорожно-транспортных происшествиях. Классификация и типы архитектуры "клиент–сервер", ее основные достоинства и недостатки.

    курсовая работа [4,1 M], добавлен 25.11.2015

  • Проблема управления инфраструктурой веб-приложения с микросервисной архитектурой. Тенденции к созданию программного обеспечения. Ключевые направления в разработке веб-приложений. Архитектура спроектированной системы мониторинга. Эффективность сервиса.

    статья [532,1 K], добавлен 10.12.2016

  • Основные инструменты построения Web-приложения. Язык сценариев PHP. Системный анализ предметной области базы данных. Коды SQL запросов на создание таблиц. Разработка Web-приложения. Описание функциональности модулей. Система управления содержимым статей.

    курсовая работа [4,8 M], добавлен 28.04.2014

  • Проектирование информационной системы на основе архитектуры "файл-сервер", "клиент-сервер", многоуровневой архитектуры, Intranet-системы. Преимущества и недостатки файл-серверного подхода при обеспечении многопользовательского доступа к базе данных.

    лабораторная работа [220,5 K], добавлен 02.02.2015

  • Многоуровневые архитектуры клиент–сервер. Диаграммы классов, реализующих уровни презентации, бизнес–логики и базы данных приложения. Словесное описание процесса выполнения транзакций. Создание, изменение и удаление хранимых процедур, их выполнение.

    курсовая работа [3,4 M], добавлен 23.03.2013

  • Выбор и обоснование аппаратного обеспечения. Типы архитектуры веб-приложений. Шаблоны проектирования архитектуры приложения. Разработка инфологической модели базы данных. Подготовка к разработке приложения. Рассмотрение причин возникновения паттернов.

    дипломная работа [3,0 M], добавлен 27.11.2022

  • Основные концепции разработки приложения в трёхуровневой архитектуре. Проектное решение, реализующее модель реляционной БД. Спецификация на разработку интерфейса. Описание выполнения транзакций прибытия и убытия судна. Инсталляционные файлы приложения.

    курсовая работа [4,0 M], добавлен 26.12.2011

  • Проектирование локальной вычислительной сети. Выбор сетевой топологии, архитектуры и структуры системы. Анализ информационных потоков в распределенной системе, выбор системы имитационного моделирования. Определение затрат на создание и освоение системы.

    дипломная работа [3,6 M], добавлен 21.05.2015

  • Особенности архитектуры MIPS компании MIPS Technology. Иерархия памяти. Обработка команд перехода. Адресная очередь. Переименование регистров. Обоснование выбора операционной системы. Perl-эмулятор и сборка ядра. Электрическая и пожарная безопасность.

    дипломная работа [180,2 K], добавлен 06.03.2013

  • Linux - ядро операционной системы с монолитной архитектурой. Прародители операционной системы Linux, ее стабильные и экспериментальные версии. Процесс внедрения Linux и свободного программного обеспечения в школах и государственных учреждениях России.

    реферат [18,2 K], добавлен 19.01.2013

  • Исследование спецификации логической игры "Сапёр". Системное и функциональное проектирование приложения. Разработка программных модулей. Обзор классов, необходимых для создания интерфейса данного приложения. Инструменты для реализации логической игры.

    курсовая работа [1,2 M], добавлен 13.01.2016

  • Базовая структура процессора. Хранение признаков перехода и состояний. Применение буферного регистра. Алгоритм выполнения команды условного перехода. Увеличение быстродействия процессора. Выполнение микроопераций и вычисление логических условий.

    курсовая работа [777,7 K], добавлен 31.01.2016

  • Разработка AppleTalk как системы распределенной сети клиент-сервер, сетевой архитектуры Apple, которая входит в операционную систему Macintosh; основы технологии. Среда ArcNet, сетевая архитектура для сетей масштаба рабочей группы, ее функционирование.

    реферат [20,2 K], добавлен 25.11.2009

  • Характеристика объекта автоматизации. Создание многоуровневой архитектуры приложения, отладка метода безошибочной идентификации пользователей системы. Разработка нестандартного метода преобразования объектов базы данных в объекты классов приложения.

    курсовая работа [395,4 K], добавлен 28.04.2015

  • Описание предметной области и разработка электронного учебника на основе архитектуры "клиент – сервер". Тестирование программы менеджера и создание интерфейса главного меню. Вход в программу в качестве пользователя и обеспечение перехода к данным лекций.

    курсовая работа [1,5 M], добавлен 26.02.2015

  • Анализ предметной области. Выработка требований и ограничений. Серверная часть информационной системы. Запросы клиентского приложения. Триггеры для поддержки сложных ограничений целостности в базе данных. Пользовательский интерфейс клиентского приложения.

    курсовая работа [2,6 M], добавлен 21.02.2016

  • Описание программного обеспечения AnyLogic, поддерживающего три метода имитационного моделирования (системная динамика, дискретно-событийное и агентное моделирование). Разработка модели процесса перехода пассажиров на монорельсы через кассы и турникеты.

    контрольная работа [524,9 K], добавлен 21.05.2015

  • Требования, предъявляемые к свойствам систем распределенной обработки информации. Логические слои прикладного программного обеспечения вычислительных систем. Механизмы реализации распределенной обработки информации. Технологии обмена сообщениями.

    курсовая работа [506,8 K], добавлен 03.03.2011

  • Обзор технических условий, должностных обязанностей, положений и инструкции по эксплуатации вычислительной техники в ТОО "Степноишимская опытная станция". Анализ характеристик распределенной автоматизированной системы. Изучение программы "1С-Бухгалтерия".

    отчет по практике [198,8 K], добавлен 11.03.2014

  • Разработка и формализация эффективного подхода к оценке качества каналов трафика мобильного приложения. Преимущества работы с социальными сетями. Тестирование возможных типов каналов по привлечению установок приложения. Расчёт средней стоимости лидов.

    дипломная работа [2,6 M], добавлен 09.02.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.