Научная статья на тему 'Исторические аспекты появления микросервисной архитектуры'

Исторические аспекты появления микросервисной архитектуры Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
578
82
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МИКРОСЕРВИС / ВЕБ-СЛУЖБА / ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ / КОМПОНЕНТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ / СЕРВИС-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ / MICROSERVICE / WEB-SERVICE / OBJECT-ORIENTED PROGRAMMING / COMPONENT-BASED SOFTWARE ENGINEERING / SERVICE-ORIENTED PROGRAMMING

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Артамонов И. В.

Микросервисы являются популярной и перспективной технологией проектирования и разработки распределенных систем. Они инкапсулируют прикладную функциональность и взаимодействуют с внешним миром стандартизованным способом, позволяя строить гибкие, надежные и многофункциональные системы, способные к дальнейшему развитию и масштабированию. Микросервисы не являются зачастую самостоятельными независимыми программами, но вобрали в себя все лучшие качества, которые программная инженерия искала в элементах приложения последние несколько десятков лет. Статья рассматривает воплощение идей структурного программирования, объектно-ориентированного, модульного и компонентно-ориентированного в микросервисах и сервис-ориентированной разработке. Показаны исторические аспекты появления и развития технологий повторного использования алгоритмов, инкапсуляции кода и данных, реализации интерфейсов. Сетевые технологии перенесли объектные идеи на уровень распределенных систем в виде самостоятельных компилируемых компонентов CORBA, DCOM и пр. Однако рыночные реалии, высокая скорость развития ИТ, общая неопытность разработчиков и другие причины спровоцировали сложности в разработке и поддержке компонентных систем. В начале 2000-х идеи, оформленные еще в объектно-ориентированном программировании, получили перерождение в веб-сервисах распределенных компонентах, ориентированных на протоколы интернета. Область веб-сервисов в отличие от компонентной разработки хорошо стандартизована и поддерживается всеми крупнейшими поставщиками средств разработки ПО. Веб-сервисы спровоцировали появление сервис-ориентированного программирования, сервис-ориентированной архитектуры и множества других технологий. Но стандартизация привела к обратному эффекту разработчики систем должны были следовать множеству правил, которые не всегда обязательно поддерживать, если система будет применяться исключительно в локальной сети одной компании. Это было одной из причин появления концепции микросервисов легковесной версии веб-сервиса, не ограниченной протоколами, но полностью соответствующей сервис-ориентированной методологии разработки.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Microservices are popular and promising technology of distributed software design and development. They encapsulate applied functionality and interact with outside world by standardized way. They allow building flexible, reliable and multifunctional systems which capable of further advance and scalability. Microservices are often not independent and separate software, but they absorb best qualities that were being sought by software engineering during last decades. The paper shows how ideas of structured, object-oriented and component-based programming were implemented in microservices and service-oriented software. It shows historical aspects of appearance and progress such technologies as algorithms reusability, code and date encapsulation, interface implementation. Network technologies of 1990-th moved object-oriented ideas in distributed layer as independent compiled components of CORBA, DCOM et al. However market condition, high-speed IT progress, lack of distributed development experience and other reasons caused many difficulties in component-based software engineering. In beginning of 2000-th ideas emerged from object paradigm were reborn in web-services distributed software components oriented to using internet protocols. Web-services, as opposed to distributed components, are well-standardized, cross-platform and supported by major vendors of software development tools. Web-services entailed appearance of a service-oriented development, a service-oriented architecture and number of other technologies. But the standardization led to boomerang effect developers have to follow multitude of rules that are not necessary to fully support within isolated local company network. It was a reason to microservice as a lightweight version of web-service without hard protocols restrictions but fully met to service-oriented methodology.

Текст научной работы на тему «Исторические аспекты появления микросервисной архитектуры»

технической конференции студентов, аспирантов и молодых ученых, Томск, 13-15 мая 2015 г. -Томск: В-Спектр, 2015: В 5 частях. - Ч. 5. - С. 304-306.

