16 декабря, dev {highload} - конференция о highload веб-разработке,...

31
"Оптимизация архитектуры для работы 24x7" Олег Краснов Системный Архитектор SEMrush [email protected] 2013 dev.it-portfolio.net

Upload: it-portfolio

Post on 15-Jun-2015

865 views

Category:

Education


7 download

DESCRIPTION

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег Краснов (системный архитектор SEMrush) Аннотация Со времени предыдущего доклада прошло полгода и мы сделали огромный рывок вперёд. В 2008 году система хранения SEMrush была построена на базе сочетания SQL с файловым хранилищем и позволяла выдерживать нагрузку примерно в 3 миллиона запросов в день. К моменту прошлого выступления нагрузка возросла на порядок, а сейчас на подобной нагрузке было успешно введено обновление данных онлайн без потери производительности. В докладе, через призму краткой ретроспективы, будут освещены изменения технологий обработки данных проекта SEMrush. В ходе выступления будет проведен обзор изменившихся требований к системе, как в плане надёжности, так и скорости реакции на запросы пользователей. Выступление будет дополнено реальными проблемами, программного обеспечения и оборудования, а также способами их решения. Кроме этого будет произведён обзор планов на ближайшее будущее. О компании Компания SEMrush является разработчиком программного обеспечения для анализа конкурентов и определения ключевых слов для SEO оптимизации, входит в тройку мировых лидеров разработчиков аналитических инструментов для изучения трафика. Существует на рынке с 2007 года. Сервис SEMrush предоставляет пользователям информацию, необходимую для анализа конкурентной среды и оптимизации поисковой выдачи. SEMrush незаменим для углубленного анализа ключевых слов, позиций конкурентов, AdWords кампаний.

TRANSCRIPT

Page 1: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

"Оптимизация архитектурыдля работы 24x7"

Олег КрасновСистемный Архитектор

SEMrush

[email protected]

2013 dev.it-portfolio.net

Page 2: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Что такое SEMrush

- Ведущий сервис анализа конкурентов

- Позволяет узнать ключевые слова

- Позволяет анализировать не только ваши собственные данные

- Сведения об бюджетах конкурентов на продвижение в поисковиках

- Данные о затратах на каждое конкретное объявление и его содержимое

dev.it-portfolio.net 2

Page 3: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Как выглядел SEMrush

dev.it-portfolio.net 3

Page 4: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Как выглядит SEMrush сегодня

dev.it-portfolio.net 4

Page 5: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Картина пользователей

- Рядовые пользователи: более 350 тысяч

- Крупные клиенты: более 60

- Интеграторы: более 100

dev.it-portfolio.net 5

Page 6: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Объёмы данных

- 110 миллионов слов (90)

- 25 языковых баз (10)

- > 2.5 миллиардов URL (2)

- 30% AdWords объявлений

- 10 терабайт актуальных данных (4)

- 60 терабайт исторических данных (40)

dev.it-portfolio.net 6

Page 7: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Характер данных

- Ключевые слова

- Числовые данные

- URL

- Небольшие тексты объявлений

dev.it-portfolio.net 7

Page 8: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Хорошие примеры

- youtube.com : ~ 30 миллионов слов

- wikipedia.org : ~ 20 миллионов слов

- orderessay.blogspot.com : 20 слов

- ttyingtiffany.com : 14 слов

dev.it-portfolio.net 8

Page 9: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Распределение данных

dev.it-portfolio.net 9

Page 10: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Что хотелось сохранить

- Быструю отдачу данных

- Асинхронную отдачу данных

- Отказоустойчивость

- Масштабируемость

- Простоту

dev.it-portfolio.net 10

Page 11: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Что хотелось добавить

- Обновление данных в режиме реального времени

- 30 ежедневных точек для каждой базы

- Производительность не менее 200 тысяч ключевых слов в час

dev.it-portfolio.net 11

Page 12: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

На базе чего это разрабатывалось

- Файловая система

- Бинарные индексы

- Текстовые файлы

- Хорошая хэш-функция для поиска

- Компактное хранение числовых данных

dev.it-portfolio.net 12

Page 13: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Магия файловых систем

- Перелинковка

