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.

[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017

288 views

Published on

Вы из тех, кто гонится за производительностью, запихивая в любой цикл Collection.parallelStream()? Задумываетесь, как обойтись без глобальной переделки кода и решить все проблемы с помощью большего количества серверов? Как получить распределённую обработку с линейным ростом производительности? Если подобные вопросы звучат у вас в голове, тогда этот доклад для вас. Оказывается, лишь немногие могут запускать Streams в распределенном режиме — Oracle Coherence, Infinispan, Hazelcast Jet — кто-то за деньги, кто-то бесплатно. На примере Hazelcast Jet Виктор расскажет обо всех деталях распределённой обработки. Кроме того, познакомит слушателей со своим другом Ориентированным Ациклическим Графом и покажет, как с его помощью организована обработка информации поверх API Java 8 Stream. Распределенная! Высокопроизводительная! «В памяти»!

Published in: Software
  • 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

[JBreak] Блеск И Нищета Распределенных Стримов - 04-04-2017

  1. 1. Áëåñê è íèùåòà ðàñïðåäåëåííûõ ñòðèìîâ @gAmUssA @hazelcast #jbreak #hazelcastjet http://bit.ly/streams_jbreak2017
  2. 2. @gAmUssA @hazelcast #jbreak #hazelcastjet Solutions Architect Developer Advocate @gamussa в интернетах А ты зафоловил меня в Twitter? © > Кто?
  3. 3. @gAmUssA @hazelcast #jbreak #hazelcastjet О чем поговорим? Стримы в Java 8 Распределяй и властвуй Распределенные стримы Как? Зачем?
  4. 4. @gAmUssA @hazelcast #jbreak #hazelcastjet Пример: Считаем слова Map<Integer, String>, где ключ - номер строки, а значение – строка из файла. Сколько раз каждое слово встречается? найти Top X слов *
  5. 5. @gAmUssA @hazelcast #jbreak #hazelcastjet Что для этого надо? Проходим по всем строкам в файле Разбиваем строки на слова Обновляем значение счетчика по каждому слову
  6. 6. @gAmUssA @hazelcast #jbreak #hazelcastjet Что будем считать?
  7. 7. fillMapWithData("pestni.txt", source); for (String line : source.values()) { for (String word : PATTERN.split(line)) { if (word.length() >= 5) counts.compute( cleanWord(word).toLowerCase(), (w, c) -> c == null ? 1L : c + 1 ); } }
  8. 8. Проходим по всем строкам в файле fillMapWithData("pestni.txt", source); for (String line : source.values()) { for (String word : PATTERN.split(line)) { if (word.length() >= 5) counts.compute( cleanWord(word).toLowerCase(), (w, c) -> c == null ? 1L : c + 1 ); } }
  9. 9. Разбиваем строки на слова fillMapWithData("pestni.txt", source); for (String line : source.values()) { for (String word : PATTERN.split(line)) { if (word.length() >= 5) counts.compute( cleanWord(word).toLowerCase(), (w, c) -> c == null ? 1L : c + 1 ); } }
  10. 10. Обновляем значение счетчика по каждому слову fillMapWithData("pestni.txt", source); for (String line : source.values()) { for (String word : PATTERN.split(line)) { if (word.length() >= 5) counts.compute( cleanWord(word).toLowerCase(), (w, c) -> c == null ? 1L : c + 1 ); } }
  11. 11. java.util.stream
  12. 12. @gAmUssA @hazelcast #jbreak #hazelcastjet Стримы в Java 8… Абстракция для представления последовательности элементов Не является самостоятельной структурой «проводят» элемент через конвейер преобразований Не меняют источника данных
  13. 13. @gAmUssA @hazelcast #jbreak #hazelcastjet java.util.stream map(), flatMap(), filter() reduce(), collect() sorted(), distinct() Intermediate operation Terminal operation Stateful Intermediate (Blocking) operation
  14. 14. @gAmUssA @hazelcast #jbreak #hazelcastjet Нельзя просто так взять… © Параллельное выполнение возможно только внутри одного процесса JVM (читай parallelStream) Дизайн подразумевает локальные данные Несериализуемые лямбды используются API Результаты выполнения так же несериализуемые
  15. 15. @gAmUssA @hazelcast #jbreak #hazelcastjet А что если… © Параллельное выполнение межу JVM процессами Иметь распределенные данные Поддержка сериализации лямбд Сериализуемые результаты и распределенные данные
  16. 16. http://cs.yale.edu/homes/xs45/pdf/ssgos-vldb2014.pdf
  17. 17. @gAmUssA @hazelcast #jbreak #hazelcastjet Что нам стоит распределенный стрим построить Stream extends DistributedStream DistributedStream extends Stream Что-то еще?
  18. 18. @gAmUssA @hazelcast #jbreak #hazelcastjet Why would one need a cluster?
  19. 19. @gAmUssA @hazelcast #jbreak #hazelcastjet Problem Data doesn’t fit just one machine
  20. 20. Данных слишком много, чтобы они поместились на одной машине
  21. 21. @gAmUssA @hazelcast #jbreak #hazelcastjet Данные слишком важны, чтобы хранить их на одной машине
  22. 22. @gAmUssA @hazelcast #jbreak #hazelcastjet Oracle Coherence In-memory data grid Распределенные кэши RemoteStreams Коммерческий продукт
  23. 23. @gAmUssA @hazelcast #jbreak #hazelcastjet Oracle Coherence Map<String, Integer> collect = source.stream() .flatMap(m -> Stream.of(PATTERN.split(m.getValue()))) .map(String::toLowerCase) .map(WordUtil::cleanWord) .filter(m -> m.length() >= 5) .collect(RemoteCollectors.toMap(ve1, ve2, Integer::sum));
  24. 24. @gAmUssA @hazelcast #jbreak #hazelcastjet Infinispan In-memory data grid распределённые кэши Куча всяких интеграций Лицензия Apache v2
  25. 25. @gAmUssA @hazelcast #jbreak #hazelcastjet Еще хотелки… Простота знакомый API встраиваемость Cloud Native
  26. 26. @gAmUssA @hazelcast #jbreak #hazelcastjet Для тех кто в танке - Hazelcast IMDG In-memory Data Grid Бесплатно Apache v2 Распределенные Кэши (IMap, JCache) Java коллекции (IList, ISet, IQueue) Обмен сообщениями (Topic, RingBuffer) Вычисления (ExecutorService, M-R)
  27. 27. 1 900 звездочек GitHub 100%Open Source 134 контрибьютера
  28. 28. @gAmUssA @hazelcast #jbreak #hazelcastjet Green Primary Green Backup Green Shard
  29. 29. @gAmUssA @hazelcast #jbreak #hazelcastjet Ну и в чем же проблема? IMap.values().stream() ? или IMap.entrySet().stream() ? 4 5
  30. 30. @gAmUssA @hazelcast #jbreak #hazelcastjet А ты не лопнешь, деточка ©? OutOfMemoryError
  31. 31. 4 8 Jet Streams
  32. 32. jet.hazelcast.org
  33. 33. @gAmUssA @hazelcast #jbreak #hazelcastjet Что такое Jet? Библиотека для распределенных вычислений Основана на описании модели с помощью графа Основана на Hazelcast IMDG Будем сравнивать Spark or Flink 5 0
  34. 34. @gAmUssA @hazelcast #jbreak #hazelcastjet DAG vertex vertex vertex vertex SOURCE SINK
  35. 35. @gAmUssA @hazelcast #jbreak #hazelcastjet Исполнение графа Каждая нода кластера исполняет граф целиком
  36. 36. @gAmUssA @hazelcast #jbreak #hazelcastjet Исполнение графа Каждая нода кластера исполняет граф целиком Каждая вершина графа исполняется набором tasklet-ов Ограниченное число «настоящих» потоком ~ кол-во процессоров Work-stealing между потоками Back pressure между вершинами
  37. 37. Áåí÷ìàðêè Сравниваем Spark, Flink, Hadoop используя WordCount Кластер: 9 нод, 40 ядер на каждой
  38. 38. https://github.com/hazelcast/big-data-benchmark
  39. 39. @gAmUssA @hazelcast #jbreak #hazelcastjet Сравним с обычными стримами
  40. 40. @gAmUssA @hazelcast #jbreak #hazelcastjet Надо брать пока горячо!!! jet.hazelcast.org hazelcast/hazelcast-jet http://bit.ly/streams_jbreak2017 документация Код на github Материалы презентации
  41. 41. @gAmUssA @hazelcast #jbreak #hazelcastjet В качестве заключения Стримы предоставляют функциональный API для запросов и агрегаций
  42. 42. @gAmUssA @hazelcast #jbreak #hazelcastjet Распределенные стримы Параллелизация на кластере Запись данных на кластер Стабильные результаты даже при падениях нод
  43. 43. SlidesCarnival icons are editable shapes. This means that you can: ● Resize them without losing quality. ● Change fill color and opacity. Isn’t that nice? :) Examples:
  44. 44. Now you can use any emoji as an icon! And of course it resizes without losing quality and you can change the color. How? Follow Google instructions https://twitter.com/googledocs/status/730087240156643328 ✋👆👉👍👤👦👧👨👩👪💃🏃💑❤😂 😉😋😒😭👶😸🐟🍒🍔💣📌📖🔨🎃🎈 🎨🏈🏰🌏🔌🔑and many more... 😉
  45. 45. @gAmUssA @hazelcast #jbreak #hazelcastjet Extra graphics

×