avito. Решаем проблемы по мере их поступления. Стачка 2013

30
Решаем проблемы по мере их поступления Роман Павлушко Ульяновск, 2013 #nastachku

Upload: roman-pavlushko

Post on 30-Nov-2014

2.153 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Решаем проблемыпо мере их поступленияРоман Павлушко

Ульяновск, 2013 #nastachku

Page 2: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

О докладе

Большое кол-во тем

Поверхностно

Подробности в вопросах

Page 3: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

О проекте

Текст

http://www.avito.ru/company

Page 4: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

• Месячная аудитория 40 млн человек

• 150 млн просмотров в день

• 400+ тыс. новых объявлений в день

• 10+ разработчиков

• 120 серверов

О проекте

Цифры

Page 5: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

О проекте

Динамика роста

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

Page 6: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

О проблемах

Page 7: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

• Железо• DDoS

• Спамеры• Спец-проекты

О проблемах

Нежданно-негаданно

Page 8: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

...и из-за мелочей

• Небольшая недоработка• Уникальный пользователь• Погодаа эффект домино или трафик может довести проблему до критической

Page 9: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

О проблемах

Стоимость

стоимость устранения

прямые потери от проблемы

недополученная выгода

репутационные потери

Page 10: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

О проблемах

Решения

• Самостоятельное решение• Поиск и анализ сторонних решений • Советы опытных людей

• Отложить проблему до проявления

Page 11: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Темная сторонапопулярности

Page 12: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Темная сторона

Спам и мошенники

• Спам в сообщениях

• Спам в объявлениях

• SMS-cпам

• «Конкуренты»

• Нигирийцы• Продавцы краденого

Page 13: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Темная сторона

Дубликаты

• Мешают продавцам• Мешают пользователям• Усложняют аналитику

Page 14: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Page 15: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Поддержка проекта

• Модерация контента• Поддержка клиентов• Технический долг

Page 16: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Частая смена архитектуры

• Эффективное использование ресурсов• Расщепление приложения на сервисы

• Повышение порога вхождения • Упрощение разработки

Page 17: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

• Запас производительности• Отказоустойчивость • Мониторинг по всем фронтам

• Детальный анализ A/B-тестов

Проблемы роста

Накладные расходы

Page 18: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Приложение

• Рост нагрузки: кеширование, зеркала• Качество кода: code style, tests, etc.

• Объем кода: подпроекты

• Отказоустойчивость: nginx

Page 19: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Приложение – конфигурация

ПроблемаВнешние сервисы ненадежны

Redis0

App0

Redis1

App1

RedisN

AppN

set

get

Redis Replication

Redis0 Master

RedisN Slaves

Page 20: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Приложение – время отклика

• все сетевые соединения через pools

• оптимизация запросов к базе и поиску• при сборке проекта прекешируем данные

Page 21: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Приложение – технологии

• 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/)

Page 22: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

• Отдельный хост для отдачи (.avito.st)

• Удаление метаданных картинок• Правильно настроенный web-сервер

Expires, Last-Modified, Cache-control, gzip

• Минимизация и склейка js и css файлов

• Lazy load для картинок

Проблемы роста

Интернет-трафик

Page 23: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Поиск• Нагрузка: репликация (5000 rps)

• Размеры индексов: шардинг, оптимизации

• Ошибки: словари, триграммы• Усложнение запросов: индексы• Кеширование

Page 24: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

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. Сброс кеша

Page 25: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Поиск – технологии

• 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/)

Page 26: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Данные

• PostgreSQL

• оптимизации запросов • репликация MV

• шардинг• Redis для горячих данных

Page 27: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

Проблемы роста

Данные – технологии

• 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/)

Page 28: AVITO. Решаем проблемы по мере их поступления. Стачка 2013

• Объем: ~15TB (миллиард картинок)

• 100 нод на ~33 серверах

• Модуль nginx_upload

• $node.img.avito.st для отдачи

Проблемы роста

Статика