
Закономерный этап развития Cloud Native — стремление компаний иметь возможность получения быстрого и простого доступа к инструментам и технологиям под разные кейсы и бизнес-сценарии. Поэтому большинство современных облачных платформ строится на концепции предоставления пользователям всех нужных ресурсов и инструментов в формате «единого окна». И основной способ реализации этой концепции — построение каталогов приложений.
Облачная платформа VK Cloud тоже имеет свой Маркетплейс приложений. И реализовали мы его таким образом, что каждый внешний поставщик ПО (ISV, Independent Software Vendor) может загрузить в него свой инструмент и сделать его доступным тысячам пользователей с минимальными усилиями. Рассказываем, как именно нам это удалось и к чему сейчас сводится алгоритм публикации приложений.
Отправная точка
Маркетплейс приложений VK Cloud — это каталог готовых решений и сервисов прикладного уровня, к которым пользователи могут получить доступ по кнопке. Первый набор сервисов в нем представлял собой ряд популярных Open-Source-решений. При этом изначально сервисы в Маркетплейс добавлялись исключительно командой разработки.
Но мы понимали, что основной показатель, определяющий ценность нашего каталога сервисов для конечных пользователей, — многообразие инструментов для различных сценариев и задач. Соответственно, важна скорость и регулярность пополнения «магазина» новым «ассортиментом». Поэтому по мере развития Маркетплейса приоритетом для нас было создание условий, при которых наполнять каталог сможет не только наша собственная команда, но и внешние поставщики ПО без дополнительной разработки со стороны VK Cloud.
Поскольку изначально такой функционал не был предусмотрен, Маркетплейс предстояло переработать, заложив в него сразу необходимые точки развития.
К какой реализации Маркетплейса мы хотели прийти
Обычно внешние поставщики ПО сталкиваются с тем, что размещение своих решений на облачных платформах может превратиться в «хождение по битым стеклам». Например, может требовать доработки продукта в условиях отсутствия понятных правил и неочевидного спроса со стороны пользователей.
Соответственно, перед нами стояла конкретная задача — сделать процесс публикации максимально простым и прозрачным, снизив риски и издержки для поставщиков ПО.
Чтобы обеспечить это, нам было важно:
-
реализовать возможность размещения приложений разного типа: SaaS, Image-based и других;
-
обеспечить возможность биллинга приложений по разным моделям: Upfront (предоплата), PAYG (Pay-as-you-go) или Usage-based (на основе разных метрик потребления), бесплатные и BYOL;
-
исключить необходимость заводить в систему биллинга и другие подсистемы данные под конкретный продукт вручную и заранее;
-
предоставить поставщикам возможность самостоятельного описания параметров, биллинга, тарифных планов, а также визарда заказа его продукта;
-
предоставить возможность добавления нового продукта в Маркетплейс без изменения кода практически любой сложности: от простых Standalone-приложений на одной виртуальной машине до развертывания кластера с развесистой инфраструктурой;
-
предоставить поставщику возможность тестирования его продукта до публикации.
От требований к реализации: как мы снизили порог входа для поставщиков ПО
В первую очередь мы реализовали возможность размещения двух наиболее востребованных типов приложений:
-
SaaS-сервисы — централизованно установленные мультитенантные продукты. Внешний поставщик развертывает сервис либо на собственной инфраструктуре, либо на инфраструктуре в своем проекте в VK Cloud. Пользователю предоставляется доступ к сервису через отдельный аккаунт (тенант). Управление сервисом и его инстансами выполняется на стороне VK Cloud.

-
Image-based-сервис — продукт, который разворачивается на основе образов виртуальных машин в проекте VK Cloud. Для поддержания продукта может использоваться дополнительная инфраструктура: виртуальные сети, балансировщики нагрузки, кластеры DBaaS, S3-объектное хранилище, резервное копирование. Управление сервисом, его инстансами, а также инфраструктурой выполняется на стороне VK Cloud.

Взаимодействие Маркетплейса с сервисами мы реализовали с помощью брокеров, которые обеспечивают доставку конфигурации сервиса в Маркетплейс VK Cloud по протоколу VK OSB, созданному на основе Open Service Broker API.
При этом:
-
SaaS-брокер обеспечивает взаимодействие конкретного SaaS-приложения с каталогом;
-
Image-based-брокер обеспечивает взаимодействие Image-based-приложений с каталогом VK Cloud. Image-based-брокер внутри себя имеет тенанты, объединяющие Image-based-приложения одного поставщика.

