Мы прерываем длительное молчание и объявляем о выходе второй версии Scorocode.
Это даже не эволюция, а рождение нового сервиса.
Год работы, Docker, Kubernetes, Яндекс.Облако, и т.п.
Предупреждая вопрос «А зачем тут хаб Go?», отвечаю — все сервисы Scorocode написаны на Golang, именно этот язык у нас является основным в стеке технологий.
За подробностями прошу под кат.
Историческая справка
Scorocode v1 был запущен летом 2016 года, за 3 месяца собрал около 20 000 регистраций, за 2,5 года был бесплатным инструментом для нашей публичной аудитории, использовался для развертывания приватных облаков, на которых за это время было разработано 8 систем разного уровня: от сервиса такси до системы управления производством.
В первой версии были самописные сервисы для работы с NoSQL СУБД MongoDB, собственный парсер запросов к базе, сервисы, обеспечивающие исполнение JavaScript кода на сервере, и всё это было единым целым в облаке.
Основные недостатки платформы v1:
- Ресурсы все шарились между приложениями, и невозможно было гарантированно получить ресурс, что в наше время уже выглядит как минимум странно.
- Отсутствовал механизм запуска полноценного node WEB сервера, возможен был только разовый запуск скриптов с ограничением времени исполнения.
- Как оказалось, что для большинства наших клиентов NoSQL СУБД MongoDB не нужна, вместо нее все просили реляционную MySQL/PostgreSQL.
- Стоимость стартового платного тарифа была высокой, около 3000 руб/мес, и не было понимания, за что пользователь платит.
В конце прошлого года наша команда, осмыслив все достижения и неудачи, приняла решение ввязаться в разработку новой версии, принципиально переработав архитектуру.
Что нового в v2?
Логика не изменилась. Есть учетная запись, в которой пользователь-владелец учетной записи может создавать приложения. А вот структура приложения изменилась. Оно теперь независимое, размещается на выделенных ресурсах (в публичном облаке — на выделенном виртуальном сервере).
Оценивая проделанную работу, мы понимаем, что пошли длинным путём. Построили для начала базовую архитектуру, кирпичиками которой являются сервисы, живущие в docker-контейнерах, которые, в свою очередь, объединяются в зависимые группы, а живут они в подах, которыми управляет Kubernetes. В общем, все по классике жанра.
Из готовых сервисов используются:
Следующий шаг — написание и сборка собственных сервисов.
Auth
Сервис авторизации пользователей приложения по методу HTTP Authorization (type Bearer).
Broker
Сервис для упаковки собственных сервисов (простите за тавтологию). Сегодня представлен в виде node сервера, в который можно разворачивать либо свое полное приложение с исходниками, либо уже готовую сборку node (подробнее об этом в описании scorocode-cli). Развиваем сервис в сторону возможности упаковки как уже готовых сервисов из DTR, так и самописных сервисов. Первые эксперименты делаем, разумеется, на сервисах, написанных на golang.
DBAPI
Сервис, который обеспечивает работу по RESTful API со всеми таблицами БД PostgreSQL.
То есть, как только вы создали таблицу в базе, все операции CRUD становятся доступны по API.
WebSockets
При подключении клиентов по протоколу WebSocket идентифицирует клиентов, после чего из серверного API можно отправлять именованные или broadcast сообщения. Дальше будем развивать сервис в сторону буферизации и гарантированной доставки сообщений.
FS
Работа со папками и файлами хранилища приложения.
PUSH
Отправка PUSH уведомлений. Сертификаты Android/iOS привязываются в личном кабинете.
Консольная утилита scorocode-cli
2 года работы пользователей с первой версией научили нас, что какие бы красивые инструменты не были представлены на портале в личном кабинете пользователя, после периода «баловства» разработчик хочет вернуться в привычную среду — на свой локальный компьютер. Поэтому без консольной утилиты нам было не обойтись.
На сегодня scorocode-cli (бинарник sc-cli) предоставляет разработчику следующие функции:
fetch
Подключение к приложению в облаке, авторизация, сохранение конфигурации в папке .cli.
init
Получение репозитория и развертывание базового приложения с последующей сборкой и сохранением в облако. Базовое приложение пока одно, как дойдут руки — напишем еще несколько, разного типа.
pull
Синхронизация локальных файлов проекта с облаком.
push
Сохранение локальных файлов проекта в облако.
regdb
Регистрация базы данных.
logs
Получение логов из сервиса.
bridge
Проброс локальных портов в облако для всех сервисов. Например, после запуска моста можно подключаться любым клиентом к облачному PostgreSQL как к локальному.
serve
Локальный запуск приложения. Используется для локальной отладки.
Проблемы
Проблем в дороге было много. И до сих пор их немало. В основном они возникают на стыке open source продуктов. Иногда элементарные действия выливались в недельные копания и, как результат, в pull request в репозиторий продукта. Сложно все впихнуть в одну статью. Надеюсь, напишу еще про частные проблемы и решения.
Планы по развитию
В первую очередь мы будем писать сервисы. Много сервисов. Но писать мы их будем не абстрактно, а по запросу наших клиентов. Так же мы будем развивать шаблоны приложений, чтобы для подключения новых функций пользователи писали поменьше кода.
Про бизнес
Мы сменили фокус с частных пользователей на B2B сегмент рынка. И сменили базу — теперь мы в Яндекс.Облаке. Про это подробнее будут статьи нашего продакта Korbut. Именно из-за этого в новой версии публичного облака появился пробный период — 1 месяц, после которого мы бы хотели понять, потерял пользователь интерес к нам, или готов платить за сервис (стоимость базовой конфигурации приложения — 990 руб/мес).
Про тарифы
Теперь у нас абсолютно прозрачная тарификация. Пользователь видит выделенные под его приложение IaaS ресурсы, на стоимость которых мы просто делаем наценку в процентах. Процент плавающий, зависит от потребляемых объемов. Это нам дало прозрачность тарификации и возможность после запуска marketplace Яндекс.Облака разворачивать пользователям приватные облака с тарификацией в личном кабинете Яндекс.Облака.
И да, мы осторожничаем. Учитывая, что мы под каждое приложение даем выделенные ресурсы, пул приложений для пробного периода небольшой, около сотни. В первую очередь мы отправили приглашение нашим пользователям из старой версии, но заявки на подключение к пробному периоду пока продолжаем принимать на странице scorocode.ru
Эпилог
Я очень благодарен нашей команде, которая не теряла духа даже в самых тупиковых ситуациях. Кстати, про команду:
- Аня Корбут(Korbut) — менеджер продукта
- Женя Храмцов — архитектор, go разработчик
- Леван Кикнадзе — архитектор, go разработчик
- Рома Гаязов — js/frontend разработчик
- Тагир Халилов — DevOps
- Даша Голубева — системный аналитик
И, конечно, большое спасибо команде Яндекс.Облака, за оперативность, поддержку и участие в возникающих проблемах.
Спасибо, что дочитали до конца. У меня всё.