Блог о технологиях
Содержание
от Avito: знакомьтесь на Medium! | от АвитоДев | AvitoTech
Всем привет, сегодня мы запускаем блог Avito о технологиях на Medium. Для начала несколько слов об Авито. Avito — это платформа онлайн-объявлений как для частных лиц, так и для компаний. В настоящее время Avito стабильно входит в топ-5 российских сайтов и в топ-3 мировых сайтов объявлений по разным данным. Вещи, выставленные на продажу на Авито, могут быть как новыми, так и бывшими в употреблении. На сайте также публикуются вакансии и резюме.
В этом блоге мы расскажем вам о технологиях, лежащих в основе платформы Авито. Начнем с нескольких слов о текущем состоянии проекта, функциях его инженерной команды и наших планах на ближайшее будущее.
Как и многие другие крупные проекты, Avito был запущен небольшой командой. Первая версия сайта была запущена еще в 2007 году, и первые шаги шли методом проб и ошибок. В своем нынешнем виде сайт появился лишь два года спустя. Веб-сервис изначально разрабатывался командой всего из 4 разработчиков, которые занимались абсолютно всем — от инфраструктуры до фронтенда. 2009 годверсия веб-сайта определенно не была чем-то, что можно было бы рассматривать для участия в конкурсе на лучший дизайн веб-сайта. Но те, кто участвовал в проекте, до сих пор испытывают по нему ностальгию. И гордитесь этим, потому что проект был реализован с ограниченными ресурсами, и все же ему удалось заявить о себе и заложить основу успешного бизнеса.
Трудно представить, но до 2012 года размер команды разработчиков не менялся. Однако проект разрастался, и мы чувствовали потребность в новых талантах. В 2012 году команда вступила в фазу экспоненциального роста. Оно стало подразделяться на специализации, направления, проекты, команды и группы. Сейчас в Авито есть целый инженерный отдел, в котором работает более 300 специалистов.
Через веб-приложения и мобильные приложения платформа ежемесячно обслуживает более 35 миллионов пользователей, которые ежедневно добавляют около миллиона новых объявлений (в бэк-офисе накоплено более миллиарда объявлений) и совершают более 100 000 транзакций. По данным Яндекса, в некоторых городах России (например, в Москве) Авито считается высоконагруженным проектом по просмотрам страниц. Некоторые цифры могут дать лучшее представление о масштабах проекта: 300+ серверов, >20 ТБ в Postgres, 270 ТБ изображений, 13 Гбит/сек трафика в вечерние часы пик, около миллиона запросов в минуту к бэкенду. Поэтому опыт обработки данных имеет решающее значение для наших бизнес-процессов. При этом эти объемы данных нужно не только накапливать и хранить, но и обрабатывать, фильтровать, классифицировать и делать доступными для поиска.
Ни один инструмент не может эффективно справиться с этими задачами, поэтому Avito использует ряд решений, таких как: PostgreSQL (установка PostgreSQL от Avito — одна из крупнейших и справляется с одними из самых высоких нагрузок в мире), Tarantool, Vertica, MongoDB, Redis и другие системы хранения. Об архитектуре системы мы расскажем в следующих постах.
Тонны данных хороши для платформы, но представляют собой проблему для пользователя, который хочет найти именно то, что ему нужно. На помощь пользователю приходят инструменты классификации и поиска объявлений. Поиск — самая сложная задача. Проблема не столько в объеме данных, сколько в человеческом факторе. Реальность такова, что пользователи всегда ошибаются, как в текстах объявлений, так и в поисковой строке. Одна из основных задач — устранить ошибки в объявлениях и понять, что имел в виду пользователь.
Для устранения ошибок используются всевозможные справочные материалы и алгоритмы коррекции, а также более продвинутые подходы, такие как компьютерное зрение. Например, компьютерное зрение способно с очень высокой вероятностью (в некоторых категориях выше 95%) проверить, правильно ли пользователь выбрал категорию объявления. Кроме того, Avito регулярно отправляет специалистов по машинному обучению на конкурсы (проводимые такими платформами, как machinelearning.ru, boosters и kaggle), целью которых является поиск наиболее эффективных алгоритмов для решения различных прикладных задач.
Для полнотекстового поиска используется Sphinx, с которым мы регулярно делимся опытом и активно участвуем в развитии технологии.
Как уже было сказано, ежедневно пользователи добавляют около миллиона новых объявлений. Но мало кто знает, что больше половины из них — спам. Традиционно модерация использовалась для выявления спама. Забавный факт: первая версия системы модерации была написана всего за неделю, и она настолько эффективна, что с тех пор не потребовалось ни одного крупного обновления. Но, несмотря на улучшения, очевидно, что вручную обрабатывать такой объем информации невозможно. Поэтому используются более продвинутые методы, например, нейронные сети, которые непрерывно обучаются на основе решений модератора-человека.
Данные — не единственная проблема. Рынок постоянно диктует новые требования, которые выливаются во все более сложную бизнес-логику. Исторически бизнес-логика платформы реализована на PHP. В 2016 году мы перешли на новую версию — PHP 7, и серверы взяли передышку, нагрузки упали в три раза. Сегодня PHP — не единственный серверный язык, используемый на Авито. Изначально проект имел монолитную архитектуру, но уже давно движется в сторону микросервисов. В зависимости от задачи и нагрузок используются разные языки, такие как Python и Go.
Какими бы сложными ни были задачи на стороне сервера, все это скрыто от пользователя. За то, что видят пользователи при взаимодействии с сервисом, отвечает команда фронтенда. Изначально сайт строился с использованием доступных на тот момент технологий серверного рендеринга и jQuery. Но не так давно мы полностью отказались от jQuery в пользу браузерных API и небольших библиотек, решающих конкретные задачи. Frontend-разработка старается идти в ногу со временем, использовать новейшие технологии и решения. Например, сразу после утверждения спецификаций была внедрена новая версия JavaScript (сейчас используется ECMA2016). Кроме того, появляются новые веб-приложения (SPA), построенные на React и base.js. Фронтенд-разработчики также принимают участие в проектах с открытым исходным кодом (таких как CSSO (CSS Optimizer — минимизатор CSS со структурными оптимизациями), разрабатывают инструменты и делятся своим опытом на конференциях.
Avito появился в момент зарождения мобильной платформы, какой мы ее знаем сегодня. Естественно, все началось с веб-версии, затем была запущена веб-версия для мобильных устройств. Но нативные приложения имеют функции, зависящие от платформы. Сегодня мобильные приложения находятся в центре внимания. Отдельные команды одновременно разрабатывают несколько приложений для iOS и Android. Ребята очень серьезно относятся к своей миссии, делятся опытом на конференциях и на GitHub. Один из их проектов — медиа-сборщик Avito Paparazzo, который мы разместили в прошлом году и о котором вы могли прочитать на сайте maniacdev.com или в технологическом блоге OLX Group.
Обе команды мобильных разработчиков — iOS и Android — используют передовые технологии. Во-первых, это Kotlin (который мы начали использовать еще до выхода версии 1.0) и Swift. Они почти полностью заменили наследие Java и Objective-C в наших продуктах. Во-вторых, мы инвестируем в разработку и продвижение лучших инженерных практик — CI, CD, Code Review и автоматизация тестирования. В-третьих, это слабосвязанная масштабируемая архитектура, которая позволяет нескольким группам разработчиков слаженно работать над большим проектом и оперативно реагировать на запросы пользователей.
Изначально в Avito не было функции тестирования, а первые QA-специалисты присоединились к команде в 2012 году. Сегодня у нас более 40 специалистов, треть из них специализируется на автоматизации. Инструментарий стандартный: PHP + PHPUnit, Selenium. У нас есть система запуска тестов, через которую проходит в среднем 110–120 тысяч тестов в день. На пике эта цифра достигает 200 000. Для организации взаимодействия между тестировщиками и разработчиками используется собственная система управления тест-кейсами, позволяющая хранить тест-кейсы, выполнять их и прикреплять баги в Jira.
Так устроена разработка на Авито, короче говоря. Конечно, многое остается за кадром. Мы постараемся восполнить этот пробел в ближайшее время.
Узнайте больше о внутренней работе Avito из статей в технологическом блоге OLX Group:
- Vertica + Anchor Modeling = Вырастите свой мицелий;
- Папараццо. Средство выбора мультимедиа с открытым исходным кодом для приложений iOS. Часть I;
- Папараццо. Средство выбора мультимедиа с открытым исходным кодом для приложений iOS. Часть II;
- Да пребудет с вами обзор кода;
- Мониторинг как услуга: модульная система для микросервисной архитектуры.
Здесь вы можете посмотреть плейлист с видео со встреч, прошедших в нашем офисе, или с конференций с нашими спикерами на английском языке.
Большинство ресурсов Авито по веб-разработке мы ведем на русском языке. Все наши новости мы публикуем на AvitoTech в Twitter, Facebook, Вконтакте, Telegram. Презентации наших разработчиков на конференциях и митапах есть на нашем слайдшере и спикердеке.
В этом блоге мы дадим вам представление о том, что мы делаем, чтобы предоставить миллионам наших пользователей удобную и надежную платформу для обмена информацией и какие технологии мы используем для этого.
Backend инженер Иван Кривонос | Backend инженер Иван Кривонос
Москва ·
devba-remove-ckend@yandex. ru
Навыки
Языки
PHP
Идти
Склады
PostgreSQL
Редис
MySQL
Кафка
Фреймворки, библиотеки и технологии
Симфони
Ларавель
Иии
узлы
gRPC
Reviewzorro
Невыпущенный проект для автоматической проверки кода
Подробнее. .
- петпроект
- PHP
Развертчик
- петпроект
- PHP
Authgram
- petproject
- PHP
- ларавель
- postgresql
Опыт
Бэкенд-разработчик Golang
Avito.ru
Бэкенд-инженер кластера Trust&Safety — создание сервисов для защиты аккаунтов на Авито от взлома и мошенников
декабрь 2021 г. — настоящее время
Старший бэкенд-разработчик / TeamLead
CityMobil
Бэкэнд-разработчик в команде бэк-офиса. Рефакторинг устаревшего кода, оптимизация узких мест, улучшение архитектуры кодовой базы. Управление командой: проработка личных целей членов команды, помощь в их достижении. Поиск баланса между задачами технического долга и бизнес-задачами. Интеграция с другими командами.
Январь 2020 г. — ноябрь 2021 г.
Ведущий разработчик
Сбербанк
Backend для проекта «Банк партнеров» на Yii2 + MySQL
август 2019 — декабрь 2019
Разработчик/Старший разработчик
DNS Retail
Backend и Frontend разработка интернет-магазинов dns-technopoint. ru и dns-technopoint.ru и dns-technopoint.ru и dns-technopoint.ru и
ру; работа с Yii2, Postgresql, Memcached, Redis. Принимал участие в создании UI для терминалов самообслуживания на Angular2+. В конце работы принял участие в написании бэкенда для онлайн чата на Nodejs: фреймворк SailsJS; настроить инструменты линтинга для PHP, js, typescript и scss; написание юнит-тестов для новых функций, получил опыт работы с TDD.
май 2016 — июль 2019
Разработчик
PrimaMedia
Разработка и сопровождение внутренних проектов компании, а также основного сайта компании — PrimaMedia.ru. Есть опыт работы с Yii2. Настройка автоматического развертывания сайтов, миграция с FTP на GIT, настройка автоматической сборки фронтенда и установка Sphinx как основной поисковой системы для сайтов.
Июнь 2015 — Май 2016
Разработчик
Веб-студия Saitex
Работа с классическим вебом full-stack: PHP, JS, HTML, CSS, MySQL. Создание и сопровождение клиентских сайтов на популярных CMS.