Avito
Где живут Ваши
объявления?
Тюрин Михаил
Москва, 2015
Всем привет!
«Цыплят по осени считают»
— народная мудрость
* я должен ответить на вопрос про «БОЛЬ»!
** у Авито крутая зона — ждем Вас там с
вопросами ЛЮБЫМИ
Всем привет!
«There are only two hard things in Computer Science:
cache invalidation and naming things»
(«There are two hard things in computer science: cache
invalidation, naming things, and off-by-one errors»)
«There are only two hard problems in distributed
systems: 2. Exactly-once delivery 1. Guaranteed order of
messages 2. Exactly-once delivery»
http://martinfowler.com/bliki/TwoHardThings.html
О чем речь
• Автор и команда делали всю эту
красоту
• Автор в курсе широкого круга
вопросов, может сделать замечания
и дать ценные комментарии
• Так где же живут эти ваши
объявления и на кой зачем нам всё
это надо?
Первая архитектура
все улыбаются :)
avito.ru
• крупнейшая доска
объявлений
• много много объявлений
• вся аудитория
• рост! 6 лет —
постоянный бурный рост
График роста: 2009 —> 2016
• лавинный рост фич и проектов
• компания: 10 —> 1000+
• наш департамент: 5 — 150 —>
250
• сервера: 6 — 300 —> 450
• $$$ большие фин. цифры в
новостях
График роста
График роста
Сайт на PHP
2016 год:
• топ 10 сайт: 250M pv/day
• Мобайл шифт: и почти
+100% к трафику
под нами падает CDN
Сайт на PHP
«Архитектура — важнейшие решения об
организации программной системы»
«Архитектура системы — организация
системы:
— элементы
— взаимоотношения
— принципы
=> проектирование и эволюцию»
— ВикипедиЯ
Архитектура (afair)
Совокупность
воспроизводимых
приемов разработки,
опирающихся на
обобщенные паттерны и
инженерный подход
Еще цифры
• 15 Кrps к php-фронту
• 30 Krps далее к поиску
• 4 — 7 Кtps к базам / 1 Кtps w
• pqg: 1К inserts/sec
• 50~100+MB w io
• 150+MB r io
• 500 Mbit сеть
Еще размеры
• базы: 2 — 10TB
• сфинксы: 10 — 300GB
• картинки: 100++ TB
• редис: 100+ node ~800GB
• мемкеш (+локальный): N
шардов ~TB
• vertica: несколько десятков TB
(остальное в hadoop)
Эволюция
• сервер-сайд / api / сервисы
• прокси везде
• поисковая подсистема
• очереди
• базы и спец. хранилища
• сервера приложений
• сопряжение с DWH
• HA, восстановления и архив
Основные моменты
• транзакции и консистентность
• кеширование
• резервирование и репликация
• денормализация и репликация
• прокси-мултиплексирование
• шардинг/ре-шардинг
• очереди и «распределенная
консистентность» (в том числе сервисы и
микро-сервисы)
• архив и восстановление
• !!! гладкий мониторинг
Гладкий график нормального человека
Уже НЕ очень хороший график
Вернемся к объявлениям
• memcached / redis
• postgres
• sphinx
• картинки на nginx и дисках
• собственный ETL (postgres) => DWH Vertica
• очереди на обработку: postgres (и pgq); [redis,]
rabbitmq
• логи и «стримы»: fluentd => mongodb; postgres (и
pgq)
• шарденные база (postgres plproxy)
• архив (postgres)
• архив (postgres)
Как PHP кладет и достает
Как PHP кладет и достает
Картинка про БД
Очередь модерации
select
i.item_id,
i.ver_num,
i.user_id,
…, — content
i.afraud_mark — за T минут должна появится отметка
from
items_to_moderate_q i
where
not i.processed and
i.refresh_txtime < now() - interval ‘__T__ min’ and
i.item_id % __m__ = __n__ — n-ому модератору
Индексация: 10 мин
DWH streams
XRPC
Тонкие моменты
• Пулы соединений и латенси
• Кеши и бекенды
• Очереди и дедлоки
• Аварии
• Утечки
• Мониторинг и ночной сон
• «Сеть» и восстановления
• Балансировка сети
• swapoff
Спасибо за внимание
• теперь у вас много вопросов, я
надеюсь
• команда должна иметь
наработанные архитектурные
приемы под поступающие
задачи
• проверенные в Авито
инструменты и подходы — вам в
помощь!
Avito.ru
Миша
mtyurin@avito.ru
ну и ждем на стенде целый день
http://hh.ru/employer/84585
https://www.avito.ru/company/job

