avito. Решаем проблемы по мере их поступления. Стачка 2013
DESCRIPTION
TRANSCRIPT
Решаем проблемыпо мере их поступленияРоман Павлушко
Ульяновск, 2013 #nastachku
О докладе
Большое кол-во тем
Поверхностно
Подробности в вопросах
• Месячная аудитория 40 млн человек
• 150 млн просмотров в день
• 400+ тыс. новых объявлений в день
• 10+ разработчиков
• 120 серверов
О проекте
Цифры
О проекте
Динамика роста
0
15 000 000
30 000 000
45 000 000
60 000 000
75 000 000
90 000 000
105 000 000
120 000 000
135 000 000
150 000 000
Окт 10 Янв 11 Апр 11 Июл 11 Окт 11 Янв 12 Апр 12 Июл 12 Окт 12 Янв 13 Апр 13
О проблемах
• Железо• DDoS
• Спамеры• Спец-проекты
О проблемах
Нежданно-негаданно
...и из-за мелочей
• Небольшая недоработка• Уникальный пользователь• Погодаа эффект домино или трафик может довести проблему до критической
О проблемах
Стоимость
стоимость устранения
прямые потери от проблемы
недополученная выгода
репутационные потери
О проблемах
Решения
• Самостоятельное решение• Поиск и анализ сторонних решений • Советы опытных людей
• Отложить проблему до проявления
Темная сторонапопулярности
Темная сторона
Спам и мошенники
• Спам в сообщениях
• Спам в объявлениях
• SMS-cпам
• «Конкуренты»
• Нигирийцы• Продавцы краденого
Темная сторона
Дубликаты
• Мешают продавцам• Мешают пользователям• Усложняют аналитику
Проблемы роста
Проблемы роста
Поддержка проекта
• Модерация контента• Поддержка клиентов• Технический долг
Проблемы роста
Частая смена архитектуры
• Эффективное использование ресурсов• Расщепление приложения на сервисы
• Повышение порога вхождения • Упрощение разработки
• Запас производительности• Отказоустойчивость • Мониторинг по всем фронтам
• Детальный анализ A/B-тестов
Проблемы роста
Накладные расходы
Проблемы роста
Приложение
• Рост нагрузки: кеширование, зеркала• Качество кода: code style, tests, etc.
• Объем кода: подпроекты
• Отказоустойчивость: nginx
Проблемы роста
Приложение – конфигурация
ПроблемаВнешние сервисы ненадежны
Redis0
App0
Redis1
App1
RedisN
AppN
set
get
Redis Replication
Redis0 Master
RedisN Slaves
Проблемы роста
Приложение – время отклика
• все сетевые соединения через pools
• оптимизация запросов к базе и поиску• при сборке проекта прекешируем данные
Проблемы роста
Приложение – технологии
• nginx (http://nginx.org/)
• PHP-fpm (http://php-fpm.org/)
• Phing (http://www.phing.info/)
• PHP CodeSniffer (http://pear.php.net/)
• PHP CPD (https://github.com/sebastianbergmann/phpcpd)
• Selemium (http://seleniumhq.org/)
• Отдельный хост для отдачи (.avito.st)
• Удаление метаданных картинок• Правильно настроенный web-сервер
Expires, Last-Modified, Cache-control, gzip
• Минимизация и склейка js и css файлов
• Lazy load для картинок
Проблемы роста
Интернет-трафик
Проблемы роста
Поиск• Нагрузка: репликация (5000 rps)
• Размеры индексов: шардинг, оптимизации
• Ошибки: словари, триграммы• Усложнение запросов: индексы• Кеширование
indexer
full category
uftp + rsync
Pg MV Repl
HA
master
x8x38
App
HA
App
HA
App
Проблемы роста
Поиск – архитектура
1. Построение снапшота в реплике
2. Индексация в N потоков (xargs)
3. Деплой индексов на слейвы (uftp)
4. Синхронизация индексов (rsync)
5. Ротация индексов (-hup)
6. Сброс кеша
Проблемы роста
Поиск – технологии
• Sphinx (http://sphinxsearch.com/)
• PostgreSQL (http://www.postgresql.org/)
• SkyTools (http://pgfoundry.org/projects/skytools/)
• uftp (http://www.tcnj.edu/~bush/uftp.html)
• HAProxy (http://haproxy.1wt.eu/)
Проблемы роста
Данные
• PostgreSQL
• оптимизации запросов • репликация MV
• шардинг• Redis для горячих данных
Проблемы роста
Данные – технологии
• PostgreSQL (http://www.postgresql.org/)
• SkyTools (http://pgfoundry.org/projects/skytools/)
• PgBouncer (http://pgfoundry.org/projects/pgbouncer/)
• Memcached (http://memcached.org/)
• memagent (https://code.google.com/p/memagent/)
• Redis (http://redis.io/)
• Объем: ~15TB (миллиард картинок)
• 100 нод на ~33 серверах
• Модуль nginx_upload
• $node.img.avito.st для отдачи
Проблемы роста
Статика
Проблемы роста
Ищем клевых разработчиков
Спасибо!Вопросы?Роман Павлушко
slideshare.net/pavlushko
pavlushko_roman @pavlushko