Разработка микросервисов

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

СОДЕРЖАНИЕ

Система микросервисов

Сервис-ориентированная архитектура

Чтобы объяснить, что такое микросервис, необходимо начать с основ - с сервис-ориентированной архитектуры, SOA. SOA - это концепция проектирования и реализации программного продукта, который представляет собой не монолитное решение, а систему слабо связанных между собой модулей, взаимодействующих между собой по стандартизированным протоколам через стандартизированные интерфейсы. Данный подход к архитектуре приложения выгодно отличается от монолитной архитектуры за счет абстрагирования решения бизнес-задач от особенностей языков программирования, на которых написаны модули системы, операционных систем, поверх которой она работает, особенностей реализации каждого модуля и так далее. Разработчик может сосредоточиться на решении бизнес-задач и автоматизации бизнес-процессов, а не на технических особенностях отдельно взятых модулей. Кроме того, SOA-системы очень легко масштабируются за счет модульности компонентов системы. Каждый модуль ориентирован на решение отдельно взятой бизнес-задачи, и “специализируется” на ней, предоставляя интерфейс по определенной спецификации для внешних потребителей функционала модуля.

Система микросервисов

Концепция микросервисов

Микросервис - это современный подход к построению SOA-системы. Микросервис должен решать отдельную бизнес-задачу, он должен быть быстрым, легким, предоставлять достаточно простой внешний интерфейс, скрывая за ним внутреннюю сложность логики выполнения бизнес-задачи. Взаимодействие с другими микросервисами (модулями) осуществляется, как правило, по сети, по какому-либо протоколу: SOAP, CORBA, в соответствие с REST-подходом, и так далее. Каждый микросервис работает в отдельном процессе операционной системы. Так как взаимодействие осуществляется через сеть, естественным минусом такого подхода будут являться сетевые задержки и сложности балансировки нагрузки.

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

Система микросервисов удобна в разработке, так как каждый модуль может разрабатываться параллельно и независимо, с соответствующими последствиями, но требует повышенного внимания на этапе планирования и проектирования. Необходимо определить исчерпывающий список автоматизируемых бизнес-задач, и принять решение, какие микросервисы необходимо реализовать для их поддержки. Определив состав модулей системы, необходимо определить протоколы информационного взаимодействия между ними и спецификации на API, предоставляемые каждым микросервисом. Кстати, протоколы и интерфейсы даже в рамках одной системы могут быть различны, как и операционные системы, базы данных и языки программирования отдельно взятых модулей. Часто микросервисы предоставляют RESTful API, для обмена маршализованными в JSON данными по протоколу HTTP.

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

Экран разработки системы микросервисов

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

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

Язык разработки Golang

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

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

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

Более подробную информацию о нашей компании Вы сможете прочитать перейдя по ссылке «О компании»

Яндекс.Метрика