BigData изнутри: технологии и алгоритмы Александр Сербул руководитель направления, разработчик Партнерская конференция «1С-Битрикс»
О чем поговорим Много данных… спасите/помогите Ограничения SQL/MySQL NoSQL и его возможности на примере DynamoDB Column-oriented хранилища для анализа данных Что такое MapReduce и Apache Spark Как устроены рекомендательные системы Партнерская конференция 2015 #bitrixconf2015
SQL – «глубокая» абстракция ACID (Atomicity, Consistency, Isolation, Durability) Универсальное решение на все случаи жизни Жесткая схема данных Реальные потребности, веб… Партнерская конференция 2015 #bitrixconf2015
BigData – «разновидность» Орков
MySQL - репликация Партнерская конференция 2015 #bitrixconf2015
MySQL - sharding Партнерская конференция 2015 #bitrixconf2015 Вертикальный шардинг Горизонтальный шардинг База данных MySQL База данных MySQL 1 База данных MySQL 2 База данных MySQL База данных MySQL 1 База данных MySQL 2 Аккаунты a-m Аккаунты n-z
Куда же все это класть… Логи, логи, файлики, файлики… Кластер на Galera Теорема CAP Гео-распределенные системы Split-brain Распределенные алгоритмы, Paxos Партнерская конференция 2015 #bitrixconf2015
NoSQL «Перерождение» memcached… DynamoDB Cassandra Hbase BigTable? Redis MongoDB Партнерская конференция 2015 #bitrixconf2015
NoSQL – «особенности» «Сложный» клиент Размазанная модель Eventual consistency Транзакции «Сложные» запросы А что вы хотели? Партнерская конференция 2015 #bitrixconf2015
NoSQL – сохраняйте бдительность!
Данных слишком много… Данные не поменяются на диски одного сервера Ну никак не помещаются… Выделенное дисковое хранилище? Много «дешевых серверов»? S3, HDFS, GlusterFS, Lustre … Партнерская конференция 2015 #bitrixconf2015
Column-Oriented Databases OLAP/OLTP Структура хранения Агрегация, вставки, запросы Amazon RedShift Google BigQuery Vertica… Партнерская конференция 2015 #bitrixconf2015
Пример архитектуры RedShift Партнерская конференция 2015 #bitrixconf2015 Кластер Параллельные запросы Быстрая агрегация Снепшоты Масштабирование
Интересные задачки Обработка лога на >N00 млн. записей в разумное время Найти всех похожих Пользователей из 10^6 Найти Пользователей, сделавших только 1 хит Найти уникальные элементы Фильтрации Обработать 10 млн. файлов: сжать, отправить Партнерская конференция 2015 #bitrixconf2015
Организация вычислений PHP – один процесс PHP – несколько процессов Bash, C – процессов… Считать и хранить в БД (файле) Сервера - мало Партнерская конференция 2015 #bitrixconf2015
Закон Амдала Партнерская конференция 2015 #bitrixconf2015 Очень важно прочувствовать формулу Затем «вкурить» для закрепления Потоки, процессы, планировщик ОС, синхронизация CAS (compare-and-swap)
#bitrixconf2015
Paxos и другие «прелести» Паксос самый маленький из семи основных Ионических островов. Выбор лидера группы, кворум Распределенная конфигурация Очереди Распределенные блокировки Партнерская конференция 2015 #bitrixconf2015
Парадигма MapReduce Google… Распределенная «реляционная алгебра» Новый класс распределенных алгоритмов Можно и на PHP Медленно, но верно Партнерская конференция 2015 #bitrixconf2015
Парадигма MapReduce Партнерская конференция 2015 #bitrixconf2015 «Mining of Massive Datasets»: Leskovec, Rajaraman, Ullman (Stanford University)
Apache Hadoop Партнерская конференция 2015 #bitrixconf2015 Платформа: - вычисления (MapReduce) - файловая система (HDFS) - SQL-запросы по данным (Hive)
Apache Spark – свежий взгляд Партнерская конференция 2015 #bitrixconf2015 Скорость! Работа в памяти Кэширование в памяти Простота развертывания
Apache Spark – свежий взгляд Партнерская конференция 2015 #bitrixconf2015
Apache Spark – код Партнерская конференция 2015 #bitrixconf2015 Реляционная алгебра Распределенные коллекции Цепочки обработки
Рекомендательные системы Партнерская конференция 2015 #bitrixconf2015
Спасибо за внимание! Партнерская конференция 2015 #bitrixconf2015 Александр