2. Дмитриев В.М. Формализм сетей Петри с транзактами для моделирования бизнес-процессов / В.М. Дмитриев, Т.Е. Григорьева, С.А. Панов, Е.В. Истигечева, И.В. Дмитриев // Информатика и системы управления. - 2016. - № 2 (48). - С. 36-47.

3. Панов С.А. Интерактивное документирование бизнес-процессов в среде моделирования МАРС / С.А. Панов, Т.Е. Григорьева // Электронные средства и системы управления: Материалы докладов XI Международной научно-практической конференции, Томск, 25-27 ноября 2015 г. -Томск: В-Спектр, 2015: В 2 ч. - Ч. 2. - С. 289-293.

4. Григорьева Т.Е. Моделирование систем массового обслуживания на примере очереди в банке // Научная сессия ТУСУР-2016: материалы Международной научно-технической конференции студентов, аспирантов и молодых ученых, Томск, 25-27 мая 2016 г. - Томск: В-Спектр, 2015: в 6 частях. - Ч. 3. - С. 105-108.

5. Истигечева Е.В. Моделирование логистических схем бизнес-процессов / Е.В. Истигечева, Т.Е. Григорьева // Информатика и системы управления. - 2016. - № 1 (47). - С. 25-33.

6. Истигечева Е.В. Моделирование бизнес-процессов на примере модели «Сбыт» / Е.В. Истигечева, Т.Е. Григорьева, С.А. Панов // Таврический научный обозреватель. - 2015. - № 3, часть 2. - С. 55-59.

7. Истигечева Е.В. Моделирование бизнес-процессов на примере модели «Хранение» / Е.В. Истигечева, Т.Е. Григорьева, С.А. Панов // Научная дискуссия: вопросы технических наук: Сборник статей по материалам XL международной заочной научно-практической конференции, Москва, 2015 г. — № 11 (29). - Москва: Изд. «Интернаука», 2015. - С. 17-22.

УДК 004.42

ИСТОРИЧЕСКИЕ АСПЕКТЫ ПОЯВЛЕНИЯ МИКРОСЕРВИСНОЙ АРХИТЕКТУРЫ6

Артамонов Иван Васильевич, к.т.н., доцент Байкальского государственного университета, Россия,

Иркутск, ivan.v.artamonov@gmail. com

Последние годы достаточно часто в литературе, посвященной программной инженерии, можно встретить термин «микросервисная архитектура» [1-3]. Это сравнительно молодая концепция, которая, на наш взгляд, является прямым следствием развития представлений и тенденций в области архитектуры распределенных программных систем.

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

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

6 Работа публикуется при финансовой поддержке РФФИ в рамках научного проекта № «16-37-00095 мол_а»

21

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

В статье будет рассмотрен сравнительно новый подход к реализации сервис-ориентированной парадигмы в виде микросервисов через призму некоторых стержневых идей современной программной инженерии.

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

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

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

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

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

При этом объектно-ориентированный подход также не был лишен недостатков [5]. Во-первых, существует проблема «уязвимых» базовых классов - изменения в родительских классах, от которых унаследованы другие, может привести к потере функциональности последних. Во-вторых, при распространении библиотек классов нередко возникает ситуация, когда код классов из библиотеки модифицируется под специфические задачи, чем нарушается согласованность всей системы. В-третьих, рост сложности программных систем приводит к тому, что иерархии классов проектов становятся запутанными и хуже поддаются сопровождению.

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

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

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

