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 • $$$ большие фин. цифры в новостях
График роста
График роста
Сайт на PHP2016 год:
• топ 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
Миша [email protected]
ну и ждем на стенде целый день
http://hh.ru/employer/84585https://www.avito.ru/company/job