- Устойчивость к потерям данных

- Работа на уровне ядра

- Стабильность

- Простота

- Возможность создания виртуальных устройств (стало не актуально)

dev.it-portfolio.net 13

Page 14: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Что было добавлено

- Одна утилита для непрерывного построения

- Две утилиты для применения ежедневных изменений

- Rsync для сброса ежедневных точек

- Nginx для балансировки и арбитража запросов

- Немножечко BASHа

dev.it-portfolio.net 14

Page 15: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Как это строится теперь

- Основной индекс строится во время сбора данных, но на серверах хранилищах

- Агрегированные данные строятся в виде файлов разницы

- Файлы разницы применяются раз в сутки

- Затем строятся дополнительные и текстовые индексы

dev.it-portfolio.net 15

Page 16: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Как это хранится в рамках одной сущности

- Основные индексы

- URLы и тексты объявлений

- Исторические индексы

- Исходники

dev.it-portfolio.net 16

Page 17: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

С чем мы столкнулись

- Распределение индексов по папкам не было равномерным

- Использование RAID не давало использовать процессорные мощности

- Постоянное изменение больших индексов излишне нагружало дисковую подсистему

- Нужен был ещё один столбец данных для хранения времени модификации записи

dev.it-portfolio.net 17

Page 18: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Как мы решили эти проблемы

- Перераспределили места хранения индексов по хэш-функции

- Стали использовать диски раздельно

- Ввели в обращение shared memory

- Убрали расчётные столбцы из индексов

dev.it-portfolio.net 18

Page 19: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Роли серверов

- Сбор данных + хранение исходников

- Актуальные данные + построение

- Ежедневные срезы + построение ежедневных индексов

- Полнотекстовый поиск и фильтры

- Ежемесячные данные

- Вспомогательные сервисы

dev.it-portfolio.net 19

Page 20: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Проблемы оборудования и ОС

- Медленно обходится дерево ФС

- Ненадёжные HDD

- Медленная реакция службы поддержки оборудования

- Медленная процедура заказа дополнительного оборудования

dev.it-portfolio.net 20

Page 21: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Решения по оборудованию и ОС

- Увеличение количества памяти

- Замена SATA на SAS

- Значительное резервирование по количеству серверов + дополнительные сервера

- Резервирование по количеству запасных частей (винчестеры и контроллеры)

dev.it-portfolio.net 21

Page 22: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Резервное копирование в действии

- Сервер источник продолжает отдавать данные клиентам при восстановлении небольших объёмов данных

- Сервер источник останавливается, но это позволяет параллельно копировать данные со 100% утилизацией сети

dev.it-portfolio.net 22

Page 23: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Как это отдаётся

- JSON

- TCP сервер

- Для числовых данных event сервера

- Для текстового поиска и фильтров сервер полнотекстового поиска

dev.it-portfolio.net 23

Page 24: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Что осталось незыблемым

- C

- UNIX way

- Бинарный поиск

- Деревья

- Хэш таблицы

dev.it-portfolio.net 24

Page 25: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Как это хранилось раньше

dev.it-portfolio.net 25

iSCSI через внутренний сетевой интерфейс

Page 26: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Как это хранится теперь

dev.it-portfolio.net 26

Page 27: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Чего мы достигли

- Онлайн обновления данных: система способна обработать около 500 тысяч ключевых слов в час

- Сохранения производительности отдачи: количество обрабатываемых увеличилось с 30 до 40 миллионов запросов в сутки

- Простоты развёртывания

- Простоты резервного копирования и восстановления

dev.it-portfolio.net 27

Page 28: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Вспомогательные сервисы

- libevent + mmap

- Sphinx

- Python

dev.it-portfolio.net 28

Page 29: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Выводы из вышесказанного

- При правильном планировании архитектуры внедрение больших задач проходит быстро и безболезненно

- Но только если они были стратегически запланированы в её рамках

dev.it-portfolio.net 29

Page 30: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Спасибо за внимание!

dev.it-portfolio.net 30

Page 31: 16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег

Будьте на связи

Олег Краснов

Системный архитектор компании SEMrush

[email protected]

+7 (962) 700-1771

dev.it-portfolio.net 31