Контакты+7 (495) 788 74 17



Java в LightSoft


Вернуться к списку статей


В нескольких проектах LightSoft на равне с PHP используются Java технологии. Основные задачи, которые решаются с их помощью - выполнение расчётов и очередей, которые более ресурсоёмки, чем может выдерживать PHP, и более сложные чем можно сделать просто в RabbitMQ или Gearman. Помимо этого исторически у нас есть Web-приложение в рамках ПО для туроператоров, которое помимо быстрого расчёта туров (а это та ещё задачка) содержит приличный объём простого, а часто и не очень простого CRUD-а для работы с информацией туроператора.

Что мы используем сейчас

Сейчас в основе нашей разработки Java лежат:
  • Spring IOC, Spring MVC и т.п. для структуры приложения;
  • Hibernate/JPA и Spring Data для доступа к данным БД, где нужна сложная работа с объектами и простой JDBC или JDBi там, где нужна скорость и объёмы данных.
  • FreeMarker для представления (не самый любимый гость, но с альтернативами в этой области как-то грустно).
  • Spring Boot, чтобы всё это собирать вместе и Tomcat, где всё это работает.
  • Dropwizzard Metrics + InfluxDB + Grafana для мониторинга, что там творится внутри.
  • TeamCity для сборки.
  • WebDriver для тестирования.
  • Maven для описания проектов.

Помимо этого мы используем стандартный стэк LightSoft:
  • PostgreSQL для быстрой, надёжной и мощной БД (и бесплатной, кстати).
  • RabbitMQ и Gearman там, где надо получать данные и озадачивать другие проекты.
  • на клиенте у нас дружно живут TypeScript, AngularJS и местами Bootstrap.


Как мы ко всему этому пришли

Началось всё с софта для туроператоров, где возникло две проблемы:
  • Считать все условия с бесплатными ночами, скидками, доплатами, и прочими маркетинговыми изобретениями в рамках запросов и хранимок БД стало сложно (и долго, и сложно поддерживать и тестировать). Нужно было более гибкое решение. Которое и сделали на Java, просто как proof of concept, который оказался в сотни раз быстрее старого решения.
  • После чего спустя недели ночей оптимизации запросов тех же расчётов только уже не отелей, а туров, было подмечено - мы считаем в 100 раз быстрее, чем успеваем сохранять на диск (а потом ведь ещё индексы, и надо быстро искать по тому, что сохранили). Так зачем тогда вообще сохранять. Так родился сервис расчёта цен на туры.

Вокруг этого функционала на разных этапах мы успели сделать и переделать много интерфейсов и прочего.
Была и красивая, сложная и медлительная в сборке Scala (которая многим хороша, кроме боли, с которой её приходится вставлять в остальной стэк технологий… ну и в новичков).

Также на заре работы мы успели пощупать Guice, который хороший и красивый. Но каждая новая фича = новая либа, согласование и т.д. В итоге оказалось проще продаться Spring-у, где почти на каждую проблему есть своё решение, которое хорошо дружит со всем остальным (т.е. когда используешь 4 и более Spring * технологий, то собрать это всё из разных кусочков уже долго и нудно).

Ещё был GWT. Про GWT можно рассказать отдельно - это весьма хорошая штука, которая позволяет писать JavaScript код на Java, получая хорошую статическую типизацию, проверку ошибок очень рано, юнит тесты и прочие плюшки (пример - хотите провести рефакторинг, затрагивающий логику работы нескольких десятков классов, меняющих структуру работы и обновить пользовательский интерфейс, который с этой структурой работает? - легко, 4 часа, и оно внезапно почти работает сразу после того, как наконец собралось). Вот только код получается очень уж далёк от JavaScript-результата… а время сборки начинает вгонять в тоску, и становится только хуже со временем. В итоге всё новое делается на AngularJS + TypeScript, которые в сумме дают много плюшек, но при этом близки и понятны к тому, что работает в итоге.

Какие задачи мы решаем сейчас

Основное применение Java в Лайтсофт на данный момент - различные системы, требующие быстрой обработки большого количества данных/запросов, это:
  • Сердце нашего алгоритма поиска туров, собирающее данные с различных систем, и работающее на нескольких площадках.
  • Специальный кэш туров для поиска, где один сервер держит нагрузку по быстрому (5-20мс) показу цен для всего TopHotels.ru.
  • Это также TourManagerPro, с механизмом расчёта цен отелей и туров, позволяющий в реальном времени гибко вычислять лучшие предложения для клиентов туроператора.


За это время Java зарекомендовала себя, как достаточно быстрый, мощный и стабильный язык и платформа, которая при этом представляет хорошие возможности для длительной поддержки проектов.


Оставить заявку
Приложите файл резюме или ссылку на резюме
Файл резюме

Вычислите значение выражения:

CAPTCHA Image [обновить]

ок