Технологии моей образовательной платформы: осознанный выбор или случайность?
Выбор технологий для создания чего-то по-настоящему мощного играет ключевую роль в развитии каждого проекта. Сегодня я хотел бы поделиться, почему я сделал выбор в сторону PostgreSQL, в чем причина замены Vue на React или почему используется WebSocket вместо REST API.

C# и ASP.NET
О языке C# и платформе ASP.NET можно говорить многое. Среди ключевых преимуществ я бы выделил следующее: наличие встроенной системы управления памятью, безопасная и надёжная работа с потоками, строгая типизация и архитектурные принципы, обширная документация и активное сообщество, поддержка WebSocket и REST API, регулярные обновления и улучшения, а также чёткое разделение зависимостей и удобное управление ими, всё это в совокупности даёт устойчивую и понятную основу для разработки серверной логики.
Однако в самом начале моей разработки никакого глубокого анализа или секрета не было в выборе языка программирования и платформы. Все очень просто: мой выбор пал на C# потому что это самый первый язык программирования — тот, который я изучал и практикую ежедневно на протяжении нескольких лет. Тоже самое касается и платформы ASP.NET, которая стала логичным продолжением моей специализации. Все же выбор технологии — это не всегда результат холодного сравнения всех технологий мира.
Почему PostgreSQL?
Наряду с изучением языка программирования в колледже я также изучал MSSQLServer, что стало хорошим началом для представления проекта. С течением времени на своем опыте я испробовал различные СУБД, например: ElasticSearch, YDB, MSSQLServer, Redis, Cassandra, ClickHouse. Однако не взирая на: полнотекстовый поиск ElasticSearch, высочайшую масштабируемость Cassandra, скорость аналитики в ClickHouse, молниеносную работу в памяти Redis и распределенную архитектуру YDB, я сделал ставку на PostgreSQL, у этого выбора достаточно причин:
В рамках моего проекта я считаю логичным выбор реляционной СУБД со строгой структурированной схемой хранения, индексами, внешними ключами, транзакциями.
Работа с JSONB данными — позволяет хранить и индексировать JSON структуры.
Простота использования и развертывания.
Бесплатная лицензия, пожалуй ключевой момент когда было принято решение перейти от MSSQLServer на PostgreSQL.
Конечно, распространена практика использования нескольких решений в зависимости от проблем и требований к продукту, однако сейчас PostgreSQL я считаю более чем достаточно для первых версий платформы.
Почему не оставить Vue?
На самом деле я не стремлюсь утверждать, что какой‑то фреймворк лучше другого. На этапе дипломного проекта использован был Vue, потому что товарищ знал его очень хорошо, в свою очередь я как специалист по серверной части не особо углублялся во fontend‑технологии.
Когда продолжилась разработка проекта за пределами колледжа, было принято решение полностью переписать клиент и заменить Vue на React. Толчком к этому стала большая популярность React, я знал что найти специалистов будет куда проще, что и случилось, один раз я нанял frontend разработчика, который написал старт клиента добавив главную страницу, формы входа и регистрации при этом объединив функционал с WebSocket сервером. Благодаря гибкой архитектуре React, я использовал пример с уже написанного кода, с помощью чего и смог продолжать дальнейшую разработку самостоятельно.
По итогу React мне кажется логичным решением с учётом доступности документации, большого сообщества и количества готовых решений. Он хорошо вписался в общую архитектуру проекта и позволяет выстраивать структуру интерфейса, которую удобно масштабировать и поддерживать.
WebSocket как смысл жизни
Процесс создания образовательной платформы не мог ограничиваться постоянными HTTP запросами на сервер, очень часто требуется получать мгновенный отклик от сервера, когда пользователь решает упражнения или выбирает ответ, при получении уведомлений о каких‑либо событиях к примеру о том что модератор проверил и одобрил курс.
Именно тут на сцену выходит WebSocket — протокол, позволяющий установить постоянное двустороннее соединение между клиентом и сервером. Такое решение добавляет полную палитру возможностей в интерактив платформы, реалтайм по уведомлениям или в перспективе к совместному редактированию материалов или кода. Все это упрощает контроль пользователей со стороны сервера и делает интерфейс более «живым».
Конечно WebSocket не панацея. Когда речь идет, например, о выдаче учебных материалов, изображений или скачивании файлов, куда более уместно использовать классический REST API. Я выбрал именно GET‑запрос для передачи файлов по следующим причинам:
Простота и универсальность. Практически любой браузер, мобильное приложение или внешний сервис — умеет работать с GET‑запросами.
Кэширование. Файлы полученные через GET, можно легко кэшировать, что облегчает нагрузку на сервер.
Простой контроль доступа к файловой системе сервера. К примеру можно выдавать файл только авторизированному пользователю.
MIME‑типы. Чтобы клиент понимал как обрабатывать файл, существуют определенные типы, если отправить например PDF файл без нужного типа он может просто не открыться в браузере, а вместо этого загрузиться как неизвестный файл.
Так ли хороша контейнеризация Docker?
Для удобного развертывания сервисов, на сервере применена контейнеризация через Docker — это фундаментальный подход, и вот почему:
Изоляция компонентов. Очень важная составляющая контейнеризации, поскольку база данных, backend, frontend и Nginx развернуты как отдельные сервисы, которые никак не конфликтуют друг с другом работая в разных окружениях, а все связи и зависимости между ними можно настраивать отдельно.
Настройка окружения. Окружение каждого образа описано в DockerFile, что гарантирует одинаковое поведение на разных серверах.
Легко обновлять и откатывать, просто пересобрав и перезапустив контейнер с новой версией
Итоги
Многое из выбранного определилось не только личным опытом и практикой, но и логикой развития проекта. Я выбрал:
C# и ASP.NET — за строгую типизацию, мощную архитектуру и стабильность.
PostgreSQL — как реляционную, гибкую и бесплатную СУБД c поддержкой JSONB и проверенную опытом.
React — из‑за широкого сообщества и легкости масштабирования интерфейса.
WebSocket — для реального времени и быстрой синхронной работы.
REST (GET) — для простого доступа к файлам.
Docker — как инструмент контейнеризации, который обеспечивает контроль над окружением и легкость развертывания.