Де живуть ваші оголошення?

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 і невеликих бібліотек, вирішальних конкретні завдання, а роком раніше почали перехід на ECMA2015. Крім цього з'являються все більше веб-додатків (SPA), які реалізуються на React і basis.js. Фронтенд-розробники так само беруть участь в open source проектах (таких, наприклад, як CSSO), створюють інструменти і діляться своїм досвідом на конференціях:


image
Компанія Avito з'явилася практично разом із зародженням мобільної платформи, якою ми знаємо її сьогодні. Звичайно ж, спочатку була тільки веб-версія, потім з'явилася веб-версія, адаптована для мобільних пристроїв. Але рідні додатки – це рідні додатки, і у них є своя специфіка, яка залежить від платформи. Сьогодні мобільним додаткам приділяється дуже велика увага — і ми впевнені, що цей тренд буде зберігатися. Окремі команди розробляють відразу кілька додатків під iOS і Чоловічий. Хлопці підходять до питання розробки відповідально, діляться своїм досвідом на конференціях і напрацюваннями на 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 можна з доповідей наших розробників на провідних конференціях і митапах. Крім того, ми регулярно організовуємо зустрічі розробників в нашому офісі і хостим івенти незалежних спільнот, таких як MoscowJS, CocoaHeads, PostgreSQLRussia, Tarantool, Moscow SPA meetup та інших. Анонси всіх подій та новини ми публікуємо в нашому технологічному твіттер-каналі AvitoTech, там же викладаємо посилання на підсумкові матеріали. Записи зустрічей, які проходили в нашому офісі, можна знайти на нашому Youtube-каналі. Пишіть в коментарях, з якого боку вам було б цікаво дізнатися про Avito, і ми це обов'язково врахуємо ваші побажання при підготовці наступних постів. До нових зустрічей!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.