4. О проекте
Цифры
• Месячная аудитория 40 млн человек
• 150 млн просмотров в день
• 400+ тыс. новых объявлений в день
• 10+ разработчиков
• 120 серверов
15. Проблемы роста
Поддержка проекта
• Модерация контента
• Поддержка клиентов
• Технический долг
16. Проблемы роста
Частая смена архитектуры
• Эффективное использование ресурсов
• Расщепление приложения на сервисы
• Повышение порога вхождения
• Упрощение разработки
17. Проблемы роста
Накладные расходы
• Запас производительности
• Отказоустойчивость
• Мониторинг по всем фронтам
• Детальный анализ A/B-тестов
18. Проблемы роста
Приложение
• Рост нагрузки: кеширование, зеркала
• Качество кода: code style, tests, etc.
• Объем кода: подпроекты
• Отказоустойчивость: nginx
19. Проблемы роста
Приложение – конфигурация
Проблема
Внешние сервисы ненадежны
set
App0 App1 AppN
get
Redis0 Master
Redis0 Redis1 RedisN RedisN Slaves
Redis Replication
20. Проблемы роста
Приложение – время отклика
• все сетевые соединения через pools
• оптимизация запросов к базе и поиску
• при сборке проекта прекешируем данные
21. Проблемы роста
Приложение – технологии
• 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/)
22. Проблемы роста
Интернет-трафик
• Отдельный хост для отдачи (.avito.st)
• Удаление метаданных картинок
• Правильно настроенный web-сервер
Expires, Last-Modified, Cache-control, gzip
• Минимизация и склейка js и css файлов
• Lazy load для картинок
23. Проблемы роста
Поиск
• Нагрузка: репликация (5000 rps)
• Размеры индексов: шардинг, оптимизации
• Ошибки: словари, триграммы
• Усложнение запросов: индексы
• Кеширование
24. Проблемы роста
Поиск – архитектура
Pg MV Repl 1. Построение снапшота в реплике
indexer 2. Индексация в N потоков (xargs)
master
uftp + rsync
3. Деплой индексов на слейвы (uftp)
4. Синхронизация индексов (rsync)
full category
x8
5. Ротация индексов (-hup)
x38
HA
6. Сброс кеша
HA
HA
App
App
App
25. Проблемы роста
Поиск – технологии
• 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/)
26. Проблемы роста
Данные
• PostgreSQL
• оптимизации запросов
• репликация MV
• шардинг
• Redis для горячих данных
27. Проблемы роста
Данные – технологии
• 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/)
28. Проблемы роста
Статика
• Объем: ~15TB (миллиард картинок)
• 100 нод на ~33 серверах
• Модуль nginx_upload
• $node.img.avito.st для отдачи