[JPoint 2017] Распределяй и властвуй — 2: Потоки данных наносят ответный удар

A presentation at Joker in April 2017 in Moscow, Russia by Viktor Gamov

Slide 1

Slide 1

Распределяй и Властвуй -2: Потоки данных наносят ответный удар @gamussa @hazelcast #jpoint

Slide 2

Slide 2

Stream v. Batch

Slide 3

Slide 3

Кто?

Slide 4

Slide 4

Кто? Solutions Architect

Slide 5

Slide 5

Кто? Solutions Architect Developer Advocate

Slide 6

Slide 6

Кто? Solutions Architect Developer Advocate @gamussa везде в интернете

Slide 7

Slide 7

Кто? Solutions Architect Developer Advocate @gamussa везде в интернете А ты зафоловил меня, $userName ©

Slide 8

Slide 8

Part Deux?

Slide 9

Slide 9

Slide 10

Slide 10

Disclaimer: Нам пишут

  • авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 11

Slide 11

Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно. * авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 12

Slide 12

Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно. * авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 13

Slide 13

Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно. * авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 14

Slide 14

Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно. ✓ Все так 😏

  • авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 15

Slide 15

Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно. ✓ Все так 😏 ✓ Читайте абстракт ✓ Как и Вы, я здесь в коммандировке

  • авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 16

Slide 16

Disclaimer: Ham пишут

  • авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 17

Slide 17

Disclaimer: Ham пишут ? Спикер … уделяет время лишь одному банальному примеру подсчёта слов в файле с использованием фреймворка их компании. * авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 18

Slide 18

Slide 19

Slide 19

Пакетная Обработка Данные в состоянии покоя @gamussa @hazelcast #jpoint

Slide 20

Slide 20

Данные и запросы Происхождение и обработка @gamussa @hazelcast #jpoint

Slide 21

Slide 21

@gamussa @hazelcast #jpoint

Slide 22

Slide 22

@gamussa @hazelcast #jpoint

Slide 23

Slide 23

Данньые… @gamussa @hazelcast #jpoint

Slide 24

Slide 24

Данньые… @gamussa @hazelcast #jpoint

Slide 25

Slide 25

Данньые… ✓ … привязаны ко времени ✓ … immutable по своей сути @gamussa @hazelcast #jpoint

Slide 26

Slide 26

CRUD -> CR Мариванна, в углу скр..© @gamussa @hazelcast #jpoint

Slide 27

Slide 27

Обработка – это запрос @gamussa @hazelcast #jpoint

Slide 28

Slide 28

Обработка – это запрос Функция по полному набору данных @gamussa @hazelcast #jpoint

Slide 29

Slide 29

Обработка – это запрос Функция по полному набору данных Проекции @gamussa @hazelcast #jpoint

Slide 30

Slide 30

Обработка – это запрос Функция по полному набору данных Проекции Агрегации @gamussa @hazelcast #jpoint

Slide 31

Slide 31

Обработка – это запрос Функция по полному набору данных Проекции Агрегации Joins @gamussa @hazelcast #jpoint

Slide 32

Slide 32

SELECT user_vote, count(*) FROM AccessLog WHERE event_date BETWEEN”04/07/2017” AND “04/07/2017” GROUP BY user_vote;

Slide 33

Slide 33

SELECT user_vote, count(*) FROM AccessLog WHERE event_date BETWEEN “04/7/2017” AND “04/08/2017” GROUP BY user_vote;

Slide 34

Slide 34

SELECT user_vote, count(*) FROM AccessLog WHERE event_date BETWEEN”04/07/2017” AND “04/08/2007” GROUP BY user_vote;

Slide 35

Slide 35

