Жодних симуляторів. Розповідь про платформу для віддаленого навчання програмуванню в реальному оточенні


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

Хекслет – це платформа для створення практичних уроків з програмування у справжньому середовищі розробки. Головна відмінність від інших проектів (наприклад, Codecademy або CodeSchool) полягає в тому, що на Хекслеті немає симуляторів: на кожному уроці користувач працює з повноцінною машиною, під’єднаний до мережі. Це дозволяє навчати і навчатися не лише програмуванню, але й роботі з базами даних, серверами, мережею, фреймворками і так далі. Інакше кажучи, якщо це запускається на Unix-машині – цьому можна навчати на Хекслеті.

 

У цій замітці я розповім про архітектуру платформи та інструменти, які ми використовуємо.

Майже весь бекенд написаний на Rails, все “крутиться” на Amazon AWS. Ми не прив’язані до інфраструктури Амазона, але зі специфічних речей використовуваний RDS (Relational Database Service). Там крутиться PostgreSQL (основна база) і Redis (для черг). Завдяки RDS, нам можна не хвилюватися про бекапи, реплікації, оновлення – все працює автоматично. В Амазона багато речей, до яких легко звикнути і прив’язатися, але наша схема дозволяє, за потреби, легко піти на будь-яку іншу інфраструктуру. Це можливо за допомогою Докера.

Насправді, Докер – це наріжний камінь усієї платформи.

Отже, кожен сервіс у нас загорнутий у свій контейнер. 1 контейнер = 1 сервіс. Сайт, Redis, Grafana (для побудови графіків, про це трохи нижче). Більшість образів для контейнерів – готові з tutum.co.

Репозиторій для свого додатка ми зберігаємо в Docker Registry. Там зручна система – образ збирається автоматично при коміті в Dockerfile. Сам код зберігається в Github, виходить, процес такий: новий коміт у Dockerfile в гитхабе -> запуск нового білда в docker registry. Білд потребує значного часу, 20-60 хв залежно від умов, тому варіант “швидко пофіксимо продакшен” неможливий. Виявилося, що це не проблема, навіть дисциплінує.

Спочатку для деплоя ми використали Capistrano, але в результаті відмовилися від неї на користь Ansible. По суті, Ansible просто доставляє конфіги на віддалений сервер і запускає upstart, а той у свою чергу вже оновлює образи. У такій схемі нам не треба нічого особливого встановлювати на сервери (потрібний тільки ssh-доступ), і легко відкочуватися назад. Для версіонування використовуються теги (v24, v25 і так далі), а деплой на стейджинг завжди використовує останню версію (latest) коду. Коли щось йде не так при деплої на продакшен, ми просто вбиваємо один контейнер і піднімаємо інший.

При локальній розробці ми використовуємо майже 1-в-1 ті самі Ansible-плейбуки, що й для продакшена. Інфраструктуру ми обкатуємо локально, що дозволяє мінімізувати помилки класу “а на локалці працювало”.

Ми також використовуємо амазоновський балансирувальник, і в разі підвищеного навантаження за 10-20 хв можемо підняти додаткові машини. Кінцеві веб-сервери не зберігають жодного стану (що і дозволяє швидко масштабуватися), на них не зберігаються жодні дані.

Суть проекту – дозволяти людям вчитися в реальному оточенні, для цього кожному юзерові ми піднімаємо контейнер, в якому він виконує практичну вправу. Ці контейнери піднімаються на спеціальному “eval”-сервері. На ньому є тільки Докер і звертатися до нього можна тільки з Sidekiq, асихронно. В ідеалі хочеться прийти до схеми, де на кожного юзера піднімається повноцінна “віртуалка”.

На окрему історію заслуговує браузерне середовище розробки, за допомогою якого користувачі працюють усередині свого контейнера, правлять файли і запускають програми. Є багато хмарних IDE, і ми, як будь-який поважний стартап, хотіли за максимумом використати готові рішення. Знайшли класний IDE з багатьма функціями (навіть з інтеграцією з Git), але потім оцінили вартість підтримки чужого коду (повного винайдених велосипедів, між іншим) і наважилися писати свій простій IDE. Тут нас врятувала ще одна нова технологія – ReactJS і концепція Flux. Наш Hexlet IDE – в опен-сорсі.

Різні події на зразок реєстрацій, початку і завершення уроків, оплати, а також інформація про стан сервера надходять до спеціальної бази InfluxDB, а на основі цих даних будуються графіки за допомогою Grafana. Щодня ми дивимося на таке:

Наша команда сама створює уроки, а також запрошує авторів з числа професійних розробників. Будь-яка людина або компанія можуть стати авторами уроків як публічних, так і для внутрішнього використання, наприклад, для навчання всередині свого відділу розробки або для проведення воркшопів.

Дякую за увагу!

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *