Оркестрация контейнеров микросервисной архитектуры в системе распознавания лиц

Автор: Филипьев Андрей Владимирович, Махалкина Татьяна Олеговна, Дмитриев Дмитрий Сергеевич

Журнал: Сетевое научное издание «Системный анализ в науке и образовании» @journal-sanse

Статья в выпуске: 2, 2020 года.

Бесплатный доступ

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

Еще

Оркестрация, контейеризация, распознавание, микросервисы, масштабирование

Короткий адрес: https://sciup.org/14122711

IDR: 14122711

Текст научной статьи Оркестрация контейнеров микросервисной архитектуры в системе распознавания лиц

«Микросервисы» – относительно новый термин в разработке программного обеспечения (далее – ПО). Этот термин описывает стиль разработки ПО, который разработчики находят все более и более привлекательным [1].

Архитектурный стиль микросервисов – это подход, при котором единое приложение строится как набор небольших сервисов, каждый из которых работает в собственном процессе и коммуницирует с остальными, используя легковесные механизмы, как правило HTTP [1]. Эти сервисы построены вокруг бизнес-потребностей и развертываются независимо с использованием полностью автоматизированной среды. Сами по себе эти сервисы могут быть написаны на разных языках и использовать разные технологии хранения данных.

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

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

Распознавание лиц

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

Последовательность действий при распознавании лица обычно такова:

  • 1.    Выделяется лицо человека на изображении (рис. 1).

  • 2.    Вычисляются антропометрические точки. Система находит опорные точка на лице, которые определяют индивидуальные характеристики. Алгоритм вычисления характеристик различен для каждой из систем и является главным секретом разработчиков. Раньше основной опорной точкой для алгоритмов были глаза, но алгоритмы эволюционировали и стали учитывать минимум 68 точек на лице (расположены по контуру лица, определяют положение и форму подбородка, глаз, носа и рта, расстояние между ними) (рис. 1).

  • 3.    Проводятся дополнительные преобразования изображения (устранение наклона головы и так далее) с целью получения четкого фронтального снимка (рис. 1).

  • 4.    Вычисляется эмбеддинг – набор характеристик, описывающих лицо независимо от посторонних факторов (возраст, прическа, макияж). Анализируются специальные локальные признаки, характеризующие, например, текстуру определенных областей на лице. Сопоставление разных эм-беддингов позволяет оценить, относятся ли два полученных изображения лица к одному и тому же человеку (рис. 2).

  • 5.    Сравнивается полученный эмбеддинг (вектор лица) с имеющимся в базе эмбеддингами.

    Рис. 1. Демонстрация пунктов 1, 2 и 3


  • 0.097496084868908 0.12529824674129 0.030809439718723 0.036050599066403

128 измерений лица

Входное изображение

-0.097486883401871

-0.0066401711665094

-0.14131525158882

-0.048540540039539

-0.12567175924778

-0.061418771743774

0.046741496771574

-0.12113650143147

0.061606746166945

0.061989940702915

0.10904195904732

-0.019414527341723

0.15245945751667

■0.12216668576002

0.083934605121613

0.087945111095905

-0.021407851949334

-0.018298890441656

-0.011014151386917 0.0093679334968328 0.058139257133007

-0.024210374802351

-0.057223934680223

0.023535015061498

-0.0098039731383324

0.020220354199409

0.0040337680839002

0.051597066223621

0.045223236083984 0.060309179127216

-0.01981477253139

0.065554238855839

0.1226262897253 0.036750309169292 0.14114324748516

-0.061901587992907

-0.10568545013666

-0.074287034571171 0.0061761881224811

-0.21055991947651

0.11345765739679

0.19372203946114 0.084853030741215

0.0064811296761036

-0.16582328081131

-0.0072777755558491

-0.059730969369411

0.11478432267904

0.14841195940971

0.049525424838066

-0.051016297191381

-0.062812767922878 0.0048638740554452 -0.11443792283535 0.014683869667351

-0.081752359867096 0.037022035568953 0.12788131833076 -0.094398014247417

-0.10034311562777

-0.1281466782093

0.17521631717682

0.10801389068365

0.0731306001544

-0.029626874253154

-0.15958009660244

-0.031351584941149

-0.15042643249035

-0.12728653848171

-0.065365232527256

0.14746543765068

0.0041091227903962

0.021352224051952

-0.086726233363152

0.09463594853878

0.21180312335491

-0.035577941685915

-0.036901291459799

-0.070026844739914

-0.089621491730213

0.078333757817745

0.13227833807468

-0.14132921397686

-0.13407498598099

-0.039491076022387

0.071997955441475

0.05228154733777

-0.031709920614958