Примечание: Стоит отметить, что SaaS-брокер разрабатывает поставщик SaaS-приложения, а разработчикам Image-based-приложений нужно лишь подготовить сервисный пакет для Image-based-брокера — сам брокер для Image-based-приложений уже разработан командой VK Cloud.
По сути, брокеры являются адаптерами, которые позволяют Маркетплейсу управлять жизненным циклом абсолютно разных сервисов. При этом у брокера три основных задачи:
-
Предоставить каталог сервисов, которые он позволяет заказывать, их параметры и тарифные планы.
-
Дать возможность заказывать, изменять или удалять экземпляр сервиса.
-
Создавать сервисные привязки — сущности, которые создаются после развертывания инстанса сервиса на основании запроса от облачной платформы к брокеру, и связываются с инстансом сервиса.
Алгоритм добавления сервисов в Маркетплейс
Для удобства внешних вендоров, снижения порога входа и уменьшения бюрократии алгоритмы размещения SaaS и Image-based-сервисов предельно упрощены и фактически сведены к выполнению простых операций согласно подробной инструкции. Для наглядности разберем каждый из вариантов.
Добавление в каталог SaaS-приложений
Размещение SaaS-приложения в Маркетплейсе VK Cloud подразумевает несколько этапов.
1. Разработка брокера для сервиса
Маркетплейс приложений взаимодействует с сервисами через брокеры. Для SaaS-приложений они должны:
-
быть реализованы по протоколу VK OSB (его можно получить у команды облака по запросу);
-
реализовывать методы, описывающие жизненный цикл инстансов сервиса.
Подробнее о разработке брокера здесь.
2. Описание конфигурации сервиса (тарифных планов и опций)
На данных момент поддерживается четыре типа тарифов:
-
Upfront commitment. Оплата в начале периода использования сервиса (например, помесячная оплата).
-
Usage based. Оплата по факту потребления. Стоимость рассчитывается на основе произвольных метрик использования продукта.
-
Free. Нет платы за использование ПО. Тарифицируется только потребление инфраструктуры.
-
BYOL. Покупка лицензии на ПО вне контура VK Cloud.
Тарифные планы можно описать довольно гибко. Так, можно указать:
-
тип тарификации;
-
стоимость отдельных тарифных опций;
-
стоимость метрик потребления.
3. Загрузка конфигурации сервиса в брокер
Если SaaS-брокер создан по шаблону, достаточно выполнить несколько простых действий из инструкции.
4. Загрузка и публикация сервиса в Маркетплейсе
Здесь подразумевается финальная подготовка к релизу — от развертывания брокера до тестирования сервиса и публикации.
Примечание: С полной детальной инструкцией по добавлению в каталог SaaS-приложений можно ознакомиться здесь.
Добавление в каталог Image-based-сервисов
Image-based — довольно популярный вариант поставки приложений.
В первую очередь для нас было важно:
-
предельно упростить размещение в каталоге облака продукта стандартной топологии (например, когда продукт размещается на одной ВМ);
-
поддержать гибкость;
-
дать возможность описывать развертывание сложных систем с использованием других PaaS-решений, представленных в облаке.
Для Image-based-приложений не нужно писать свой брокер: он универсальный и уже разработан командой Маркетплейса. Но для заведения в каталог продукта надо подготовить ряд артефактов:
-
образ ВМ с предустановленным ПО и средства конфигурации приложения после развертывания;
-
артефакты для деплоймента системы (представляет собой Terraform-файл);
-
описание тарификации;
-
описание сервиса;
-
описание параметров и визарда заказа приложения.
Примечание: Для подготовки и хранения артефактов или их исходников лучше использовать инструменты и практики DevOps.
1. Подготовка образа ВМ
Подготовить образ ВМ можно двумя способами:
-
вручную, установив приложение и выполнив необходимые конфигурационные операции;
-
с использованием инструмента для автоматизации сборки образов Packer.
Вариант с применением Packer удобнее, поскольку решение позволяет реализовать подход Images-as-a-Code, а следовательно, дает возможность хранить образ в системе контроля версий, воспроизводить состояние образа в любой момент времени и вносить контролируемые изменения. То есть с Packer можно подготавливать новые версии приложений в Маркетплейсе быстрее, контролируемо внося изменения.
2. Подготовка сервисного пакета
Артефакты, которые описывают сервис, тарификацию и визард заказа сервиса с помощью DSL на базе YAML, а также инструкции по деплойменту приложения в виде terraform-манифестов, объединяются в сервисный пакет.

