Для программиста

Краткая история компании

Компания LightSoft Research была создана в ноябре 2001 года. Родилась она в ответ на необходимость автоматизации туристического агентства одного знакомого нынешнего генерального директора компании.

Первой задачей было искоренить массовые рассылки СПО и сделать центральный архив всех файлов СПО для турагентств. Так родился проект allspo.ru, за считаный год завоевавший популярность на рынке.

Технически СПО — это файлы с турами и ценами на них в разных форматах типа doc, xls и так далее. При этом, в этих файлах одни и те же объекты могут иметь разные названия (курорты, названия отелей, виды питания — у каждого туроператора могут быть свои варианты).

В двух словах про предметную область. Туристический рынок устроен следующий образом. Есть туроператоры, которые формируют туры (место в отеле + авиабилет) и распространяют их в виде СПО (специальные предложения оператора). Сами СПО попадают к турагентствам, которые их продают уже непосредственно туристам. Турагентства есть потому, что по законодательству России туроператор напрямую туристу продать не может.

Но искать какой-то конкретный тур для туриста среди множества файлов — это трудная задача. Поэтому компания ЛайтCофт решила создать систему, которая автоматически бы приводила данные из СПО в единый формат. Так возник проект TourIndex.

Разумеется, туристические агентства решили для привлечения клиентов разместить поиск тура на своем сайте, а у кого сайта еще не было, захотели его, видя, как интернет-технологии завоевывают туризм. Так появилась идея делать сайты для туристических агентств и выводить на этих сайтах различные модули с автоматически обновляемыми данными на основе базы туров TourIndex (поиск туров, горящие туры, минимальные цены и т.д.).

Для сайтов была написана CMS TourAdmin, а модули, устанавливаемые на сайты, назвали TourClient.

Ну, а дальше поехало: автоматизация, маркетинг, рекламные носители — и все завертелось. Как результат — через 10 лет в портфеле компании более 40 проектов туристической направленности. Более 100 собственных серверов в дата-центре. Штат компании достигает 200 человек. Пришло признание профессиональной средой. Наши клиенты - это большая часть туроператоров и турагентств России и Украины, отели всех стран и континентов, а также туристы.

Посмотреть решения компании и почитать про них можно на ресурсах:

Избранные проекты

Отягощение highload

У нас есть проекты с огромным количеством данных (более 4 миллиардов записей в БД туров). Есть проекты с большим количеством обращений (сотни rps). Есть проекты с большим количеством картинок (1,5 миллиона). Есть проекты, которые не влезают на один сервер (9 бэкендов Tophotels).

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

Некоторые параметры highload

  • База предложений TourIndex — это кластер из 17 PostgreSQL серверов. Это не считая сервера инфраструктуры обновления данных.
  • AdvBroker — 4 бэкенда nginx-apache-php5, сервер MySQL, 200 GB оперативных данных.
  • TopHotels — 2 фронтенда + 4 бэкенда nginx-apache-php5, выделенный сервер под картинки, memcached+pgbouncer и сервер БД.
  • TourClient - 4 бэкенда nginx-apache-php5, memcached.

Серверные технологии

  • Freebsd — мы умеем настраивать эту ОС. Возможно, не супертонко, но достаточно для того, чтобы держать нагрузку.
  • Apache2 — сделать так, чтобы либо жило, либо падало, не тормозя и не раздражая - это наше кредо.
  • nginx — проксирование, проксированное кэширование, кэширование по запросу, выдача статики, версионность css/js - это и многое другое позволяет детище великого русского программиста Игоря Сысоева, и мы пользуемся этим.
  • php5 — правильная сборка, конечно же с APC и xdebug там, где нужно. Не регулярное, но достаточно частое обновление до последних версий на продакшн серверах.
  • memcached — php-сессии, статистика состояний сервисов реального времени.
  • postgresql — настройка для быстрой выдачи тысяч мелких запросов в секунду, настройка для одновременного обновления миллионов строчек данных и при этом без потери эффективности выдачи. Да, мы любим Синего слона!
  • Pgbouncer — как nginx для apache2, так pgbouncer для postgres устанавливает ограничение на соединение, держит клиентов на себе, держит постоянно открытым достаточное количество соединений с сервером. Очень экономичен по потреблению памяти и процессора.
  • mysql — умеем тюнинговать innodb, myisam, организация /tmp в память и много, чего ещё.

Технологии разработки

  • Собственный фреймворк: формы, шаблоны, таблицы, MVC, конфигурация, работа с БД, дебаггер — всё, что нужно для создания приложения.
  • SVN: использование веток, выкладка на продакшн через специальный сервис, oncommit-триггеры. CVS мы также чуть-чуть используем в дань памяти отцам.
  • Тестовый сервер: БД MySQL, Postgresql, вебсервер — всё для разработки с SSH доступом, но без возможностей ребута apache. =)
  • Предпродашкшн сервер — часто(а нужно ещё чаще) синхронизируемые БД сервера, выделенный вэб-сервер, pgbouncer. Воспроизводят инфраструктуру продакшна.
  • Готовые решения для отказоустойчивости: проверка доступности баз и сервисов.
  • Технология синхронизации данных.

Организация разработки

Разработка разделена условно на два этапа: от идеи до дизайн-макета с техническим заданием и от дизайн-макета с техническим заданием до релиза. То, про что мы здесь говорим, это второй этап.

Задачи поступают концептуально проработанными, поставленными через систему управления проектом (основательно допиленный Mantis BT, практически форк), с вёрсткой и общим описанием, что именно мы делаем.

Объём, который мы берём в работу, планируется на две недели — у нас итерации. Четверг-пятница - дни документирования и рефакторинга.

По основным проектам есть список задач на несколько месяцев вперёд, в наших терминах - Рабочий план или backlog.

По всем задачам обязательны технические постановки с последующим их одобрением старших товарищей.

На многих проектах 100% ревью кода. Мы считаем, что это один из лучших способов обмена знаниями и опытом.

Разработка состоит из групп, объединённых вокруг проектов. В каждой группе есть старший программист и координатор. Количество программистов — до четырёх человек в группе.

Для документации мы используем MediaWiki.

Для коммуникаций используется jabber (есть корпоративный jabber-сервер), skype, icq, комментарии в трекере. В некоторых группах приняты постоянные skype-чаты. Практически везде приняты ежедневные летучки.

Обучение

У нас в компании многое вкладывается в обучение сотрудников. Оно ведется как в рамках групп (ведущие помогают начинающим программистам), так и в рамках Технического департамента (обмен опытом через CodeReview, решение вопросов и обсуждения через рассылку, интерактивная среда для проведения вебинаров). Раз в год проводится LSConf в День Разработчика Лайтсофт, где все программисты за счет компании приезжают в Москву (помимо остальных корпоративов с оплачиваемой дорогой) и несколько дней общаются вживую, проводят мастер-классы и обсуждают насущные проблемы разработки.

Присоединяйтесь!

Приходите к нам работатьи научите нас чему-нибудь новому! :-)