Технологический стек

Технологический стек

Мы подбираем технологический стек в зависимости от потребностей проекта. Здесь перечислены технологии, которые мы используем в настоящее время.

Backend

При прочих равных, для бизнес проектов мы выбираем Java. Обычно используем Spring Framework. Иногда - Google Guice.

Мы часто используем JPA (как Hibernate, так и EclipseLink) для доступа к RDB. Но в последнее время отдаем предпочтение библиотеке Jooq, которая реализует SQL DSL в Java и генерирует модели на основе схемы БД. Она лучше подходит для больших проектов, так как ее работа прозрачнее, а создавать нетривиальные запросы проще.

Мы используем Liquibase для управления структурой базы данных. Стандартный выбор для RDBMS - PostgreSQL. Есть опыт также с Microsoft SQL Server, MySQL/InnoDB и Oracle.

Некоторые проекты требуют NoSQL-решений. У нас есть опыт работы с Mongo, Cassandra и Elastic Stack.

Мы используем Spring Security для авторизации, аутентификации и интеграции со сторонними источниками аутентификации, такими как OAuth, OpenID и т. д.

Spring MVC - наш стандартный выбор для реализации REST API. Однако в настоящее время мы рассматриваем GraphQL и планируем попробовать его как альтернативу REST.

Кроме Java, мы разрабатываем серверную часть на GoLang, когда нужен высокий уровень параллелизма и на C#, когда это требуется.

Frontend

Текущие проекты разрабатываются с использованием ES6 или TypeScript. Предпочтение отдаем TypeScript, так как он обеспечивает статическую систему типов и позволяет писать более надежные приложения.

Мы предпочитаем использовать VueJS, хотя пишем также и на Angular и React.

Автоматические тесты клиентского кода позволяют тестировать приложения в разных средах. Мы запускаем их после каждого коммита. Наши QA инженеры предпочитают Puppeteer, WebdriverIO и Selenium.

Data Science

Стандартным инструментом для анализа данных для нас является Python.

Есть опыт работы с такими технологиями, как Spacy, Keras и TensorFlow.

Инструменты, для анализа данных обычно упаковываются внутрь REST сервисов, с целью использования в рамках той или иной бизнес системы.

Разработка игр

Мы разрабатываем игры с использованием Unity3d и C#.

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

Для однопользовательских игр серверы разрабатываются с использованием того же технологического стека, что и для бизнес-приложений (см. выше).

DevOps

Мы используем GitLab для хранения наших источников и в качестве CI-сервера. Конвейеры GitLab на основе контейнеров Docker используются для создания, тестирования и развертывания приложений.

Для развертывания приложений мы используем как выделенные сервера так и облака, в частности - Amazon, Digital Ocean, City Cloud, OpenStack, Microsoft Azure.

Мониторинг приложений и серверов осуществляется Zabbix.

Другие доступные технологии

Технологии, которые мы не использовали в реальных проектах, но нам интересно это сделать:

  • GraphQL (выглядит как хорошая альтернатива REST)
  • Elixir (дружественный человеку способ достичь тех же целей, что и Erlang)
  • Kotlin (выглядит как улучшенная Java, позволяет иметь клиента и сервер на одном языке)
  • Kubernetes (выглядит как хорошее дополнение к Docker / compose для лучших DevOps)
  • Rust (интересный язык для встроенных или высоконагруженных систем)
  • Tarantool (очень быстрое хранилище данных в памяти, которое поддерживает транзакции)

Технологии, которые мы использовали раньше

Список технологий, которые мы использовали в предыдущих проектах:

  • Eclipse RCP
  • SharePoint
  • Lotus Domino / Notes
  • GWT
  • Google App Engine
  • Microsoft Azure
  • C / C ++
  • Android Studio