Авито с 2010 года — с момента запуска на широкую аудиторию — прошел уже немалый путь, успев собрать более 600 миллионов объявлений со всех уголков страны, и став при этом крупнейшим классифайдом в Европе.
В докладе будет дан обзор архитектуры ядра системы с ретроспективой, перечислены основные компоненты обработки объявлений, приведены оценки параметров функционирования от "продуктовых" "количество объявлений за единицу времени" до количества запросов на разные уровни стека (веб, базы, поиск, очереди) и степени утилизации железа.
Будут также продемонстрированы примеры реализаций классических паттернов веба: кэш, прокси, денормализация и репликация, шардинг, очереди и удаленный вызов процедур — подходы, уже более 5 лет лежащие в основе нашей архитектуры. При этом будут приведены неочевидные, на взгляд автора, особенности внедрения данных подходов.
Доклад должен заинтересовать соотнесением масштабов и ключевых слов.
3. Всем привет!
«Цыплят по осени считают»
— народная мудрость
* я должен ответить на вопрос про «БОЛЬ»!
** у Авито крутая зона — ждем Вас там с
вопросами ЛЮБЫМИ
4. Всем привет!
«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
5. О чем речь
• Автор и команда делали всю эту
красоту
• Автор в курсе широкого круга
вопросов, может сделать замечания
и дать ценные комментарии
• Так где же живут эти ваши
объявления и на кой зачем нам всё
это надо?
11. Сайт на PHP
2016 год:
• топ 10 сайт: 250M pv/day
• Мобайл шифт: и почти
+100% к трафику
под нами падает CDN
12. Сайт на PHP
«Архитектура — важнейшие решения об
организации программной системы»
«Архитектура системы — организация
системы:
— элементы
— взаимоотношения
— принципы
=> проектирование и эволюцию»
— ВикипедиЯ
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. Основные моменты
• транзакции и консистентность
• кеширование
• резервирование и репликация
• денормализация и репликация
• прокси-мултиплексирование
• шардинг/ре-шардинг
• очереди и «распределенная
консистентность» (в том числе сервисы и
микро-сервисы)
• архив и восстановление
• !!! гладкий мониторинг
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-ому модератору
28. Тонкие моменты
• Пулы соединений и латенси
• Кеши и бекенды
• Очереди и дедлоки
• Аварии
• Утечки
• Мониторинг и ночной сон
• «Сеть» и восстановления
• Балансировка сети
• swapoff
29. Спасибо за внимание
• теперь у вас много вопросов, я
надеюсь
• команда должна иметь
наработанные архитектурные
приемы под поступающие
задачи
• проверенные в Авито
инструменты и подходы — вам в
помощь!