0.11009479314089

0.18632389605045

-0.11768248677254

-0.040977258235216

0.032084941864014

0.020976085215807

-0.00052163278451189

-0.1318951100111

-0.0059557510539889

0.043374512344599

-0.053343612700701

0.078198105096817

-0.076289616525173

0.12369467318058

0.056418422609568

0.089727647602558

-0.0085843298584223

-0.022388197481632

0.020696049556136

-0.050584398210049

-0.072376452386379

-0.034365277737379

-0.045013956725597

-0.013955107890069

-0.17898085713387

-0.072600327432156

0.0050511928275228

-0.014829395338893

-0.043765489012003

-0.012062266469002

0.012774495407939

0.069833360612392

0.11638788878918

-0.015336792916059

0.10281457751989

-0.082041338086128

Рис. 2. Демонстрация пункта 4

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

Docker

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

Docker – это платформа, которая предназначена для разработки, развертывания и запуска приложений в контейнерах. Слово « Docker » в последнее время стало чем-то вроде синонима слова «кон-

Сетевое научное издание «Системный анализ в науке и образовании» Выпуск №2, 2020 год тейнеризация». И если разработчики еще не используют Docker , то Docker – это то, с чем они непременно встретятся в будущем.

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

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

Kubernetes

Kubernetes – это портативная расширяемая платформа с открытым исходным кодом для управления контейнеризованными рабочими нагрузками и сервисами, которая облегчает как декларативную настройку, так и автоматизацию. У платформы есть большая, быстро растущая экосистема. Сервисы, поддержка и инструменты Kubernetes широко доступны [2].

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

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

Разработка

Функциональные требования к приложению были сформулированы следующим образом:

  • -    Система должна обеспечивать хранение персон для распознавания.

  • -    Система должна позволять добавлять персону.

  • -    Система должна позволять удалять ранее созданную персону.

  • -    Система должна хранить и отображать фотографию и другую информацию персоны.

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

  • -    Система дает возможность проведения распознавания персоны по фотографии.

С точки зрения пользования приложением – оно не должно казаться сложным для пользователя (рис. 3).

Рис. 3. Основные действия пользователя

Также вся работа сервисов не должна быть заметна пользователю при работе с системой, когда исполняется сценарий непосредственного распознавания лица (рис. 4).

Рис. 4. Диаграмма последовательности сценария «Проведение распознавания персоны по фотографии»

Модули приложения были реализованы как микросервисы, которые были развернуты в кластере, управляемом Kubernetes . С технической точки зрения приложение состоит из четырех микросервисов и базы данных (рис. 3):

  • -    FR - Frontend - веб-сервер Nginx , который обслуживает статические файлы React.

  • -    FR - WebApp - веб-приложение, написанное на Java , которое обрабатывает запросы от фрон-тенда и взаимодействует с базой данных.

  • -    FR - Logic - Python -приложение, которое выполняет анализ изображения и возвращает эм-беддинг лица на изображении и выполняет распознавание по лицу.

  • -    FR - Storage - Python -приложение, которое выполняет функции управления фотографиями, хранимых в файловой системе.

  • -    FR - DB - MySQL база данных.

Рис. 5. Структура приложения

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

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

В данном кластере Kubernetes должны быть поды, реализующие разные функции. Это – frontend -приложение, веб-приложение Spring и два Flask -приложения. Для их развертывания нам необходимо подготовить YAML -описание ресурса вида Deployment , которое включает в себя название ресурса, количество реплик подов для запуска, название стратегии развертывания, максимальное количество недоступных подов, максимальное число подов, которое можно добавить в развертывание, метку для подов и множество других настроек.

Развертывание – это абстракция Kubernetes , которая позволяет нам управлять тем, что всегда присутствует в жизненном цикле приложения.

После выполнения развертываний и создания сервисов система распознавания лиц (рис. 6) полностью функционирует и готова к использованию.

Рис. 6. Готовое кластерное приложение

Заключение

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

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

Был создан кластер Kubernetes , где были успешно развернуты контейнеры с микросервисами, сервисы для работы с наборами контейнеров.

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

Программный код находится в открытом доступе по ссылке [3].

Список литературы Оркестрация контейнеров микросервисной архитектуры в системе распознавания лиц

  • Martin Fowler, James Lewis Microservices. - [Электронный ресурс]. URL: https://martinfowler.com/articles/microservices.html.
  • Kubernetes. Documentation. - [Электронный ресурс]. URL: https://kubernetes.io/ru/docs/concepts/overview/what-is-kubernetes/.
  • Репозиторий Face recognition. - [Электронный ресурс]. URL: https://github.com/Virtual08/Face_recognition.
Статья научная