DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
Dev {highload}. When you should do your own db.
1. "Когда стоит написать свою БД"
Олег Краснов
Системный Архитектор
SEMrush
o.krasnov@semrush.com
2013 dev.it-portfolio.net
2. Что такое SEMrush
- Ведущий сервис анализа конкурентов
- Позволяет узнать ключевые слова
- Позволяет анализировать не только ваши
собственные данные
- Сведения об бюджетах конкурентов на
продвижение в поисковиках
- Данные о затратах на каждое конкретное
объявление и его содержимое
dev.it-portfolio.net 2
4. Картина пользователей
- Рядовые пользователи: более 300 тысяч
- Крупные клиенты: более 50
- Интеграторы: более 100
dev.it-portfolio.net 4
5. Объёмы данных
- 90 миллионов слов
- 10 языковых баз
- > 2 миллиардов URL
- 30% AdWords объявлений
- 3 терабайта актуальных данных
- 40 терабайт исторических данных
dev.it-portfolio.net 5
6. Характер данных
- Ключевые слова
- Числовые данные
- URL
- Небольшие тексты объявлений
dev.it-portfolio.net 6
7. Хорошие примеры
- youtube.com : ~ 30 миллионов слов
- wikipedia.org : ~ 20 миллионов слов
- t-v-links.blogspot.com : 51 слово
- tiffanytunes.com : 28 слов
dev.it-portfolio.net 7
9. Как это было в 2009 году
- MySQL 5.0.76 для хранения посчитанных
индексов по всем полям (MyISAM)
- Большие файлы для хранения текстовых
данных
- PHP 5.2.x для объединения данных и отдачи
отчётов
dev.it-portfolio.net 9
10. Что же стало понятно
Наличие прототипа – это прекрасно!
dev.it-portfolio.net 10
11. Но присутствовали проблемы
- Очень медленно строилось
- Плохо масштабировалось
- Для каждого столбца нужен был отдельный
индекс
- Занимало излишнее место
- Никто не понимал как это было написано
dev.it-portfolio.net 11
12. А чего же хотелось
- Быстрой отдачи данных
- Асинхронной отдачи данных
- Отказоустойчивости
- Масштабируемости
- Простоты
dev.it-portfolio.net 12
13. Может быть SQL
- MySQL : медленное построение
- PostgreSQL : схожие проблемы
- ORACLE : платный
- MSSQL : чуждая среда
dev.it-portfolio.net 13
14. Может быть NoSQL
- Redis: первый коммит 22 марта 2009 года
- MongoDB: первый релиз версии 9 декабря
2009 года (версия 0.0.3)
- Hadoop (версия 0.19.2) – большое
количество серверов
dev.it-portfolio.net 14
15. А что же тогда
- Файловая система
- Бинарные индексы
- Текстовые файлы
- Хорошая хэш-функция для поиска
- Компактное хранение числовых данных
dev.it-portfolio.net 15
16. Пробы пера в файловых системах
- UFS2 + Soft Updates
- EXT3(4)
- ReizerFS 3
- ZFS
dev.it-portfolio.net 16
17. Магия файловых систем
- Перелинковка
- Устойчивость к потерям данных
- Работа на уровне ядра
- Стабильность
- Простота
- Возможность создания виртуальных
устройств
dev.it-portfolio.net 17
18. Как это строится
- Основной индекс строится во время сбора
данных
- Агрегированные данные строятся после
этого
- Параллельно строятся дополнительные
индексы
- Затем строятся текстовые индексы
dev.it-portfolio.net 18
19. Как это хранится
- Индексы
- Тексты
- Ранки
- Исходники
dev.it-portfolio.net 19
20. Что стало понятно в процессе
- Необходимо кэширование результатов
- Часто запрашиваемые данные должны
лежать отдельно
- Учёт пользователей должен быть отдельно
dev.it-portfolio.net 20
21. Как это отдаётся
- JSON
- TCP сервер
- Для числовых данных event сервера
- Для текстового поиска и фильтров сервер
полнотекстового поиска
dev.it-portfolio.net 21
22. Что же там внутри
- C
- UNIX way
- Бинарный поиск
- Деревья
- Хэш таблицы
dev.it-portfolio.net 22
23. Как это хранилось раньше
dev.it-portfolio.net 23
Индексы
Текстовые данные
US
24. Как это хранится теперь
dev.it-portfolio.net 24
iSCSI через внутренний сетевой интерфейс
25. А если будет много запросов
dev.it-portfolio.net 25
26. Чего мы достигли
- Производительности: количество
обрабатываемых увеличилось на порядок с
3 до 30 миллионов запросов в сутки
- Гибкости: ввод в строй новых отчётов не
сопряжён с непреодолимыми трудностями
- Простоты развёртывания
- Простоты резервного копирования и
восстановления
dev.it-portfolio.net 26