private static void countVotes(IMap<String, Vote> userVotes) { // execute the aggregation and print the result long countVotes = userVotes .aggregate(Aggregators.<String, Vote>count()); }

Slide 36

Slide 36

Slide 37

Slide 37

Lambda architecture origins http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html @gamussa @hazelcast #jpoint

Slide 38

Slide 38

Lambda Architecture @gamussa @hazelcast #jpoint

Slide 39

Slide 39

Slide 40

Slide 40

Предподсчитанньый результат http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html @gamussa @hazelcast #jpoint

Slide 41

Slide 41

Пакетньый процесс http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html @gamussa @hazelcast #jpoint

Slide 42

Slide 42

Slide 43

Slide 43

Хранилище вьыдачи @gamussa @hazelcast #jpoint

Slide 44

Slide 44

Хранилище вьыдачи Очень легко читать @gamussa @hazelcast #jpoint

Slide 45

Slide 45

Хранилище вьыдачи Очень легко читать K,V – в идеале @gamussa @hazelcast #jpoint

Slide 46

Slide 46

Хранилище вьыдачи Очень легко читать K,V – в идеале Очень быстро читать @gamussa @hazelcast #jpoint

Slide 47

Slide 47

Хранилище вьыдачи Очень легко читать K,V – в идеале Очень быстро читать хранить в памяти @gamussa @hazelcast #jpoint

Slide 48

Slide 48

Хранилище вьыдачи Очень легко читать K,V – в идеале Очень быстро читать хранить в памяти хранить предподсчитанный результат @gamussa @hazelcast #jpoint

Slide 49

Slide 49

Данные слишком важны, чтобы хранить их на одной машине

Slide 50

Slide 50

Oracle Coherence @gamussa @hazelcast #jpoint

Slide 51

Slide 51

Oracle Coherence In-memory data grid @gamussa @hazelcast #jpoint

Slide 52

Slide 52

Oracle Coherence In-memory data grid Распределенные кэши @gamussa @hazelcast #jpoint

Slide 53

Slide 53

Oracle Coherence In-memory data grid Распределенные кэши Коммерческий продукт @gamussa @hazelcast #jpoint

Slide 54

Slide 54

Infinispan @gamussa @hazelcast #jpoint

Slide 55

Slide 55

Infinispan In-memory data grid @gamussa @hazelcast #jpoint

Slide 56

Slide 56

Infinispan In-memory data grid распределённые кэши @gamussa @hazelcast #jpoint

Slide 57

Slide 57

Infinispan In-memory data grid распределённые кэши Лицензия Apache v2 @gamussa @hazelcast #jpoint

Slide 58

Slide 58

Еще хотелки… @gamussa @hazelcast #jpoint

Slide 59

Slide 59

Еще хотелки… Простота @gamussa @hazelcast #jpoint

Slide 60

Slide 60

Еще хотелки… Простота знакомый API @gamussa @hazelcast #jpoint

Slide 61

Slide 61

Еще хотелки… Простота знакомый API встраиваемость @gamussa @hazelcast #jpoint

Slide 62

Slide 62

Еще хотелки… Простота знакомый API встраиваемость Cloud Native @gamussa @hazelcast #jpoint

Slide 63

Slide 63

Еще хотелки… Простота знакомый API встраиваемость Cloud Native @gamussa @hazelcast #jpoint

Slide 64

Slide 64

Псс, парень, Hazelcast IMDG, не хочешь? Ну очень быстрый грид © @gamussa @hazelcast #jpoint

Slide 65

Slide 65

Hazelcast IMDG, ьерем? @gamussa @hazelcast #jpoint

Slide 66

Slide 66

Hazelcast IMDG, ьерем? In-memory Data Grid @gamussa @hazelcast #jpoint

Slide 67

Slide 67

Hazelcast IMDG, ьерем? In-memory Data Grid Распределенные Кэши (IMap, JCache) Проекции, Агрегации Java колекции (IList, ISet, IQueue) Система обмена сообщений (Topic, RingBuffer) Вычисления (ExecutorService, M-R) @gamussa @hazelcast #jpoint

Slide 68

Slide 68

Slide 69

Slide 69

@gamussa @hazelcast #oraclecode

Slide 70

Slide 70

Пример: ПАКЕТНАЯ ОБРАБОТКА НА HAZELCAST и SPARK @gamussa @hazelcast #jpoint

Slide 71

Slide 71

ДАННЫЕ НЕ ДОЛЖНЫ ОБНОВЛЯТЬСЯ ВО ВРЕМЯ ЧТЕНИЯ @gamussa @hazelcast #jpoint

Slide 72

Slide 72

ПОЧЕМУ? @gamussa @hazelcast #jpoint

Slide 73

Slide 73

ПРИ РАСШИРЕНИИ, MAP ПЕРЕРАСПРЕДЕЛЯЕТ ДАННЫЕ ВНУТРИ КОНТЕЙНЕРА @gamussa @hazelcast #jpoint

Slide 74

Slide 74

КУРСОР НЕ УКАЗЫВАЕТ НА КОРРЕКТНУЮ ЗАПИСЬ. МОГУТ ВОЗНИКАТЬ ДУБЛИКАТЫ ИЛИ ДАННЫЕ ПРОПАДАТЬ @gamussa @hazelcast #jpoint

Slide 75

Slide 75

Потоковая обработка Данные в движении @gamussa @hazelcast #jpoint

Slide 76

Slide 76

Hazelcast Jet Считаем ваши слова. Быстро. В памяти @gamussa @hazelcast #jpoint

Slide 77

Slide 77

Потоковая и пакетная обработка в памяти @gamussa @hazelcast #jpoint

Slide 78

Slide 78

Потоковая и пакетная обработка в памяти @gamussa @hazelcast #jpoint

Slide 79

Slide 79

Потоковая и пакетная обработка в памяти @gamussa @hazelcast #jpoint

Slide 80

Slide 80

Потоковая и пакетная обработка в памяти @gamussa @hazelcast #jpoint

Slide 81

Slide 81

Потоковая и пакетная обработка в памяти @gamussa @hazelcast #jpoint

Slide 82

Slide 82

Jet против мира Big Data @gamussa @hazelcast #jpoint

Slide 83

Slide 83

Jet против мира Big Data Простота @gamussa @hazelcast #jpoint

Slide 84

Slide 84

Jet против мира Big Data Простота в разработке @gamussa @hazelcast #jpoint

Slide 85

Slide 85

Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) @gamussa @hazelcast #jpoint

