Архитектура микросервисов — это стиль, вдохновлённый сервис-ориентированными вычислениями, который недавно начал набирать популярность и обещает изменить способ восприятия, замысла и проектирования программного обеспечения. В этой статье мы предлагаем краткий обзор, предназначенный как сборник библиографических ссылок и ссылок в области науки и инженерии микросервисов (Microservices Science and Engineering, MSE).
• Программное обеспечение и его инженерия → проектирование программного обеспечения; архитектуры потоков данных;
Распределённые вычисления; Архитектура программного обеспечения; Микросервисы; Качество ПО
История языков программирования и парадигм за последние десятилетия характеризовалась прогрессивным сдвигом в сторону распределённости, модульности и слабой связности с целью повышения повторного использования кода и надёжности [3], что в конечном счёте продиктовано необходимостью повышения качества программного обеспечения — не только в критичных для безопасности и финансов приложениях, но и в более обыденных коробочных программных продуктах. Два направления — модульность (повторное использование кода и продуманная архитектура) и надёжность (качество ПО и формальные методы: верификация/корректность-посредством-построения) — развивались в некоторой степени независимо и продвигались разными сообществами, хотя пересечение между ними не пусто.
Объектно-ориентированные технологии занимают видное место в разработке ПО [13], включая языки, которые инкорпорируют оба упомянутых аспекта (модульность и корректность). Примечательным примером является язык программирования Eiffel [9], включающий устойчивые принципы ООП в рамки программирования, координируемые идеей проектирования по контракту (design-by-contract), которая направлена на корректность-посредством-построения. Тем не менее ни одна из этих технологий не исключает необходимости тестирования, которое по-прежнему остаётся столпом жизненного цикла разработки программного обеспечения. Существуют и другие примеры языков с сильным акцентом на корректность, как с архитектурной точки зрения, так и в отношении выполнения функциональных требований [7]. Однако до недавнего времени уделялось мало внимания интеграции этих принципов в распределённую среду, где важны такие свойства, как простота развёртывания, лёгкость проектирования и разработки и минимальная потребность в интеграционном тестировании.
Jolie [12] — это язык программирования, функционально комбинирующий множество аспектов, которые могут революционизировать способы замысла, проектирования и понимания программного обеспечения. Происходящий из крупной формализационной работы [1] для рабочих процессов и композиции сервисов [8], язык не интегрирует понятие корректности как отдельную надстройку — он просто строится на нём. Интуитивность парадигмы обмена сообщениями поддерживает этап проектирования и избегает побочных эффектов, которые нетривиально тестировать.
Как проект с открытым исходным кодом, Jolie уже выстроила сообщество разработчиков по всему миру — как в промышленности, так и в академии — занимающихся развитием, непрерывно повышающим удобство использования и тем самым расширяющим область принятия. Последние разработки приближают язык к полной зрелости: расширение системы типов [14], разработка статической проверки типов [15], добавление дополнительных итеративных управляющих конструкций для поддержки программирования и встроенная автоматика документации [2] улучшили среду разработки и начали процесс превращения её в полный набор инструментов, делающий весь концепт привлекательным для разработчиков и коммерциализируемым для компаний.
С архитектурной точки зрения Jolie обладает потенциалом вести к сдвигу парадигмы. Компонентно каждый строительный блок создаётся как микросервис [11], встраивающий бизнес-возможности в изоляции. Каждый микросервис может быть повторно использован, оркестрирован и агрегирован с другими [10]. Такой подход упрощает управление компонентами, сокращает затраты на разработку и сопровождение, а также поддерживает распределённые развёртывания [6].
Сдвиг в сторону микросервисов — чувствительная тема в наши дни: многие компании проводят значительную переработку своих бэкенд-систем, чтобы приспособиться к простоте новой парадигмы. Другие компании с самого начала строят свою модель бизнеса разрабатывая ПО по парадигме микросервисов. Мы находимся в середине крупного изменения в представлении о том, что такое программное обеспечение, о том, как возможности организуются в компоненты и как проектируются промышленные системы.
Архитектура микросервисов [4] строится на очень простых принципах:
Архитектура микросервисов — это стиль, который всё больше набирает популярность как в академии, так и в промышленности. Хотя он, вероятно, приведёт к сдвигу парадигмы и драматическому изменению восприятия, он не рождается в вакууме и связан с хорошо установленными парадигмами, такими как ООП и SOA. В [4] представлен всесторонний обзор недавних разработок в области архитектуры микросервисов, фокусируя внимание на эволюционных аспектах больше, чем на революционных. Тамошнее изложение призвано помочь читателю в понимании отличительных характеристик микросервисов.
Несмотря на оптимизм, будущее, безусловно, не лишено вызовов. Безопасность парадигмы микросервисов — вопрос, до сих пор почти не исследованный [4]. Коммерческие пакеты высокого качества для разработки всё ещё далеки от совершенства, несмотря на рост интереса к теме. Полностью верифицированное программное обеспечение остаётся открытой проблемой так же, как и для более традиционных моделей разработки. Тем не менее несколько исследовательских центров по всему миру уже рассматривают и продолжают решать эти вопросы в попытке поймать волну и сделать новое поколение распределённых систем реальностью.
Мы хотели бы поблагодарить Университет Иннополис за логистическую и финансовую поддержку, а также всех коллег из лабораторий Service Science and Engineering и Software Engineering.