Такой пакет предоставляет всю необходимую информацию для Маркетплейса, чтобы разместить приложение в каталоге.
В свою очередь, клиентам эта информация позволяет хранить сервисный пакет в системе контроля версий, а также интегрировать загрузку новых версий из Маркетплейса в CI-инструменты.
3. Подготовка деплоймент инструкций
Деплоймент Image-based-приложения состоит из двух этапов:
-
развертывание инфраструктуры (ВМ с приложением или его компонентами, настройка Firewall, сети, внешние IP-адреса, DNS, сертификат для HTTPS, S3 и другие);
-
доконфигурация приложения в соответствии с параметрами, выбранными клиентом.
Как уже было упомянуто, описание процедуры деплоймента представляет собой Terraform-манифест, который включает в себя как описание требуемой инфраструктуры, так и шаги по конфигурации приложения.
Причин выбора в пользу Terraform много, ведь инструмент:
-
де-факто — стандарт отрасли;
-
позволяет использовать удобный язык конфигурации — HCL (Hashicorp Configuration Language);
-
имеет хорошо продуманную систему плагинов и большой набор уже готовых компонентов;
-
может создавать не только инфраструктуру (ресурсом может быть все что угодно);
-
позволяет использовать разные бэкенды для хранения стейта.
Важным преимуществом стало и то, что у Terraform есть готовый провайдер для работы с VK Cloud.
Единственным недостатком инструмента для нашего кейса было отсутствие готового решения Terraform-as-a-Service, который потребовалось реализовать самостоятельно. Но в результате мы получили гибкое решение для описания процесса развертывания приложения практически любой сложности, которое уже хорошо знаком многим: чтобы завести свой продукт в Маркетплейс VK Cloud, внешним поставщикам не придется учить специфический язык или инструмент.
4. Описание параметров и визарда
Чтобы сделать конфигурацию приложения настраиваемой, необходимо описать его параметры. Это могут быть:
-
инфраструктурные параметры: тип виртуальной машины, тип диска, размер, зона доступности и другие;
-
параметры конфигурации самого приложения;
-
тарифные опции;
-
параметры, включающие определенные функции: бэкап, интеграции с VK Cloud Monitoring и другие.
Чтобы пользователи могли задавать значения этих параметров, поставщику надо описать визард заказа приложения, размещая параметры на страницах визарда. Это позволяет группировать параметры и размещать их согласно определенной логике. Здесь важно, что внешние вендоры ПО могут сами определить структуру визарда.
5. Описание тарифных планов
Здесь все аналогично тарифам для SaaS-приложений — сейчас поддерживаются модели тарификации Upfront commitment, Usage-based, Free и BYOL.
6. Описание сервиса
На последнем этапе остается только добавить имя сервиса, его описание, логотип и инструкцию для клиента с первыми шагами по использованию.
Примечание: С полной детальной инструкцией по добавлению в каталог Image-based-приложений можно ознакомиться здесь.
Краткие итоги
Благодаря выстроенной реализации Маркетплейса VK Cloud внешние поставщики ПО могут своими силами размещать в каталоге облачной платформы SaaS-сервисы и Image-based-приложения практически любой сложности.
Процесс размещения предельно оптимизирован, но при этом важно понимать, что скорость добавления сервисов в Маркетплейс все равно зависит от навыков и уровня инженера, работающего над добавлением. Например, один из поставщиков смог разместить свой продукт в Маркетплейсе приложений VK Cloud всего за неделю.
При этом мы продолжаем совершенствовать и оптимизировать процессы подключения новых сервисов и в любой момент готовы помочь внешним вендорам, которые хотят сделать свой продукт доступным тысячам пользователей VK Cloud.
ссылка на оригинал статьи https://habr.com/ru/articles/909660/
Добавить комментарий