Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

298 views

Published on

Виктор возвращается с продолжением доклада про обработку данных в памяти! На этот раз он противопоставит «потоковый» подход «пакетному». Как мы знаем, информации, зараза, много! Мало того, что её много, так ещё никто не хочет сидеть и ждать, пока Hadoop-кластер посчитает всё. Big Data уже не интересно, Fast Data — наше новое «всё»! Так что же делать, если новые данные всё прибывают и прибывают по каналам связи (через сокет-сервер ли или модную нынче Кафку) ежесекундно (а может, даже и быстрее)? Можно было бы складывать их в какое-нибудь хранилище и считать по ночам MapReduce-ом. Или всё-таки прибегнем к потоковой обработке? У каждого подхода есть свои преимущества и недостатки: как очевидные, так и те, что не всегда лежат на поверхности. После небольшого введения и обзора терминов Виктор на основе примеров кода покажет, как использовать Hazelcast Jet для распределенной обработки потоковых данных.

Published in: Technology
  • Hi there! Get Your Professional Job-Winning Resume Here - Check our website! http://bit.ly/resumpro
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

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

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

  2. 2. Stream v. Batch
  3. 3. Кто?
  4. 4. Solutions Architect Кто?
  5. 5. Solutions Architect Developer Advocate Кто?
  6. 6. Solutions Architect Developer Advocate @gamussa везде в интернете Кто?
  7. 7. Solutions Architect Developer Advocate @gamussa везде в интернете А ты зафоловил меня, $userName © Кто?
  8. 8. Part Deux?
  9. 9. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут
  10. 10. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно.
  11. 11. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно.
  12. 12. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно.
  13. 13. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно. ✓ Все так 😏
  14. 14. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Нам пишут ? Из названия не было понятно, что это пропоганда хазлкаста, что не правильно. ✓ Все так 😏 ✓ Читайте абстракт ✓ Как и Вы, я здесь в коммандировке
  15. 15. @gamussa @hazelcast #jpoint Disclaimer: Ham пишут * авторская орфография сохранена
  16. 16. @gamussa @hazelcast #jpoint Disclaimer: Ham пишут ? Спикер … уделяет время лишь одному банальному примеру подсчёта слов в файле с использованием фреймворка их компании. * авторская орфография сохранена
  17. 17. @gamussa @hazelcast #jpoint Пакетная Обработка Данные в состоянии покоя
  18. 18. @gamussa @hazelcast #jpoint Данные и запросы Происхождение и обработка
  19. 19. @gamussa @hazelcast #jpoint
  20. 20. @gamussa @hazelcast #jpoint
  21. 21. @gamussa @hazelcast #jpoint Данньые…
  22. 22. @gamussa @hazelcast #jpoint Данньые…
  23. 23. @gamussa @hazelcast #jpoint ✓ … immutable по своей сути Данньые… ✓ … привязаны ко времени
  24. 24. @gamussa @hazelcast #jpoint CRUD -> CR Мариванна, в углу скр..©
  25. 25. @gamussa @hazelcast #jpoint Обработка – это запрос
  26. 26. @gamussa @hazelcast #jpoint Обработка – это запрос Функция по полному набору данных
  27. 27. @gamussa @hazelcast #jpoint Обработка – это запрос Функция по полному набору данных Проекции
  28. 28. @gamussa @hazelcast #jpoint Обработка – это запрос Функция по полному набору данных Проекции Агрегации
  29. 29. @gamussa @hazelcast #jpoint Обработка – это запрос Функция по полному набору данных Проекции Агрегации Joins
  30. 30. SELECT user_vote, count(*) FROM AccessLog WHERE event_date BETWEEN"04/07/2017" AND "04/07/2017" GROUP BY user_vote;
  31. 31. SELECT user_vote, count(*) FROM AccessLog WHERE event_date BETWEEN "04/7/2017" AND "04/08/2017" GROUP BY user_vote;
  32. 32. SELECT user_vote, count(*) FROM AccessLog WHERE event_date BETWEEN"04/07/2017" AND "04/08/2007" GROUP BY user_vote;
  33. 33. private static void countVotes(IMap<String, Vote> userVotes) { // execute the aggregation and print the result long countVotes = userVotes .aggregate(Aggregators.<String, Vote>count()); }
  34. 34. @gamussa @hazelcast #jpoint Lambda architecture origins http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html
  35. 35. @gamussa @hazelcast #jpoint Lambda Architecture
  36. 36. @gamussa @hazelcast #jpoint Предподсчитанньый результат http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html
  37. 37. @gamussa @hazelcast #jpoint Пакетньый процесс http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html
  38. 38. @gamussa @hazelcast #jpoint Хранилище вьыдачи
  39. 39. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать
  40. 40. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать K,V – в идеале
  41. 41. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать K,V – в идеале Очень быстро читать
  42. 42. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать K,V – в идеале Очень быстро читать хранить в памяти
  43. 43. @gamussa @hazelcast #jpoint Хранилище вьыдачи Очень легко читать K,V – в идеале Очень быстро читать хранить в памяти хранить предподсчитанный результат
  44. 44. Данные слишком важны, чтобы хранить их на одной машине
  45. 45. @gamussa @hazelcast #jpoint Oracle Coherence
  46. 46. @gamussa @hazelcast #jpoint Oracle Coherence In-memory data grid
  47. 47. @gamussa @hazelcast #jpoint Oracle Coherence In-memory data grid Распределенные кэши
  48. 48. @gamussa @hazelcast #jpoint Oracle Coherence In-memory data grid Распределенные кэши Коммерческий продукт
  49. 49. @gamussa @hazelcast #jpoint Infinispan
  50. 50. @gamussa @hazelcast #jpoint Infinispan In-memory data grid
  51. 51. @gamussa @hazelcast #jpoint Infinispan In-memory data grid распределённые кэши
  52. 52. @gamussa @hazelcast #jpoint Infinispan In-memory data grid распределённые кэши Лицензия Apache v2
  53. 53. @gamussa @hazelcast #jpoint Еще хотелки…
  54. 54. @gamussa @hazelcast #jpoint Еще хотелки… Простота
  55. 55. @gamussa @hazelcast #jpoint Еще хотелки… Простота знакомый API
  56. 56. @gamussa @hazelcast #jpoint Еще хотелки… Простота знакомый API встраиваемость
  57. 57. @gamussa @hazelcast #jpoint Еще хотелки… Простота знакомый API встраиваемость Cloud Native
  58. 58. @gamussa @hazelcast #jpoint Еще хотелки… Простота знакомый API встраиваемость Cloud Native
  59. 59. @gamussa @hazelcast #jpoint Псс, парень, Hazelcast IMDG, не хочешь? Ну очень быстрый грид ©
  60. 60. @gamussa @hazelcast #jpoint Hazelcast IMDG, ьерем?
  61. 61. @gamussa @hazelcast #jpoint Hazelcast IMDG, ьерем? In-memory Data Grid
  62. 62. @gamussa @hazelcast #jpoint Hazelcast IMDG, ьерем? In-memory Data Grid Распределенные Кэши (IMap, JCache) Проекции, Агрегации Java колекции (IList, ISet, IQueue) Система обмена сообщений (Topic, RingBuffer) Вычисления (ExecutorService, M-R)
  63. 63. @gamussa @hazelcast #oraclecode
  64. 64. @gamussa @hazelcast #jpoint Пример: ПАКЕТНАЯ ОБРАБОТКА НА HAZELCAST и SPARK
  65. 65. @gamussa @hazelcast #jpoint ДАННЫЕ НЕ ДОЛЖНЫ ОБНОВЛЯТЬСЯ ВО ВРЕМЯ ЧТЕНИЯ
  66. 66. @gamussa @hazelcast #jpoint ПОЧЕМУ?
  67. 67. @gamussa @hazelcast #jpoint ПРИ РАСШИРЕНИИ, MAP ПЕРЕРАСПРЕДЕЛЯЕТ ДАННЫЕ ВНУТРИ КОНТЕЙНЕРА
  68. 68. @gamussa @hazelcast #jpoint КУРСОР НЕ УКАЗЫВАЕТ НА КОРРЕКТНУЮ ЗАПИСЬ. МОГУТ ВОЗНИКАТЬ ДУБЛИКАТЫ ИЛИ ДАННЫЕ ПРОПАДАТЬ
  69. 69. @gamussa @hazelcast #jpoint Потоковая обработка Данные в движении
  70. 70. @gamussa @hazelcast #jpoint Hazelcast Jet Считаем ваши слова. Быстро. В памяти
  71. 71. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти
  72. 72. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти
  73. 73. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти
  74. 74. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти
  75. 75. @gamussa @hazelcast #jpoint Потоковая и пакетная обработка в памяти
  76. 76. @gamussa @hazelcast #jpoint Jet против мира Big Data
  77. 77. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота
  78. 78. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в разработке
  79. 79. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в разработке в развертывании (даже в облаках)
  80. 80. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость
  81. 81. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity
  82. 82. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking
  83. 83. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking Hazelcast IMDG
  84. 84. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking Hazelcast IMDG распределенные данные
  85. 85. @gamussa @hazelcast #jpoint Jet против мира Big Data Простота в разработке в развертывании (даже в облаках) Скорость data affinity cooperative multitasking Hazelcast IMDG распределенные данные discovery
  86. 86. @gamussa @hazelcast #jpoint Когда пьытаешься объяснить современньый мир Big Data
  87. 87. @gamussa @hazelcast #jpoint Локальность и привязка данньых
  88. 88. @gamussa @hazelcast #jpoint Локальность и привязка данньых Скорость и низкие задержки
  89. 89. @gamussa @hazelcast #jpoint Локальность и привязка данньых Скорость и низкие задержки данные и вычисления расположены на одной ноде
  90. 90. @gamussa @hazelcast #jpoint Локальность и привязка данньых Скорость и низкие задержки данные и вычисления расположены на одной ноде Привязка к структуре партиций
  91. 91. @gamussa @hazelcast #jpoint Направленньый ациклический граф
  92. 92. @gamussa @hazelcast #jpoint Направленньый ациклический граф Модель описания выполнения
  93. 93. @gamussa @hazelcast #jpoint Направленньый ациклический граф Модель описания выполнения Вершина – шаг выполнения
  94. 94. @gamussa @hazelcast #jpoint Направленньый ациклический граф Модель описания выполнения Вершина – шаг выполнения Работает как для пакетной и потоковой
  95. 95. @gamussa @hazelcast #jpoint Исполнение графа
  96. 96. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф целиком
  97. 97. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов
  98. 98. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков
  99. 99. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков ~ кол-во процессоров
  100. 100. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков ~ кол-во процессоров Work-stealing между потоками
  101. 101. @gamussa @hazelcast #jpoint Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоков ~ кол-во процессоров Work-stealing между потоками Back pressure между вершинами
  102. 102. @gamussa @hazelcast #jpoint Cooperative Multithreading
  103. 103. @gamussa @hazelcast #jpoint Cooperative Multithreading Cooperative Processors выполняются в цикле, который выполняется в native треде
  104. 104. @gamussa @hazelcast #jpoint Cooperative Multithreading Cooperative Processors выполняются в цикле, который выполняется в native треде нет переключения контекста привязка к ядру процессора
  105. 105. @gamussa @hazelcast #jpoint Cooperative Multithreading Cooperative Processors выполняются в цикле, который выполняется в native треде нет переключения контекста привязка к ядру процессора Каждый tasklet выполняет небольшой небольшую часть работы (<1ms)
  106. 106. @gamussa @hazelcast #jpoint Cooperative Multithreading Cooperative Processors выполняются в цикле, который выполняется в native треде нет переключения контекста привязка к ядру процессора Каждый tasklet выполняет небольшой небольшую часть работы (<1ms)
  107. 107. @gamussa @hazelcast #jpoint Cooperative Multithreading
  108. 108. @gamussa @hazelcast #jpoint Cooperative Multithreading 1 поток может выполнять ~1000 tasklet
  109. 109. @gamussa @hazelcast #jpoint Cooperative Multithreading 1 поток может выполнять ~1000 tasklet Если нечего делать, тред
  110. 110. @gamussa @hazelcast #jpoint Cooperative Multithreading 1 поток может выполнять ~1000 tasklet Если нечего делать, тред Ребра графа имплементированы с помощью RingBuffer – single producer / single consumer
  111. 111. @gamussa @hazelcast #jpoint Cooperative Multithreading 1 поток может выполнять ~1000 tasklet Если нечего делать, тред Ребра графа имплементированы с помощью RingBuffer – single producer / single consumer
  112. 112. @gamussa @hazelcast #jpoint ТОпологии Что нам стоит кластер построить
  113. 113. @gamussa @hazelcast #jpoint Топологии
  114. 114. @gamussa @hazelcast #jpoint Топологии
  115. 115. @gamussa @hazelcast #jpoint Топологии
  116. 116. @gamussa @hazelcast #jpoint Топологии Jet!Cluster Sink Source / Enrichment
  117. 117. @gamussa @hazelcast #jpoint Топологии
  118. 118. @gamussa @hazelcast #jpoint Benchmarks
  119. 119. @gamussa @hazelcast #jpoint Benchmarks
  120. 120. @gamussa @hazelcast #jpoint Демо
  121. 121. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Ham пишут
  122. 122. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Ham пишут ? Про фэйлы нод в хазелкасие хотелось бы услышать откровений и примеры из жизни.
  123. 123. @gamussa @hazelcast #jpoint * авторская орфография сохранена Disclaimer: Ham пишут ? Про фэйлы нод в хазелкасие хотелось бы услышать откровений и примеры из жизни.
  124. 124. @gamussa @hazelcast #jpoint проблемы Текущее состояние
  125. 125. @gamussa @hazelcast #jpoint Проблемьы
  126. 126. @gamussa @hazelcast #jpoint Проблемьы Устойчивость к сбоям
  127. 127. @gamussa @hazelcast #jpoint Проблемьы Устойчивость к сбоям Работа с «бесконечными» данными
  128. 128. @gamussa @hazelcast #jpoint Проблемьы Устойчивость к сбоям Работа с «бесконечными» данными Неупорядоченные и «опоздавшие» события
  129. 129. I FOUND YOUR LACK OF FAULT TOLERANCE disturbing
  130. 130. @gamussa @hazelcast #jpoint 10 +1 Бэкапьы Консистентный бэкап системы Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы
  131. 131. @gamussa @hazelcast #jpoint 1010 Бэкапьы Консистентный бэкап системы Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы
  132. 132. @gamussa @hazelcast #jpoint 101011 Бэкапьы Консистентный бэкап системы Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы
  133. 133. @gamussa @hazelcast #jpoint 10 11 1011 Бэкапьы Консистентный бэкап системы Обработка «At-least once» vs «Exactly once» Снэпшот распределенной системы
  134. 134. @gamussa @hazelcast #jpoint Reader Writer Reader
  135. 135. @gamussa @hazelcast #jpoint Reader Writer Reader Snapshot
  136. 136. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Snapshot
  137. 137. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Snapshot
  138. 138. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Snapshot
  139. 139. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Snapshot
  140. 140. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot
  141. 141. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot
  142. 142. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot
  143. 143. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot
  144. 144. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot
  145. 145. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Snapshot
  146. 146. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Writer Snapshot
  147. 147. @gamussa @hazelcast #jpoint Reader Writer Reader Reader Reader Writer Snapshot Done!
  148. 148. @gamussa @hazelcast #jpoint Как считать «бесконечные» данные?
  149. 149. Конечное представление бесконечных данных
  150. 150. @gamussa @hazelcast #jpoint
  151. 151. @gamussa @hazelcast #jpoint https://www.oreilly.com/ideas/the-world-beyond-batch-streaming-101
  152. 152. @gamussa @hazelcast #jpoint Time-based обработка
  153. 153. @gamussa @hazelcast #jpoint Time-based обработка Привязка записей к окнам на основе Времени события Времени обработки
  154. 154. @gamussa @hazelcast #jpoint Time-based обработка Привязка записей к окнам на основе Времени события Времени обработки Сколько ждать «запоздалых» данных?
  155. 155. @gamussa @hazelcast #jpoint Time-based обработка Привязка записей к окнам на основе Времени события Времени обработки Сколько ждать «запоздалых» данных? Точность vs Память
  156. 156. @gamussa @hazelcast #jpoint Fatality
  157. 157. @gamussa @hazelcast #jpoint Потоковая обработка: итоги
  158. 158. @gamussa @hazelcast #jpoint Потоковая обработка: итоги • Получать результаты вычислений реальном времени возможно!
  159. 159. @gamussa @hazelcast #jpoint Потоковая обработка: итоги • Получать результаты вычислений реальном времени возможно! • Окна – конечное представление бесконечных данных • Окна основаны на временнЫх параметрах (время события + время обработки)
  160. 160. @gamussa @hazelcast #jpoint Потоковая обработка: итоги • Получать результаты вычислений реальном времени возможно! • Окна – конечное представление бесконечных данных • Окна основаны на временнЫх параметрах (время события + время обработки) • Обработка «запоздалых» событий • Вам решать, сколько ждать
  161. 161. @gamussa @hazelcast #jpoint hazelcast/hazelcast-jet-code-samples
  162. 162. @gamussa @hazelcast #jpoint СПАСИБО! Вопросы? @gamussa viktor@hazelcast.com

×