Разработка → Где живут ваши объявления?

Oldtuna 14 февраля в 13:40 28,8k
image

Мы открываем техно-блог компании Avito. Многие знают бренд, но не так много тех, кто знает, как сервис устроен с технической стороны. В своём блоге мы приоткроем завесу неизвестного и расскажем о технической кухне сервиса.

Начнем с небольшой истории о том, что проект представляет из себя сегодня, чем занимается команда инженеров, и что мы планируем делать в ближайшем будущем. Еще мы собрали в этом посте множество ссылок на уже опубликованные материалы, доклады и презентации нашей команды, которыми давно хотели поделиться. Хотите знать, где живут ваши объявления? Добро пожаловать под кат!

Начало


Очень сложно начинать короткий рассказ о компании с насыщенной историей так, чтобы ничего не забыть и не сильно вдаваться в детали. Детали оставим для будущих статей, в которых постараемся подробнее раскрыть те или иные вопросы. Если у вас есть особые или интересные темы, о которых вы бы хотели услышать от разработчиков Avito, пишите о них в комментариях — мы обязательно затронем эти вопросы.

Как и в случае многих больших проектов, история Avito начиналась с небольшой команды. Первая версия сайта была запущена в 2007-ом году, и первые шаги были полны проб и ошибок. В текущем виде сайт сформировался лишь два года спустя. Сервис начинал создаваться силами всего 4 разработчиков, которые занимались абсолютно всем, от инфраструктуры до клиентской части. Сайт 2009-го года вряд ли можно было бы отправить на конкурс «Лучший сайт чего-бы-то-ни-было». Но этот результат до сих пор вызывает чувство ностальгии у причастных к нему. Как и определенную гордость, ведь это было сделано малым количеством ресурсов, но достаточно для того, чтобы заявить о себе и заложить фундамент успешной компании.

Сложно представить, но до 2012-го года размер команды разработки практически не менялся. Однако проект становился все больше, и это стало необходимостью. Так с 2012-го команда начала активно расти, увеличиваясь в разы. Появилось деление на специализации, направления, проекты, команды, группы. Сейчас над Avito трудится технический департамент из более чем 250 специалистов.

Avito сегодня


Сегодня Avito стабильно входит в топ-5 площадок рунета, топ-3 мировых классифайдов по версии различных источников. Ежемесячно через web и мобильные приложения сервис обслуживает более 35 миллионов пользователей, которые ежедневно публикуют около миллиона новых объявлений (в “бэк-офисе” их накопилось уже более миллиарда), совершают более 100 тысяч сделок. По данным Яндекса, в некоторых городах России (например, в Москве), по числу просмотров страниц Avito опережает всех, включая социальные сети.
image

Avito является высоконагруженным проектом. Немного цифр, чтобы оценить масштаб: 300+ серверов, 10TB в postgres, 270TB картинок, 13Gbit/s трафика вечером в пике, около миллиона запросов к бекенду в минуту. Поэтому экспертиза в области обработки данных является одной из самых критичных для наших бизнес-процессов. При этом стоит понимать, что такие объемы данных нужно не только накапливать и хранить, но и обрабатывать, фильтровать, классифицировать и обеспечивать поиск по ним. Эффективно справляться со всеми задачами не может один-единственный инструмент, потому используется ряд решений, таких как: PostgreSQL, Tarantool, Vertica, MongoDB, Redis и прочие системы хранения. Мы обязательно поделимся рассказами про особенности архитектуры в будущих статьях. Пока же можно ознакомиться с докладами, в которых наши коллеги делятся своим опытом:


image

Много данных — это хорошо для сервиса, но большая проблема для пользователя – как найти нужное? В этом помогает систематизация объявлений и поиск по ним. Поиск — наиболее сложная задача. И проблема здесь не столько в объемах данных, сколько в человеческом факторе. Дело в том, что пользователи постоянно ошибаются, как в описании объявлений, так и в поисковой строке. Одна из основных задач — нивелировать ошибки в описании и понять, что же имел в виду пользователь.

Для устранения ошибок в описаниях используются различные справочники и алгоритмы коррекции, а так же более продвинутые подходы вроде компьютерного зрения. Последнее, например, с очень высокой вероятностью (по некоторым категориям более 95%) определяет, правильно ли пользователь выбрал категорию. Кроме того, Avito регулярно привлекает специалистов по машинному обучению для участия в конкурсах (на платформах machinelearning.ru, boosters и kaggle), целью которых является поиск наиболее эффективных алгоритмов для решения различных прикладных задач.

Для полнотекстового поиска используется Sphinx, и мы регулярно делимся опытом его использования, активно участвуем в развитии технологии.


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

image

