Web-проекты БИТ «Мастера»: усиливаем команду

avatar Evgeny
Soynov
10.04.2014, 09:05
комментировать

От редакции: Руководитель направления веб-разработки компании БИТ «Мастер» — Евгений Сойнов — рассказал по нашей просьбе о том, какими проектами сегодня гордится компания и для чего они так активно усиливают свою команду. Слово автору.

IMG_9198 (1)

Вот уже более двух лет я изнутри наблюдаю (и непосредственно участвую) за бурным развитием веб-разработки компании БИТ «Мастер». Серьёзное испытание: практически с нуля развивать побочное направление, к тому же для очень специфического потребителя (службы такси). Казалось бы, тоска, уныние и тлен. Но группа нормальных разработчиков, которых не злить постоянно меняющимися требованиями (привет, разработка на заказ), способна даже в таких условиях показать интересный результат.

Так вот, в этом небольшом посте я хочу похвастаться некоторыми нашими успехами.

Проект “Центр обмена заказами”

Проблема: в некоторых случаях службы такси не имеют возможности выполнить заказ. Например, из-за отсутствия свободных машин, либо машин определённого класса (бизнес, грузовые) и т.п. Тем не менее, каждый заказ — это определённая сумма денег, которые служба недополучит, если откажется от него. И мы придумали как помочь.

В этом случае в дело вступает наш Центр обмена заказами (ЦОЗ): с его помощью уже обработанный заказ от службы-владельца «продаётся» другой службе. В результате владелец получает сумму с заказа, а исполнитель экономит на обработке входящего звонка и получает удобный для него заказ. При этом сохраняется анонимность клиента и водителя исполнителя без какого либо ущерба удобству использования. Даже если они захотят созвониться, то у нас есть для этого решение: после определённого запроса наши сервера телефонии автоматически соединят их, не раскрывая лишней информации.
Проект написан с использованим фреймворка symfony2 (2.3). Ключевые технологии: mongodb, beanstalkd, php-fpm, capifony, god. Проект покрыт тестами (не настолько плотно как хотелось бы, но достаточно неплохо), что время от времени спасает наши головы от лишних неприятностей.

Работа с настольным софтом (система Такси Мастер) происходит посредством REST-интерфейса (разные коды ответов, разные типы запросов — вот это всё). Протокол асинхронный (сделано в целях уменьшения нагрузки).

Типичный случай: запрос приходит в ЦОЗ, обрабатывается, ответ попадает в очередь, затем уведомление уходит обратно в настольную софтину.

Вот как-то так выглядит схема работы с заказом (стрелочка показывает от кого кому идёт запрос)

схема-ЦОЗ

Проект “Агрегатор Яндекс.Такси”

Да, мы работаем с Яндексом. Этот ИТ-гигант очень серьезно подходит к выбору партнеров, поэтому работа с ним для многих является вопросом деловой репутации. В том числе и для служб такси, которым для подключения к Яндекс.Такси приходится серьезно подстраиваться под его требования. Самое больное для них требование — наличие определенного минимального числа машин в службе. При этом многие компании в своём парке имеют не больше десятка экипажей. И тут мы тоже знаем, что делать.

Для того, чтоб эти службы могли работать с Яндексом придуман Агрегатор Яндекс.Такси: службы подключаются к нашему сервису, а мы выступаем в качестве одного большого таксопарка, у которого машин для подключения хватает. Проект архитектурно практически аналогичен предыдущему, но в качестве сервера очередей используется gearman, а не beanstalkd.

Платформа БИТ «Мастер»

Однажды мы поняли, что проектов становится много, функционал в них часто дублируется, приходится каждый раз писать одни и те же штуки. Естественно, людям, которым мы отдаём свои проекты в использование, тоже особенного удовольствия не доставляет поддержание целостности информации об одних и тех-же клиентах в разных сервисах. К тому же, честно признаюсь, мне давно уже хотелось попробовать сделать как у «больших парней»: написать API, которые мы бы могли использовать, объединяя свои проекты и, возможно, в дальнейшем даже предоставлять службам-клиентам.

В результате возникло ядро системы (аккаунты,  логи, статистика и т.д.) и сервисы, которые это ядро используют для собственной работы (панель администрирования, система доставки запросов к клиентам, построитель графиков).