К сожалению, инновационная идея компонента и компонентной разработки натолкнулась на жесткие реалии активно-развивающегося рынка программной инженерии 90-х [6]. Коммерциализация этой области, постоянное кардинальное обновление операционных платформ, конкурентная борьба между основными поставщиками продуктов разработки привело к потере стабильности в развитии компонентных технологий. Новые версии компонентных моделей появлялись очень часто, их составляющие могли настолько изменяться, что уже не поддерживали компоненты предыдущих версий. Разработчикам каждый раз приходилось следовать несколько измененным правилам, а старые компоненты не подлежали повторному использованию. При этом создатели компонентных моделей недооценили растущую роль глобальных телекоммуникационных сетей, и среде интернет распределенные компонентные системы, ориентированные на постоянное подключение, работали нестабильно и ненадежно. Наконец, конкурентная борьба привела к невозможности взаимодействия программ, написанных на разных языках программирования для разных компонентных моделей.

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

В основу платформы веб-службы лег набор уже существующих механизмов типа HTTP, SMTP, XML, UDDI, SOAP... и новых открытых протоколов, обобщенно называемых WS-* (от англ. web-service) - WSDL (язык описания веб-служб), WS-Security, WS-Reliability, WS-Coordination, WS-Addressing и пр. На данный момент технологию веб-служб в том или ином масштабе поддерживают все популярные средства разработки программного обеспечения, даже, например, 1С.

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

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

Дальнейшим развитием веб-служб стала технология микросервисов. Предполагается, что микросервисы отличаются от веб-служб следующим. Во-первых, меньшей привязкой к WS-стандартам. Микросервисы не задумываются для широкого общественного использования и потому реализуются силами разработчиков одной компании для решения ее локальных задач. Разработчики вольны применять собственные протоколы взаимодействия, хотя широкая поддержка таких элементов как HTTP, SOAP или WSDL и др. позволяет на данный момент считать их оптимальными для поддержки взаимодействия микросервисов. Во-вторых, считается (например, в [8]), что веб-службы обычно реализуют «крупную» бизнес-логику, тогда как задача микросервисов - простейшие неделимые операции. С этим нельзя согласится, т.к. веб-службы поддерживают неограниченную иерархию вложенности и, теоретически, один веб-сервис может вызывать операции нескольких других, те, в свою очередь, функции следующего уровня и т.д. до самых низких уровней декомпозиции, на которых находятся простейшие бизнес-операции.

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

Литература

1. Ньюмэн, С. Создание микросервисов / С. Ньюмэн. - СПб. : Питер, 2016. - 304 c.

2. Osowski , R. Microservices in action, Part 1: Introduction to microservices [Электронный ресурс] /

Rick E. Osowski // IBM developerWorks. - 2015. - Режим доступа: http://www.ibm.com/developerworks/cloud/library/cl-bluemix-microservices-in-action-part-1-trs/index.html (дата обращения: 02.03.2016).

3. Fowler, M. Microservices - a definition of this new architectural term [Электронный ресурс] / Martin

Fowler. - 2014. - Режим доступа: http://martinfowler.com/articles/microservices.html (дата обращения: 02.03.2016).

4. Артамонов, И. В. Слабое связывание как фактор эволюции технологий интерграции распределенных систем / И. В. Артамонов // Материалы конференции "Инновации на основе информационных и коммуникационных технологий". - Москва, 2014. - C. 294-297.

5. Кутикин, С. С. Конструктор составных типов с использованием JavaFX / С. С. Кутикин. -

Москва : ВШЭ, 2013. - 76 c.

6. Артамонов, И. В. Разработка распределенных сервисно-ориентированных программных средств / И. В. Артамонов. - Иркутск : БГУЭП, 2012. - 130 c.

7. Ньюкомер, Э. Веб-сервисы: XML, WSDL, SOAP и UDDI / Эрик Ньюкомер. - СПб. : Питер,

2003. - 256 c.

8. Маццара, М. Моделирование интеграции веб-сервисов [Электронный ресурс] / Мануэль Маццара // ПостНаука. - 2015. - Режим доступа: http://postnauka.ru/video/46057 (дата обращения: 02.03.2016).

i Надоели баннеры? Вы всегда можете отключить рекламу.