Минутка рекламы… а точнее, поговорим о ее показе. Экономические и этические вопросы оставим для других блогов. Здесь же интересна техническая составляющая этого вопроса. Дело в том, что рекламодателям и площадкам интересна только целевая аудитория. Для ее определения используется сегментирование аудитории. Проблема в том, что пользователей и их запросов огромное количество, а чтобы определить категорию пользователя, необходимо учитывать множество критериев. При этом время на определение категории ограничено, ведь дальше она будет передана рекламным площадкам, между ними состоится аукцион и только тогда определится рекламный блок к показу. Все это связано с большим количеством данных и требованием, чтобы все происходить за доли секунды. Подробнее мы об этом уже рассказывали на конференциях и митапах.


Данные — не единственное сложное место. Бизнес и рынок диктуют все новые условия, которые превращаются во все более сложную бизнес-логику. Исторически сложилось, что бизнес-логика сервиса реализована на PHP. В прошлом году мы перешли на новую его версию — PHP7, и уже чувствуем как сервера выдохнули и стали напрягаться в три раза меньше. Сегодня PHP — не единственный серверный язык, который используется в Avito. Изначально проект был монолитным, но он уже давно развивается в сторону микросервисов. В зависимости от задачи и нагрузок используются различные языки, такие как Python и Go.

Какие бы сложные задачи не решались на стороне сервера, это все скрыто от обычного пользователя. А то, что видят пользователи, работая с сервисом, делается силами фронтенд команды. Изначально сайт создавался на традиционных для того времени технологиях, серверный рендеринг и jQuery. Но не так давно мы полностью отказались от jQuery в пользу браузерных API и небольших библиотек, решающих конкретные задачи. Фронтенд-разработка старается идти в ногу со времени, использовать актуальные технологии и подходы. Например, новая версия JavaScript используется с момента утверждения спецификации (сейчас используется ECMA2016). Помимо этого появляются все больше веб-приложений (SPA), которые реализуются на React и basis.js. Фронтенд-разработчики так же участвуют в open source проектах (таких, например, как CSSO), создают инструменты и делятся своим опытом на конференциях:


image
Компания Avito появилась практически вместе с зарождением мобильной платформы, какой мы знаем ее сегодня. Конечно же, сначала была только веб-версия, потом появилась веб-версия, адаптированная для мобильных устройств. Но нативные приложения – это нативные приложения, и у них есть своя специфика, которая зависит от платформы. Сегодня мобильным приложениям уделяется очень большое внимание — и мы уверены, что этот тренд будет сохранится. Отдельные команды разрабатывают сразу несколько приложений под iOS и Android. Ребята подходят к вопросу разработки ответственно, делятся своим опытом на конференциях и наработками на GitHub.

Обе команды, и iOS, и Android, используют самый современный стек технологий. Во-первых, это Swift и Kotlin, которые уже практически полностью заменили в наших продуктах тяжелое наследие Java и Objective-C. Во-вторых, это инвестирование в развитие и продвижение инженерных практик — CI, CD, Code Review, автоматизация тестирования. В-третьих, это чистая и масштабируемая архитектура, которая позволяет нескольким группам разработчиков развивать крупный проект без возникновения коллизий и оперативно реагировать на нужды пользователей.


Вначале дизайн Avito рисовали менеджеры и разработчики, но с появлением мобильных приложений стало ясно, что надо развивать это направление в компании. Сейчас у нас 15 дизайнеров интерфейсов: команда Avito и команда профессиональных инструментов Acti.
Дизайн и разработка интерфейсов для такого большого продукта — очень сложный, но интересный процесс. Вся работа строится в плотном взаимодействии с разработкой, так как есть множество ограничений со стороны платформы, которые нужно учитывать. Дизайнеры всегда стараются найти оптимальное решение с точки зрения удобства пользователя, бизнеса, разработки и сроков.

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

Тестирование в Avito появилось не сразу, первые QA-специалисты присоединились к команде в 2012-ом году. Сегодня в ней более 40 специалистов, треть из которых — автоматизаторы. Набор инструментов достаточно стандартный: PHP + PHPUnit, Selenium, Selendroid. Для организации взаимодействия между тестировщиками и разработчиками используется самописный инструмент “Avito.Cthulhu”, который позволяет хранить тест-кейсы, распределять задачи и отслеживать те, что вернули на тестирование.

Вот так выглядит разработка Avito, если рассказывать кратко. Конечно, многое ещё осталось за кадром. Постараемся в скором времени исправить этот недостаток!

Вместо заключения


Узнать больше про техническую кухню Avito можно из докладов наших разработчиков на ведущих конференциях и митапах. Кроме того, мы регулярно организуем встречи разработчиков в нашем офисе и хостим ивенты независимых сообществ, таких как MoscowJS, CocoaHeads, PostgreSQLRussia, Tarantool, Moscow SPA meetup и других. Анонсы всех событий и новости мы публикуем в нашем технологическом твиттер-канале AvitoTech, там же выкладываем ссылки на итоговые материалы. Записи со встреч, которые проходили в нашем офисе, можно найти на нашем Youtube-канале. Пишите в комментариях, с какой стороны вам было бы интересно узнать об Avito, и мы это обязательно учтём ваши пожелания при подготовке следующих постов. До новых встреч!
Проголосовать:
+102
Сохранить: