Teachbase под капотом
Инфраструктура приложения
В этой части посмотрим на техническую часть: из каких ключевых элементов состоит Teachbase как система, что заставляет ее работать и выполнять свои функции. Это даст общее понимание о структуре приложения — Teachbase.
Backend и Frontend
Teachbase — это классическое веб-приложение, которое состоит из Backend и Frontend.

  • Backend — внутренняя механика, написана на фреймворке языка Ruby: Ruby on Rails (RoR).
  • Frontend — внешний интерфейс, написан с использованием Javascript-библиотеки: React.
Backend имеет 3 API:
Endpoint (V1):
для интеграции и взаимодействия со сторонними ресурсами.

Изучить документацию можно по кнопке.
Следующий блок
Ключевые элементы инфраструктуры
Всякое веб-приложение, для полноценного функционирования, должно иметь обслуживающую инфраструктуру: сервера, базы данных, вспомогательные сервисы и так далее. Teachbase не исключение. Ниже карта-схема, на которой можно увидеть ключевые элементы инфраструктуры Teachbase, а также их взаимосвязи — то, как данные циркулируют от одного элемента к другому.

Понимание этой принципиальной схемы позволит сложить в голове картину о том, за счет каких механизмов и ресурсов платформа работает внутри.
Сейчас карта инфраструктуры Teachbase выглядит так:
Следующий блок
Описание элементов инфраструктуры
  • Дата-центр / Хостинг-провайдер
    Teachbase, в первую очередь, это SaaS-решение. То есть облачное. Поэтому вся инфраструктура физически располагается в дата-центре, а не локально на серверах клиентов. Все арендуемое оборудование находится под постоянным мониторингом специалистов дата-центра. На текущий момент, платформа располагается в Яндекс.Облаке:
  • Веб-сервер: Балансировщик нагрузки (go.teachbase.ru)
    Представляет собой машину с отдельно настроенным веб-сервером — NGINX.

    Суть этой машины: равномерно маршрутизировать трафик на нижестоящие сервера с запущенными приложениями Teachbase. Это позволяет обрабатывать в один момент времени большое число запросов от большого числа пользователей. При этом для самих пользователей этот процесс абсолютно не заметен. По факту, перейдя в браузере на страницу go.teachbase.ru — пользователь попадает на один из нижестоящих серверов: g1, g2 или g3 и т.д.

  • Нижестоящие сервера — G1, G2, G#
    Количество нижестоящих серверов может варьироваться от конфигурации и нагрузки — количества активных пользователей в Teachbase. Каждый из серверов представляет собой машину с отдельной настроенным веб-сервером — NGINX и запущенным RoR-приложением Teachbase. Да, на каждом из этих серверов запущена и работает идентичная копия RoR-приложения Teachbase.

    Само по себе устройство RoR-приложения подразумевает под собой, что для запуска — его работы, необходимо запустить веб-сервер приложения (Puma). Оно и понятно, это ведь веб-приложение. NGINX же необходим для того, чтобы доступ к веб-приложению появился из вне.

    Чтобы попасть на какой-то конкретный нижестоящий сервер (в обход балансировщика), достаточно набрать в адресной строке: http://g1.teachbase.ru где g1 — номер сервера.

  • СУБД — PostgreSQL. Master и Slave
    Для хранения данных в Teachbase используется БД — PostgreSQL. За исключением нескольких отдельных типов данных (о них будет сказано ниже).

    • Master — это «‎боевая«» БД, куда записываются и в которой изменяются данные в реальном режиме времени.
    • Slave — это реплика «‎боевой«» БД. Предназначена только для считывания данных. К этой версии у техподдержки есть доступ. Это позволяет искать, выгружать и просматривать те данные, которые не доступны из веб-интефейса платформы.
  • СУБД — Redis. Master
    Это хранилище данных в оперативной памяти с открытым исходным кодом и временем отклика на уровне долей миллисекунды. Используется как БД для обработчика очереди задач (Sidekiq).
  • Обработчик очереди задач — Sidekiq (BG1, BG2, BG#)
    Sidekiq — это backend для Active Job. Active Job — это еще один из фреймворков Ruby. Суть Active Job в том, чтобы формировать очереди задач (джобы - jobs): эти задачи могут быть чем угодно, от выгрузки отчетов до списаний с карт или рассылок SMS, email-сообщений. В общем, всем, что может быть выделено в параллельную задачу (в фоне выполняется, пока пользователь занимается другими делами на платформе). Сами очереди также делятся на типы: default, mailer, xlsx-report и так далее.

    Sidekiq отвечает за то, чтобы приоритезировать очереди из задач на выполнение. А также отвечает за статус выполнения джобы: перезапуск, в случае неудачи или дальнейшая маршрутизация по статусу выполнения. Выполняет саму задачу какой-либо сервис внутри RoR-приложения или внешний сервис.

  • Web-socket Server
    WebSocket — протокол связи поверх TCP-соединения, предназначенный для обмена сообщениями (передавать данные) между браузером пользователя и веб-сервером приложения в режиме реального времени. Предназначен для того, чтобы снимать метрику по активному времени пользователя на платформе. Эти данные сохраняются в БД InfluxDB.
  • СУБД — InfluxDB. Master
    InfluxDB представляет собой программное обеспечение с открытым исходным кодом для хранения временных рядов. БД написана на языке Go и не требует внешних зависимостей. Основным назначением является хранение больших объемов данных с метками времени. Например, данные мониторинга, метрики приложений, активное время пользователей на платформе.
  • Сервис обработки файлов — Fyler
    Один из внешних сервисов. Это приложение написанное на языке Erlang. Предназначено для того, чтобы обрабатывать разные типы файлов в другие форматы. Например, .avi, .mov и другие в .mp4. В Teachbase используется конвертация видеофайлов в .mp4 и документов в .pdf. Загруженные на платформу исходники файлов Fyler получает из AMAZON S3. После их обработки, передает данные обратно в RoR-приложение, которое сохраняет ссылку на сконвертированный файл в нужной таблице — в БД платформы (PostgreSQL).

    Сам по себе Fyler состоит из Сервера диспетчера — выступает точкой входа для получения списка задач на обработку. Задачи хранятся во внутренней БД Fyler. Полученный файл на обработку маршрутизируется на соответствующий типу файла пул (pool) — микросервер для конвертации документов или видеофайлов. Количество пулов может автоматически увеличиваться в зависимости от роста очереди или уменьшаться обратно.

  • Хранилище файлов — S3
    Это облачное хранилище всех файлов на платформе — от обложек курсов, до записей вебинаров.
  • Внешние сервисы выполнения задач
    Для того, чтобы иметь расширенный функционал, Teachbase использует интеграции с другими сервисами. Например, такие как:

    • SMSAero — отправка SMS-сообщений;
    • SendGrid — отправка email-сообщений;
    • ClickMeeting, Webinar.ru, Zoom — интегрированная вебинарная комната;
    • Яндекс.Касса, CloudPayments — платежные сервисы;
    • И другие.
    Взаимодействие Teachbase с этими сервисами происходит в фоновом режиме (параллельно основным процессам), поэтому осуществляется через обработчик очереди фоновых задач — Sidekiq.