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