Содержание статьи
Все материалы сюжета:
- Интервью с CTO и CEO Vexor Дмитрием Галинским и Олегом Балбековым
- Как организовать правильный continuous integration и не разориться
Как известно, любой мало-мальски серьезный программист со временем начинает покрывать свой код тестами. Самые правильные пишут тесты еще до самого кода. А когда тестов становится слишком много, под них выделяют отдельный сервер, который сам забирает код из репозитория, прогоняет все тесты и, если все хорошо, деплоит на продакшен. Все это называется системой CI — непрерывной интеграции. Проблема такого подхода в том, что держать или арендовать целый сервер под нужды CI очень дорого, а в пике нагрузка все равно превысит мощности. Казалось бы, что тут сделаешь, однако у команды облачного CI Vexor на этот счет другая точка зрения.
Как и для кого создавался Vexor
Первая версия Vexor CI была создана из open source. Она была написана в компании Evrone. Все началось с того, что у нас в Evrone стоял Jenkins, и мы столкнулись с тем, что его постоянно нужно допиливать, а никакого желания допиливать Jenkins у нас не было, поэтому мы перешли на GitLab CI и принялись потихоньку переписывать его. Постепенно он мутировал до состояния, когда к оригинальному GitLab уже никакого отношения не имел. Мы переписали с нуля практически все.
Основное преимущество Vexor CI заключается даже не в ценообразовании. Представь, что у тебя есть воркер, который гоняет тесты. Evrone, где создавался Vexor CI, — компания довольно крупная. Там хватает больших проектов, где крутится много тестов, и из-за этого приходится держать довольно большой пул воркеров и платить за них деньги.
Но тесты — это такая вещь, которая не нужна постоянно. Мы и сами когда-то арендовали машины у Digital Ocean и платили за это кучу денег. Но большую часть времени машины просто простаивали, впору было прикрутить туда майнер Bitcoin, чтобы хоть как-то все это использовать. Тогда мы и придумали CI-сервис с поминутной оплатой за реально использованные ресурсы.
Еще одна проблема с тестами заключается в следующем: скажем, есть Aglie, где существуют недельные итерации. Наступает пятница, когда по итогам недели все делают коммиты, и возникает ситуация: на проект пришло десять пул-реквестов, а один прогон тестов занимает полчаса. Получается десяток пул-реквестов по полчаса каждый. В итоге ты сидишь в четверг или пятницу вечером неизвестно до какого времени и ждешь, пока тесты прогонятся. А наращивать пул воркеров, чтобы пятничные пики «проглатывались», — это уже совсем безбожные деньги. Отсюда и возникла идея как-то интегрироваться с облаками и сделать сервис, который бы автоматически масштабировался и выделял под расчет тестов столько ресурсов, сколько тебе на самом деле нужно в данную минуту.
В облаках соотношение конфигурации железа и стоимости абсолютно линейно. Хочешь в два раза мощнее — платишь десять баксов, хочешь еще в два раза мощнее — еще двадцать баксов и так далее. Все просто.
Помимо разработки, мы занимаемся развитием технологий, к примеру — делаем самую большую конференцию по Ruby on Rails в России. Мы отлично понимаем, какая боль есть у такой узкой аудитории, как разработчики ПО, и знаем, как с ней работать.
Хакер #191. Анализ безопасности паркоматов
На чем это работает
Vexor CI — это не монолитное приложение, а множество отдельных сервисов. Большая часть из них написана на Ruby, но есть и сделанные на Go. Для общения между ними в основном используется RabbitMQ, довольно популярное решение для работы с сообщениями.
В качестве хранилища используется PostgreSQL, сейчас там хранятся все данные, используемые в Vexor CI. Возможно, со временем логи билдов оттуда переедут в какой-нибудь noSQL.
Интерфейс, с которым работают пользователи сервиса, — это SPA-приложение, сделанное на AngularJS. Там очень активно используется кеширование данных. Первоначальное состояние загружается по HTTP, в дальнейшем все изменения приходят по WebSocket.
Для управления пулом воркеров используется отдельное приложение, которое отслеживает текущие потребности и меняет размер пула, добавляя или удаляя оттуда серверы. Воркеры, которые используются для прогона тестов, работают в облаке Rackspace.
Тесты запускаются в изолированном окружении с помощью Docker. Образ для тестирования собран на базе Ubuntu 14.04, мы периодически его пересобираем, поэтому версии пакетов всегда свежие. В образе уже предустановлены все нужные версии библиотек и сервисов, все, что может потребоваться для тестирования.
Преимущества и конкуренты
Наш конфиг очень хорошо совместим с Travis. Если ты сидел на Travis, то к нам сможешь перейти совершенно безболезненно. Разумеется, есть какие-то специфичные вещи, которые теоретически могут отвалиться, но вероятность такого очень мала.
Стоит сказать, что никто больше не работает по нашей модели, хотя конкурентов у нас много. Если говорить о том же Travis, у них ты покупаешь фиксированное количество воркеров — например, два за 129 долларов. Никто не будет брать с тебя деньги сообразно тому, сколько времени ты реально их используешь. Кроме нас. Мы никак не лимитируем количество воркеров, ты берешь столько, сколько нужно.
По конфигурации железа ситуация такова: сейчас на одну задачу у нас используется два ядра и два гигабайта памяти, а также отводится порядка 20 Гб места на диске. Одна из планируемых нами в будущем фич — возможность выбрать или запросить любую конфигурацию. Потому что бывают задачи, где нужно очень много CPU или RAM. Бывает и так, что у тебя есть три теста и эти два ядра и два гига тебе вообще не нужны.
Наша политика такова: мы считаем, что люди не должны сами писать конфиги. Пользователь просто добавляет к нам проект, мы сами определим, что и как нужно запустить для работы тестов. Наш сервис — это не только предоставление ресурсов для тестов, но и экономия времени людей.
Мы уже добились очень хороших результатов с «рельсовыми» проектами, по сути, ты просто нажимаешь «добавить», и все пошло работать. Python сейчас в процессе и тоже работает почти нормально. Также есть Clojure, Scala, Go, Rust, но, чтобы полноценно подключить новый язык, нужно набрать по нему большую статистику — какие используются библиотеки и так далее. Говоря проще, для Node.js еще нужно писать конфиги и работать с ними, здесь все еще не доведено до полного автоматизма. Но если конфиги тебя не пугают, ты сможешь тестировать практически все что угодно.
Кроме того, мы умеем распараллеливать тесты. К примеру, аппликуху нужно тестировать на нескольких версиях интерпретатора, один кусок работает только на Node.js 0.6, а другой требует не менее 0.10. Для этого у нас есть матрица билдов. Сейчас это работает в полуавтоматическом режиме — нужно добавлять в конфиг одну строчку, указывать, сколько параллельных тестов нужно запустить. Со временем появится фича, чтобы можно было выбрать прямо в интерфейсе: хочешь — два потока, хочешь — десять. Поэтому с разными версиями проблем нет, все Node.js, Ruby, Python собраны в пакеты, и с добавлением версий трудностей тоже не возникает. Можно просто посмотреть в make-файле, какие версии есть и для каких платформ. По сути, добавление новой версии того же Python или Node.js — это добавление еще одной версии в make-файл. Так что если вашей версии нет — пишите в саппорт, будет.
Инвестиции
В Фонд развития интернет-инициатив (который и инвестировал в Vexor) приходят в первую очередь не за деньгами, а чтобы ускорить развитие бизнеса. Мы пилили Vexor года полтора, пока не решили ускориться и за три месяца акселерации сделать из «наколеночного» продукта нечто качественное и готовое к продакшену. Сейчас это уже получается, и ресурсы ФРИИ мы используем для этого. Здесь есть много разной поддержки, которая помогает нам делать бизнес.
ФРИИ вкладывают в интересные интернет-проекты. На этапе преакселерации они, по сути, вкладываются даже не в проект, а в хорошие, интересные и сильные команды. Понятно, что проекты, приходящие сюда, на этапе вхождения нельзя назвать бизнесами. 90% не зарабатывают ни копейки и начинают зарабатывать первые деньги уже здесь.
Да, Vexor ориентирован на узкую аудиторию разработчиков. Но нужно понимать, что ФРИИ интересуют проекты, рынок которых больше 10 миллионов долларов в год. Объем нашего рынка определенно превышает 100 миллионов долларов, поэтому в нас вложили деньги. То же самое может сработать и с вами — если есть хорошая идея и понимание, что ваш рынок достаточно велик, а также мысли, как начать зарабатывать уже завтра, а не через год, можно смело приходить во ФРИИ.
Во ФРИИ есть замечательная штука, называется преакселератор. Это небольшой опросный лист, отвечая на вопросы которого ты поймешь, готов ли подавать заявку во ФРИИ.Нельзя подать заявку, если ты не уверен, что хочешь делать этот бизнес. У тебя должна быть компания, должен быть продукт. Он может еще не зарабатывать деньги, но он должен работать. То есть ты должен серьезно заниматься своим бизнесом уже какое-то время. Нельзя начать бизнес здесь. Здесь его нужно ускорять. Поэтому не все проекты на этапе идеи могут сюда попасть, отбор очень серьезный. На последний, четвертый акселератор было подано порядка 800 заявок, из которых прошли 40, это были сильнейшие команды, с самыми лучшими проектами.