Slide 86

Slide 86

Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость @gamussa @hazelcast #jpoint

Slide 87

Slide 87

Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity @gamussa @hazelcast #jpoint

Slide 88

Slide 88

Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking @gamussa @hazelcast #jpoint

Slide 89

Slide 89

Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking Hazelcast IMDG @gamussa @hazelcast #jpoint

Slide 90

Slide 90

Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking Hazelcast IMDG распределенные данные @gamussa @hazelcast #jpoint

Slide 91

Slide 91

Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking Hazelcast IMDG распределенные данные discovery @gamussa @hazelcast #jpoint

Slide 92

Slide 92

Когда пьытаешься объяснить современньый мир Big Data @gamussa @hazelcast #jpoint

Slide 93

Slide 93

Локальность и привязка данньых @gamussa @hazelcast #jpoint

Slide 94

Slide 94

Локальность и привязка данньых Скорость и низкие задержки @gamussa @hazelcast #jpoint

Slide 95

Slide 95

Локальность и привязка данньых Скорость и низкие задержки данные и вычисления расположены на одной ноде @gamussa @hazelcast #jpoint

Slide 96

Slide 96

Локальность и привязка данньых Скорость и низкие задержки данные и вычисления расположены на одной ноде Привязка к структуре партиций @gamussa @hazelcast #jpoint

Slide 97

Slide 97

Направленньый ациклический граф @gamussa @hazelcast #jpoint

Slide 98

Slide 98

Направленньый ациклический граф Модель описания выполнения @gamussa @hazelcast #jpoint

Slide 99

Slide 99

Направленньый ациклический граф Модель описания выполнения Вершина – шаг выполнения @gamussa @hazelcast #jpoint

Slide 100

Slide 100

Направленньый ациклический граф Модель описания выполнения Вершина – шаг выполнения Работает как для пакетной и потоковой @gamussa @hazelcast #jpoint

