16 декабря, dev {highload} - конференция о highload веб-разработке,...
DESCRIPTION
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимизация архитектуры для работы 24/7", Олег Краснов (системный архитектор SEMrush) Аннотация Со времени предыдущего доклада прошло полгода и мы сделали огромный рывок вперёд. В 2008 году система хранения SEMrush была построена на базе сочетания SQL с файловым хранилищем и позволяла выдерживать нагрузку примерно в 3 миллиона запросов в день. К моменту прошлого выступления нагрузка возросла на порядок, а сейчас на подобной нагрузке было успешно введено обновление данных онлайн без потери производительности. В докладе, через призму краткой ретроспективы, будут освещены изменения технологий обработки данных проекта SEMrush. В ходе выступления будет проведен обзор изменившихся требований к системе, как в плане надёжности, так и скорости реакции на запросы пользователей. Выступление будет дополнено реальными проблемами, программного обеспечения и оборудования, а также способами их решения. Кроме этого будет произведён обзор планов на ближайшее будущее. О компании Компания SEMrush является разработчиком программного обеспечения для анализа конкурентов и определения ключевых слов для SEO оптимизации, входит в тройку мировых лидеров разработчиков аналитических инструментов для изучения трафика. Существует на рынке с 2007 года. Сервис SEMrush предоставляет пользователям информацию, необходимую для анализа конкурентной среды и оптимизации поисковой выдачи. SEMrush незаменим для углубленного анализа ключевых слов, позиций конкурентов, AdWords кампаний.TRANSCRIPT
"Оптимизация архитектурыдля работы 24x7"
Олег КрасновСистемный Архитектор
SEMrush
2013 dev.it-portfolio.net
Что такое SEMrush
- Ведущий сервис анализа конкурентов
- Позволяет узнать ключевые слова
- Позволяет анализировать не только ваши собственные данные
- Сведения об бюджетах конкурентов на продвижение в поисковиках
- Данные о затратах на каждое конкретное объявление и его содержимое
dev.it-portfolio.net 2
Как выглядел SEMrush
dev.it-portfolio.net 3
Как выглядит SEMrush сегодня
dev.it-portfolio.net 4
Картина пользователей
- Рядовые пользователи: более 350 тысяч
- Крупные клиенты: более 60
- Интеграторы: более 100
dev.it-portfolio.net 5
Объёмы данных
- 110 миллионов слов (90)
- 25 языковых баз (10)
- > 2.5 миллиардов URL (2)
- 30% AdWords объявлений
- 10 терабайт актуальных данных (4)
- 60 терабайт исторических данных (40)
dev.it-portfolio.net 6
Характер данных
- Ключевые слова
- Числовые данные
- URL
- Небольшие тексты объявлений
dev.it-portfolio.net 7
Хорошие примеры
- youtube.com : ~ 30 миллионов слов
- wikipedia.org : ~ 20 миллионов слов
- orderessay.blogspot.com : 20 слов
- ttyingtiffany.com : 14 слов
dev.it-portfolio.net 8
Распределение данных
dev.it-portfolio.net 9
Что хотелось сохранить
- Быструю отдачу данных
- Асинхронную отдачу данных
- Отказоустойчивость
- Масштабируемость
- Простоту
dev.it-portfolio.net 10
Что хотелось добавить
- Обновление данных в режиме реального времени
- 30 ежедневных точек для каждой базы
- Производительность не менее 200 тысяч ключевых слов в час
dev.it-portfolio.net 11
На базе чего это разрабатывалось
- Файловая система
- Бинарные индексы
- Текстовые файлы
- Хорошая хэш-функция для поиска
- Компактное хранение числовых данных
dev.it-portfolio.net 12
Магия файловых систем
- Перелинковка
- Устойчивость к потерям данных
- Работа на уровне ядра
- Стабильность
- Простота
- Возможность создания виртуальных устройств (стало не актуально)
dev.it-portfolio.net 13
Что было добавлено
- Одна утилита для непрерывного построения
- Две утилиты для применения ежедневных изменений
- Rsync для сброса ежедневных точек
- Nginx для балансировки и арбитража запросов
- Немножечко BASHа
dev.it-portfolio.net 14
Как это строится теперь
- Основной индекс строится во время сбора данных, но на серверах хранилищах
- Агрегированные данные строятся в виде файлов разницы
- Файлы разницы применяются раз в сутки
- Затем строятся дополнительные и текстовые индексы
dev.it-portfolio.net 15
Как это хранится в рамках одной сущности
- Основные индексы
- URLы и тексты объявлений
- Исторические индексы
- Исходники
dev.it-portfolio.net 16
С чем мы столкнулись
- Распределение индексов по папкам не было равномерным
- Использование RAID не давало использовать процессорные мощности
- Постоянное изменение больших индексов излишне нагружало дисковую подсистему
- Нужен был ещё один столбец данных для хранения времени модификации записи
dev.it-portfolio.net 17
Как мы решили эти проблемы
- Перераспределили места хранения индексов по хэш-функции
- Стали использовать диски раздельно
- Ввели в обращение shared memory
- Убрали расчётные столбцы из индексов
dev.it-portfolio.net 18
Роли серверов
- Сбор данных + хранение исходников
- Актуальные данные + построение
- Ежедневные срезы + построение ежедневных индексов
- Полнотекстовый поиск и фильтры
- Ежемесячные данные
- Вспомогательные сервисы
dev.it-portfolio.net 19
Проблемы оборудования и ОС
- Медленно обходится дерево ФС
- Ненадёжные HDD
- Медленная реакция службы поддержки оборудования
- Медленная процедура заказа дополнительного оборудования
dev.it-portfolio.net 20
Решения по оборудованию и ОС
- Увеличение количества памяти
- Замена SATA на SAS
- Значительное резервирование по количеству серверов + дополнительные сервера
- Резервирование по количеству запасных частей (винчестеры и контроллеры)
dev.it-portfolio.net 21
Резервное копирование в действии
- Сервер источник продолжает отдавать данные клиентам при восстановлении небольших объёмов данных
- Сервер источник останавливается, но это позволяет параллельно копировать данные со 100% утилизацией сети
dev.it-portfolio.net 22
Как это отдаётся
- JSON
- TCP сервер
- Для числовых данных event сервера
- Для текстового поиска и фильтров сервер полнотекстового поиска
dev.it-portfolio.net 23
Что осталось незыблемым
- C
- UNIX way
- Бинарный поиск
- Деревья
- Хэш таблицы
dev.it-portfolio.net 24
Как это хранилось раньше
dev.it-portfolio.net 25
iSCSI через внутренний сетевой интерфейс
Как это хранится теперь
dev.it-portfolio.net 26
Чего мы достигли
- Онлайн обновления данных: система способна обработать около 500 тысяч ключевых слов в час
- Сохранения производительности отдачи: количество обрабатываемых увеличилось с 30 до 40 миллионов запросов в сутки
- Простоты развёртывания
- Простоты резервного копирования и восстановления
dev.it-portfolio.net 27
Вспомогательные сервисы
- libevent + mmap
- Sphinx
- Python
dev.it-portfolio.net 28
Выводы из вышесказанного
- При правильном планировании архитектуры внедрение больших задач проходит быстро и безболезненно
- Но только если они были стратегически запланированы в её рамках
dev.it-portfolio.net 29
Спасибо за внимание!
dev.it-portfolio.net 30
Будьте на связи
Олег Краснов
Системный архитектор компании SEMrush
+7 (962) 700-1771
dev.it-portfolio.net 31