hexlet.io: история и архитектура

В этом выпуске мы расспрашивали авторов hexlet.io, Рахима Давлеткалиева и Кирилла Мокевнина. hexlet.io – это сервис онлайн-обучения с большим фокусом на практику, главным образом "заточенный" под разработчиков и системных администраторов.

Начался hexlet.io как хобби проект Рахима, немногим больше 2-х лет назад. Первые версии были сделаны вместе с волонтерами, в попытках создать платформу для обучения русскоязычной аудитории. Но в таком виде проект не выстрелил.

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

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

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

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

Архитектурно представляет собой набор виртуальных машин, которые "нарезаются" на Docker контейнеры, содержащие непосредственно практическую часть урока, и web IDE, подключенное из внешнего раздела. Контейнеры могут быть сложными, но в качестве корневого процесса используется не init, а supervisord, под которым запускается только необходимое. Например, nginx, базы данных и т.д.

IDE написана самостоятельно, на базе редактора CodeMirror и react.js/flux.
Кстати, изначальный прототип IDE был написан всего за неделю.

На данный момент на одной виртуальной машине может быть запущено несколько пользовательских сред, но в будущем вполне возможен переход на индивидуальные виртуальные машины в Amazon. Расчеты показывают, что если стартовать "по запросу", то это окупается.

Разворачивание самих виртуальных машин сейчас делается вручную, но планируется использовать Ansible, поскольку с его помощью очень легко управлять autoscale группами.

Мониторинг делается при помощи cadvisor, собирающего данные с контейнеров в InfluxDB.

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

Участники этого выпуска:

comments powered by Disqus