Slide 101

Slide 101

Исполнение графа @gamussa @hazelcast #jpoint

Slide 102

Slide 102

Исполнение графа Каждая нода кластера исполняет граф целиком @gamussa @hazelcast #jpoint

Slide 103

Slide 103

Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов @gamussa @hazelcast #jpoint

Slide 104

Slide 104

Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков @gamussa @hazelcast #jpoint

Slide 105

Slide 105

Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков ~ кол-во процессоров @gamussa @hazelcast #jpoint

Slide 106

Slide 106

Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков ~ кол-во процессоров Work-stealing между потоками @gamussa @hazelcast #jpoint

Slide 107

Slide 107

Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков ~ кол-во процессоров Work-stealing между потоками Back pressure между вершинами @gamussa @hazelcast #jpoint

Slide 108

Slide 108

Cooperative Multithreading @gamussa @hazelcast #jpoint

Slide 109

Slide 109

Cooperative Multithreading Cooperative Processors выполняются в цикле, который выполняется в native треде @gamussa @hazelcast #jpoint

Slide 110

Slide 110

Cooperative Multithreading Cooperative Processors выполняются в цикле, который выполняется в native треде нет переключения контекста привязка к ядру процессора @gamussa @hazelcast #jpoint

Slide 111

Slide 111

Cooperative Multithreading Cooperative Processors выполняются в цикле, который выполняется в native треде нет переключения контекста привязка к ядру процессора Каждый tasklet выполняет небольшой небольшую часть работы (<1ms) @gamussa @hazelcast #jpoint

Slide 112

Slide 112

Cooperative Multithreading Cooperative Processors выполняются в цикле, который выполняется в native треде нет переключения контекста привязка к ядру процессора Каждый tasklet выполняет небольшой небольшую часть работы (<1ms) @gamussa @hazelcast #jpoint

Slide 113

Slide 113

Cooperative Multithreading @gamussa @hazelcast #jpoint

Slide 114

Slide 114

Cooperative Multithreading 1 поток может выполнять ~1000 tasklet @gamussa @hazelcast #jpoint

Slide 115

Slide 115

Cooperative Multithreading 1 поток может выполнять ~1000 tasklet Если нечего делать, тред @gamussa @hazelcast #jpoint

Slide 116

Slide 116

Cooperative Multithreading 1 поток может выполнять ~1000 tasklet Если нечего делать, тред Ребра графа имплементированы с помощью RingBuffer – single producer / single consumer @gamussa @hazelcast #jpoint

Slide 117

Slide 117

Cooperative Multithreading 1 поток может выполнять ~1000 tasklet Если нечего делать, тред Ребра графа имплементированы с помощью RingBuffer – single producer / single consumer @gamussa @hazelcast #jpoint

Slide 118

Slide 118

ТОпологии Что нам стоит кластер построить @gamussa @hazelcast #jpoint

Slide 119

Slide 119

Топологии @gamussa @hazelcast #jpoint

Slide 120

Slide 120

Топологии @gamussa @hazelcast #jpoint

Slide 121

Slide 121

Топологии @gamussa @hazelcast #jpoint

Slide 122

Slide 122

Топологии Source / Enrichment Sink Jet!Cluster @gamussa @hazelcast #jpoint

Slide 123

Slide 123

Топологии @gamussa @hazelcast #jpoint

Slide 124

Slide 124

Slide 125

Slide 125

Benchmarks @gamussa @hazelcast #jpoint

Slide 126

Slide 126

Benchmarks @gamussa @hazelcast #jpoint

Slide 127

Slide 127

Демо @gamussa @hazelcast #jpoint

Slide 128

Slide 128

Disclaimer: Ham пишут

  • авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 129

Slide 129

Disclaimer: Ham пишут ? Про фэйлы нод в хазелкасие хотелось бы услышать откровений и примеры из жизни.

  • авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 130

Slide 130

Disclaimer: Ham пишут ? Про фэйлы нод в хазелкасие хотелось бы услышать откровений и примеры из жизни.

  • авторская орфография сохранена @gamussa @hazelcast #jpoint