Где живут Ваши объявления / Тюрин Михаил (Avito)

  • 1.
  • 3.
    Всем привет! «Цыплят поосени считают» — народная мудрость * я должен ответить на вопрос про «БОЛЬ»! ** у Авито крутая зона — ждем Вас там с вопросами ЛЮБЫМИ
  • 4.
    Всем привет! «There areonly two hard things in Computer Science: cache invalidation and naming things» («There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors») «There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery» http://martinfowler.com/bliki/TwoHardThings.html
  • 5.
    О чем речь •Автор и команда делали всю эту красоту • Автор в курсе широкого круга вопросов, может сделать замечания и дать ценные комментарии • Так где же живут эти ваши объявления и на кой зачем нам всё это надо?
  • 6.
  • 7.
    avito.ru • крупнейшая доска объявлений •много много объявлений • вся аудитория • рост! 6 лет — постоянный бурный рост
  • 8.
    График роста: 2009—> 2016 • лавинный рост фич и проектов • компания: 10 —> 1000+ • наш департамент: 5 — 150 —> 250 • сервера: 6 — 300 —> 450 • $$$ большие фин. цифры в новостях
  • 9.
  • 10.
  • 11.
    Сайт на PHP 2016год: • топ 10 сайт: 250M pv/day • Мобайл шифт: и почти +100% к трафику под нами падает CDN
  • 12.
    Сайт на PHP «Архитектура— важнейшие решения об организации программной системы» «Архитектура системы — организация системы: — элементы — взаимоотношения — принципы => проектирование и эволюцию» — ВикипедиЯ
  • 13.
  • 14.
    Еще цифры • 15Кrps к php-фронту • 30 Krps далее к поиску • 4 — 7 Кtps к базам / 1 Кtps w • pqg: 1К inserts/sec • 50~100+MB w io • 150+MB r io • 500 Mbit сеть
  • 15.
    Еще размеры • базы:2 — 10TB • сфинксы: 10 — 300GB • картинки: 100++ TB • редис: 100+ node ~800GB • мемкеш (+локальный): N шардов ~TB • vertica: несколько десятков TB (остальное в hadoop)
  • 16.
    Эволюция • сервер-сайд /api / сервисы • прокси везде • поисковая подсистема • очереди • базы и спец. хранилища • сервера приложений • сопряжение с DWH • HA, восстановления и архив
  • 17.
    Основные моменты • транзакциии консистентность • кеширование • резервирование и репликация • денормализация и репликация • прокси-мултиплексирование • шардинг/ре-шардинг • очереди и «распределенная консистентность» (в том числе сервисы и микро-сервисы) • архив и восстановление • !!! гладкий мониторинг
  • 18.
  • 19.
    Уже НЕ оченьхороший график
  • 20.
    Вернемся к объявлениям •memcached / redis • postgres • sphinx • картинки на nginx и дисках • собственный ETL (postgres) => DWH Vertica • очереди на обработку: postgres (и pgq); [redis,] rabbitmq • логи и «стримы»: fluentd => mongodb; postgres (и pgq) • шарденные база (postgres plproxy) • архив (postgres) • архив (postgres)
  • 21.
    Как PHP кладети достает
  • 22.
    Как PHP кладети достает
  • 23.
  • 24.
    Очередь модерации select i.item_id, i.ver_num, i.user_id, …, —content i.afraud_mark — за T минут должна появится отметка from items_to_moderate_q i where not i.processed and i.refresh_txtime < now() - interval ‘__T__ min’ and i.item_id % __m__ = __n__ — n-ому модератору
  • 25.
  • 26.
  • 27.
  • 28.
    Тонкие моменты • Пулысоединений и латенси • Кеши и бекенды • Очереди и дедлоки • Аварии • Утечки • Мониторинг и ночной сон • «Сеть» и восстановления • Балансировка сети • swapoff
  • 29.
    Спасибо за внимание •теперь у вас много вопросов, я надеюсь • команда должна иметь наработанные архитектурные приемы под поступающие задачи • проверенные в Авито инструменты и подходы — вам в помощь!
  • 30.
    Avito.ru Миша mtyurin@avito.ru ну и ждемна стенде целый день http://hh.ru/employer/84585 https://www.avito.ru/company/job