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

Post on 30-Nov-2014

2.155 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

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

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

О докладе

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

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

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

О проекте

Текст

http://www.avito.ru/company

• Месячная аудитория 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 для отдачи

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

Статика

Спасибо!Вопросы?Роман Павлушко

rpavlushko@avito.ru

slideshare.net/pavlushko

pavlushko_roman @pavlushko

top related