Slide 131

Slide 131

проблемы Текущее состояние @gamussa @hazelcast #jpoint

Slide 132

Slide 132

Проблемьы @gamussa @hazelcast #jpoint

Slide 133

Slide 133

Проблемьы Устойчивость к сбоям @gamussa @hazelcast #jpoint

Slide 134

Slide 134

Проблемьы Устойчивость к сбоям Работа с «бесконечными» данными @gamussa @hazelcast #jpoint

Slide 135

Slide 135

Проблемьы Устойчивость к сбоям Работа с «бесконечными» данными Неупорядоченные и «опоздавшие» события @gamussa @hazelcast #jpoint

Slide 136

Slide 136

I FOUND YOUR LACK OF FAULT TOLERANCE disturbing

Slide 137

Slide 137

Бэкапьы Консистентный бэкап системы Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы +1 10 @gamussa @hazelcast #jpoint

Slide 138

Slide 138

Бэкапьы Консистентный бэкап системы Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы 10 @gamussa @hazelcast #jpoint

Slide 139

Slide 139

Бэкапьы Консистентный бэкап системы Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы 10 11 @gamussa @hazelcast #jpoint

Slide 140

Slide 140

Бэкапьы Консистентный бэкап системы Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы 11 10 11 @gamussa @hazelcast #jpoint

Slide 141

Slide 141

Writer Reader Reader @gamussa @hazelcast #jpoint

Slide 142

Slide 142

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 143

Slide 143

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 144

Slide 144

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 145

Slide 145

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 146

Slide 146

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 147

Slide 147

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 148

Slide 148

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 149

Slide 149

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 150

Slide 150

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 151

Slide 151

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 152

Slide 152

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 153

Slide 153

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint

Slide 154

Slide 154

Writer Reader Reader Snapshot @gamussa @hazelcast #jpoint Done!

Slide 155

Slide 155

Как считать «бесконечные» данные? @gamussa @hazelcast #jpoint

Slide 156

Slide 156

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

Slide 157

Slide 157

@gamussa @hazelcast #jpoint

Slide 158

Slide 158

https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101 @gamussa @hazelcast #jpoint

Slide 159

Slide 159

Time-based обработка @gamussa @hazelcast #jpoint

Slide 160

Slide 160

Time-based обработка Привязка записей к окнам на основе Времени события Времени обработки @gamussa @hazelcast #jpoint

Slide 161

Slide 161

Time-based обработка Привязка записей к окнам на основе Времени события Времени обработки Сколько ждать «запоздалых» данных? @gamussa @hazelcast #jpoint

Slide 162

Slide 162

Time-based обработка Привязка записей к окнам на основе Времени события Времени обработки Сколько ждать «запоздалых» данных? Точность vs Память @gamussa @hazelcast #jpoint

Slide 163

Slide 163

Fatality @gamussa @hazelcast #jpoint

Slide 164

Slide 164

Потоковая обработка: итоги @gamussa @hazelcast #jpoint

Slide 165

Slide 165

Потоковая обработка: итоги • Получать результаты вычислений реальном времени возможно! @gamussa @hazelcast #jpoint

Slide 166

Slide 166

Потоковая обработка: итоги • Получать результаты вычислений реальном времени возможно! • Окна – конечное представление бесконечных данных • Окна основаны на временнЫх параметрах (время события + время обработки) @gamussa @hazelcast #jpoint

Slide 167

Slide 167

Потоковая обработка: итоги • Получать результаты вычислений реальном времени возможно! • Окна – конечное представление бесконечных данных • Окна основаны на временнЫх параметрах (время события + время обработки) • Обработка «запоздалых» событий • Вам решать, сколько ждать @gamussa @hazelcast #jpoint

Slide 168

Slide 168

hazelcast/hazelcast-jet-code-samples @gamussa @hazelcast #jpoint

Slide 169

Slide 169

СПАСИБО! Вопросы? @gamussa viktor@hazelcast.com @gamussa @hazelcast #jpoint