- PVSM.RU - https://www.pvsm.ru -

Где живут ваши объявления?

image

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

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

Начало

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

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

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

Avito сегодня

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

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

image

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

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

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

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

image

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

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

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

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

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

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

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

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

Итак, мы вкратце пробежались по отдельным направлениям разработки сервиса, хотя многое ещё осталось за кадром. Обещаем в скором времени исправить этот недостаток!

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

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

Автор: Avito

Источник [43]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/postgresql/243157

Ссылки в тексте:

[1] топ-5 площадок рунета: http://mediascope.net/services/media/media-audience/internet/information/

[2] топ-3 мировых классифайдов: https://techcrunch.com/2015/10/23/naspers-buys-majority-stake-in-russian-classifieds-site-avito-for-1-2b/

[3] различных: http://www.nasdaq.com/video/avito-ranks-with-craigslist-in-online-classified-ads--sees-revenue-doubling-518458153

[4] источников: http://www.rbc.ru/special/business/14/12/2015/5669bbdc9a79472e718fd6df?from=typeindex%2Farticle_specproject

[5] данным Яндекса: https://yandex.ru/company/researches/2016/ya_internet_regions_2016#polzovanieinternetomvraznyxgorodax

[6] PostgreSQL в архитектуре Avito: https://www.youtube.com/watch?v=2LDAcGZRAEM&feature=youtu.be&t=1h1m40s

[7] Avito.ru объявления и postgres: http://www.slideshare.net/ssuserdc9298/devconf15

[8] Сегментация пользователей на Tarantool: https://youtu.be/1RS6GvK-JfU?t=51m40s

[9] Большая база объявлений: http://www.slideshare.net/ssuserdc9298/pgconfru-2015-avito-postgresql

[10] по некоторым категориям более 95%: http://www.machinelearning.ru/wiki/index.php?title=Конкурс_Avito-2016:_Распознавание_марки_и_модели_автомашин_на_изображениях/Рейтинг_участников

[11] machinelearning.ru: http://www.machinelearning.ru/wiki/index.php?title=Категория:Avito

[12] boosters: https://boosters.pro/champ_4

[13] kaggle: https://www.kaggle.com/c/avito-duplicate-ads-detection

[14] Атличнаи дивчачьи каньки: https://www.youtube.com/watch?v=odwttz-GBOA

[15] Бэк-офис в Avito: миллиард объявлений на 10 серверах: https://www.youtube.com/watch?v=hmaiLvaokOQ

[16] Архитектура поиска в Avito: http://backendconf.ru/2016/abstracts/2100.html

[17] Sphinx tips & tricks: https://www.youtube.com/watch?v=PiMXMzsLm9g&list=PLknJ4Vr6efQExFxznmq2h0mOiKKpTqkV9&oref=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPiMXMzsLm9g%26list%3DPLknJ4Vr6efQExFxznmq2h0mOiKKpTqkV9&has_verified=1

[18] Допиливаем Sphinx на чистом С: https://www.youtube.com/watch?v=PYosStXsq0I&list=PLknJ4Vr6efQExFxznmq2h0mOiKKpTqkV9&index=2&oref=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPYosStXsq0I%26list%3DPLknJ4Vr6efQExFxznmq2h0mOiKKpTqkV9%26index%3D2&has_verified=1

[19] Успеть за 100 миллисекунд: контекстная реклама на Sphinx: https://youtu.be/HwsBHXbirYs

[20] Контекстная реклама в Avito: что под капотом: https://youtu.be/2wxbpuB4EKg

[21] Построение рекомендательной системы на Python: https://youtu.be/3MEe5IzBJk4

[22] CSSO: https://github.com/css/csso

[23] Как сделать ваш JavaScript быстрее: https://youtu.be/BstzvS2xd5U

[24] Фронтенд в Avito: https://youtu.be/OFKbwNc8AIw

[25] МРТ для данных: https://youtu.be/46YeR1vlh7E

[26] Сжимаем CSS: https://youtu.be/RQbvWRwreaQ

[27] О том, как не надо тестировать: https://youtu.be/dqKQhvO9EPA

[28] Иструментируй это: https://youtu.be/aMP6j6um4Ss

[29] Блеск и нищета Proxy-браузеров: https://youtu.be/HQbOTl2xPLQ?list=PLknJ4Vr6efQFV5dA3lL6ErVVDS-QoncjF

[30] iOS: https://itunes.apple.com/ru/developer/keh-ecommerce-llc/id417281776

[31] Android: https://play.google.com/store/apps/dev?id=6750101820856332864&hl=ru

[32] GitHub: https://github.com/avito-tech/

[33] Introducing Application Coordinator: https://www.youtube.com/watch?v=CDZ5g9nH2Fk

[34] DeepLink’и в Avito: https://www.youtube.com/watch?v=060ERE8ZMGI

[35] Android development with Kotlin: https://www.youtube.com/watch?v=8u4fZ1z4X-w

[36] Advanced Swift Generics: http://www.slideshare.net/MaxSokolov2/advanced-swift-generics

[37] Пора ли переходить на Swift: https://habrahabr.ru/company/jugru/blog/301998/

[38] Оптимизация скорости компиляции большого проекта на Swift+Objective-C: http://www.slideshare.net/AvitoTech/objectivec-swift-avito

[39] Удобный и расширяемый роутинг в iOS-приложении: https://www.youtube.com/watch?v=kyOm_dC038s

[40] ответили в статье на vc.ru: https://vc.ru/p/avito-ama

[41] твиттер-канале AvitoTech: https://twitter.com/AvitoTech

[42] Youtube-канале: https://www.youtube.com/c/AvitoTech

[43] Источник: https://habrahabr.ru/post/321796/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best