Например, таксофоны (а служб их использующих уже несколько десятков), про которые уже рассказывал Андрей Подкин (http://old.izh-it.ru/news19934/) используют возможности платформы:

  1. первым на пути потока данных встаёт сервис, который разворачивает ssl траффик (специализированная софтина, которая умеет это делать с минимальным потреблением ресурсов);
  2. дальше запрос попадает в eventmachine-демон, который на основе данных из ядра платформы определяет к какой из служб такси нужно перенаправить запрос, какой из адресов этой службы помечен мониторингом как активный и перенаправляет туда соединение, попутно собирая неперсонифицированную статистику;
  3. если адрес всё-же оказывается недоступным, то уже демон в свою очередь уведомляет об этом мониторинг;
  4. на основе данных из мониторинга служба видит когда и что у него было недоступным (из-за особенностей интернетов нашей необъятной родины такое случается нередко) http://i.imgur.com/7MdsaGL.png ;
  5. на основе статистики клиент может посмотреть отчёты (пока только по числу заказов и по соотношению платформ, но мы работаем в этом направлении). Как-то так это выглядит: http://i.imgur.com/XP66rDC.png

Всё это хозяйство вполне неплохо себя чувствует даже при 20-30rps, несмотря на то, что сервисы самописные. Сейчас платформа активно расширяется и дописывается. Используются: mysql, eventmachine, rails, coffeescript, capistrano, god

C чем мы работаем?

  • Linux

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

  • Gitlab

Попробовали несколько вебинтерфейсов для гита, в результате остановились на этом. Использую его для код ревью, управления pull request. (думаю, не нужно отдельно описывать что мы тут, как в лучших домах, ведём разработку в ветках);

  • Capistrano

Не хочется вспоминать, но к моему приходу в компаниях, проекты разворачивались при помощи копирования или git checkout. Кое-кто и вовсе не гнушался поправить код прямо на сервере. Весёлые времена были. Сейчас проекты автоматически разворачиваем при помощи capistrano;

  • Jenkins

Гоняет туда-сюда наши тесты. Все понимаем, что лень — это нормально и кто-нибудь рано или поздно забудет (или поленится) запустить тесты перед коммитом;

  • Skype

В аське нет конференций, джаббер просто не прижился. В итоге остановились на скайпе. Часто общаемся через него даже сидя в одной комнате, чтоб не мешать коллегам. В него же получаем уведомления о новых коммитах и результатах прохождения тестов. Например вот: http://i.imgur.com/zbb5ldo.png . На скрине видно, как я смержил ветку, но запустившимся тестам не хватило места и они зафейлились :), а после очистки и повторного запуска наступило счастье;

  • Trello

Первое преимущество в том, что я вижу кто из разработчиков чем занят, даже будучи вне офиса. Второе — в том, что мне не приходится насаждать своё мнение по поводу того кто чем должен заняться (кроме крайних случаев). Из беклога задачи разбирают по принципу кому что нравится. Но в беклог естественно попадает то, что нравится мне :) Типичное состояние доски веб-отдела: http://i.imgur.com/8AWyWDP.png

  • Redmine

Тут всё как у всех (должен же быть трекер, правда?) Используем в основном взаимодействия между отделами с разработчиками настольного софта и мобильных приложений.

В планах научиться пользоваться связкой vagrant и chef, чтоб наши окружения были ближе к production. Прямо в совсем ближайшие дни начнём внедрять selenium. Да и вообще не зацикливаемся на известных вещах, постоянно ищем способы улучшить наш процесс разработки.

Какие трудности (и к чему это я вообще)?

Я описал далеко не все проекты, которыми мы занимаемся. И делаем мы это силами небольшой команды. Разумеется, нам нужно больше золота специалистов в области PHP и Ruby, но найти их сегодня в Ижевске не легко. Фактически делать высоконагруженные веб-сервисы проще, чем набрать команду для них.

На данный момент в направлении WEB-разработки у нас открыты 3 вакансии:

1. PHP senior developer - http://bitmaster.ru/job/phpsd/

2. РНР developer — http://bitmaster.ru/job/php/

3. Ruby on Rails developer — http://bitmaster.ru/job/ror/

Обычно общением с будущими сотрудниками занимается Оксана Вахрушева (Skype: Oksana_hr18), но сегодня я готов обсуждать это лично.

Во-первых, нужны хорошие специалисты, профессионалы. Да, мы все понимаем, что такие люди обычно знают себе цену. Я, как руководитель и участник собеседования иду навстречу ВСЕМ запросам, адекватным уровню человека.

Во-вторых, нужны люди, которым интересно развиваться. Пусть у человека мало опыта, но горят глаза и трясутся руки (в хорошем смысле :D) при виде интересного проекта. Тогда — это наш пациент кандидат. (Студенты, ау! Неужели проекты на битриксе пачками штамповать интереснее?)

Во-третьих, не все люди, которые приходят ко мне на собеседование, ищут именно работу. К несчастью, большинство гонится за заработком. Парни, которым интересен вызов их способностям, трудная и яркая задача, почему-то встречаются редко. Насильно мотивировать или пытаться вызвать интерес к делу у человека не хочется ибо внутренне верю, что есть только самомотивация, а всё остальное от лукавого. Да и нет смысла делать это с человеком, который себя гордо специалистом называет.

Вобщем, я предлагаю вам интересную работу над проектами федерального значения (посмотрите тут сколько у нас клиентов http://www.taximaster.ru/maps/), общение с крупнейшими ИТ-компаниями страны (про Яндекс вы читали выше), никакой бюрократии – чистый процесс (я сам долгое время был разработчиком, руководство тоже профильный опыт имеет), рост всего (должности и зарплаты), даже, САМОЕ ИНТЕРЕСНОЕ, готов выбить для специалиста зарплату больше, чем он получал до нас. Но мне нужны ваши мозги.

Пишите, задавайте вопросы, обсудим.

Не скупитесь на ретвиты ↓
  • Дмитрий Плетнев

    Хороший пост написал. Надо тебя на собеседование позвать!

    • Evgeny Soynov

      Таки не стоит, наверное)

  • Andrew

    во-третьих — палец вверх

Get Cloud PHP Hosting on CatN