Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JUGNsk Meetup #4. Павел Димитрюк: "Split Brain бояться - в Ignite не ходить"

jugnsk
October 11, 2018

JUGNsk Meetup #4. Павел Димитрюк: "Split Brain бояться - в Ignite не ходить"

В начале доклада описываются базовые понятия In-Memory Data Grid систем (IMDG), предпосылки к их использованию и ситуации, когда стоит обращать внимание на IMDG.

Затем Павел переходит к злободневным проблемам распределенных систем. In-Memory data grid системы, также как и все распределенные системы, требуют особого внимания, для поддержания консистентного состояния данных. Split Brain является одной из проблем, которые стоит предупреждать, а не бороться с его последствиями. В докладе на примере небольшого проекта показано, как этого можно достигнуть.

Кроме того, Павел делится своим опытом работы с Apache Ignite и особенностями, с которыми они в команде сталкиваются: запуск Ignite в embedded режиме, работа с Ignite через Java API при том, что основным языком в проекте является Scala.

jugnsk

October 11, 2018
Tweet

More Decks by jugnsk

Other Decks in Programming

Transcript

  1. О нас Нам департамент занимается развитием технологий больших данных в

    Билайн. Данное подразделение образовано в 2012 году в Новосибирске. Уже как 6 лет мы занимается технологиями связанными с BigData. Мы занимается развитием и сопровождением core-части BigData платформы 2
  2. План 1. Немного о нас 2. Что такое Apache Ignite?

    3. Несколько примеров для понимания 4. Вообще о распределенных системах 5. Какие могут быть проблемы в распред.системах? 6. Split-Brain a. Что это такое? b. Как с ним бороться в Ignite? 7. Зачем Ignite нам? 3
  3. 4

  4. 5

  5. 6

  6. 7

  7. 8

  8. 9

  9. 10

  10. План 1. Немного о нас 2. Что такое Apache Ignite?

    3. Несколько примеров для понимания 4. Вообще о распределенных системах 5. Какие могут быть проблемы в распред.системах? 6. Split-Brain a. Что это такое? b. Как с ним бороться в Ignite? 7. Зачем Ignite нам? 14
  11. Что такое Apache Ignite? 23 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll()
  12. Что такое Apache Ignite? 24 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap
  13. Что такое Apache Ignite? 25 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap -> transaction
  14. Что такое Apache Ignite? 26 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap -> transaction Distributed Cache -> JCache + P2P
  15. Что такое Apache Ignite? 27 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap -> transaction Distributed Cache -> JCache + P2P -> IgniteCache
  16. Что такое Apache Ignite? 28 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap -> transaction Distributed Cache -> JCache + P2P -> IgniteCache Distributed computing
  17. Что такое Apache Ignite? 29 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap -> transaction Distributed Cache -> JCache + P2P -> IgniteCache Distributed computing -> tasks, map-reduce
  18. Что такое Apache Ignite? 30 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap -> transaction Distributed Cache -> JCache + P2P -> IgniteCache Distributed computing -> tasks, map-reduce Distributed DataBase
  19. Что такое Apache Ignite? 31 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap -> transaction Distributed Cache -> JCache + P2P -> IgniteCache Distributed computing -> tasks, map-reduce Distributed DataBase -> SQL, Table, Indexes
  20. Что такое Apache Ignite? 32 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap -> transaction Distributed Cache -> JCache + P2P -> IgniteCache Distributed computing -> tasks, map-reduce Distributed DataBase -> SQL, Table, Indexes Distributed services
  21. Что такое Apache Ignite? 33 Data structure -> (Key, Value)

    HashMap -> get(), put() -> getAll(), putAll() ConcurrentHashMap -> transaction Distributed Cache -> JCache + P2P -> IgniteCache Distributed computing -> tasks, map-reduce Distributed DataBase -> SQL, Table, Indexes Distributed services -> Service grid
  22. План 1. Немного о нас 2. Что такое Apache Ignite?

    3. Несколько примеров для понимания 4. Вообще о распределенных системах 5. Какие могут быть проблемы в распред.системах? 6. Split-Brain a. Что это такое? b. Как с ним бороться в Ignite? 7. Зачем Ignite нам? 34
  23. У нас же митам для программистов, давай КОД! • Примеры

    будут на Scala • У чего не на Java? ◦ А почему и нет :) 36
  24. У нас же митам для программистов, давай КОД! • Примеры

    будут на Scala • А чего не на Java? ◦ А почему и нет :) • Все примеры будут на GitHub ◦ https://github.com/PDimitryuk/jug-nsk-ignite 37
  25. Давайте на примерах… А еще много всего... • Service Grig

    • Compute grig • Distributed Data Structures • ... 61
  26. Сейчас мы видим, что основной сущностью является Cache/Table, немного подробней

    (key, value) -> affinityFunction(key) -> key-to-partition -> partition-to-nodes mapping by topology version 65
  27. Сейчас мы видим, что основной сущностью является Cache/Table, немного подробней

    (key, value) -> affinityFunction(key) -> key-to-partition -> partition-to-nodes mapping by topology version -> getTopologyVersion 66
  28. Ну так что-же такое Apache Ignite? • Распределенный кэш? •

    Распределенная База Данных? ◦ Правда поведение по умолчанию как кэш, данные только в памяти ◦ SQL + noSQL, а точнее SQL поверх noSQL ▪ Распределенные JOIN операции*** 68
  29. Ну так что-же такое Apache Ignite? • Распределенный кэш? •

    Распределенная База Данных? ◦ Правда поведение по умолчанию как кэш, данные только в памяти ◦ SQL + noSQL, а точнее SQL поверх noSQL ▪ Распределенные JOIN операции*** • Система для разработки и выполнения распределенных программ? 69
  30. План 1. Немного о нас 2. Что такое Apache Ignite?

    3. Несколько примеров для понимания 4. Вообще о распределенных системах 5. Какие могут быть проблемы в распред.системах? 6. Split-Brain a. Что это такое? b. Как с ним бороться в Ignite? 7. Зачем Ignite нам? 70
  31. Принципы масштабирования и отказоустойчивости в Ignite Кэш - > партиционирование

    -> аффинити функция -> репликация партиций по узлам кластера 84
  32. Принципы масштабирования и отказоустойчивости в Ignite Кэш - > партиционирование

    -> аффинити функция -> репликация партиций по узлам кластера -> потеря одного узла 85
  33. Принципы масштабирования и отказоустойчивости в Ignite Кэш - > партиционирование

    -> аффинити функция -> репликация партиций по узлам кластера -> потеря одного узла -> ребалансировка * 86
  34. Подведем итог, что же такое Ignite! • Cache/Table ◦ Off-Heap

    -> No GC problem ◦ Data Partitioning ◦ Replicated Data ◦ Affinity Collocation 87
  35. Подведем итог, что же такое Ignite! • Cache/Table ◦ Off-Heap

    -> No GC problem ◦ Data Partitioning ◦ Replicated Data ◦ Affinity Collocation • Collocated Processing 88
  36. Подведем итог, что же такое Ignite! • Cache/Table ◦ Off-Heap

    -> No GC problem ◦ Data Partitioning ◦ Replicated Data ◦ Affinity Collocation • Collocated Processing • P2P communication 89
  37. Подведем итог, что же такое Ignite! • Cache/Table ◦ Off-Heap

    -> No GC problem ◦ Data Partitioning ◦ Replicated Data ◦ Affinity Collocation • Collocated Processing • P2P communication • In-Memory && Persistence* 90
  38. План 1. Немного о нас 2. Что такое Apache Ignite?

    3. Несколько примеров для понимания 4. Вообще о распределенных системах 5. Какие могут быть проблемы в распред.системах? 6. Split-Brain a. Что это такое? b. Как с ним бороться в Ignite? 7. Зачем Ignite нам? 91
  39. Какие могут быть проблемы в распределенных системах? - отказ координатора

    (мастер ноды) - работа кластера со скоростью самой медленной ноды 93
  40. Какие могут быть проблемы в распределенных системах? - отказ координатора

    (мастер ноды) - работа кластера со скоростью самой медленной ноды - целостность данных 94
  41. Какие могут быть проблемы в распределенных системах? - отказ координатора

    (мастер ноды) - работа кластера со скоростью самой медленной ноды - целостность данных - поддержание консистентного состояния 95
  42. Какие могут быть проблемы в распределенных системах? - отказ координатора

    (мастер ноды) - работа кластера со скоростью самой медленной ноды - целостность данных - поддержание консистентного состояния - нет возможности сделать полноценный бэкап, в консистентным состоянием, без остановки кластера 96
  43. Какие проблемы не актуальны для Ignite? - отказ координатора (мастер

    ноды) - работа кластера со скоростью самой медленной ноды - целостность данных - поддержание консистентного состояния - нет возможности сделать полноценный бэкап, в консистентным состоянием, без остановки кластера 97
  44. Проблемы - самые страшные из которых... • Целостность данных •

    Поддержание консистентного состояния • Потеря данных 98
  45. План 1. Немного о нас 2. Что такое Apache Ignite?

    3. Несколько примеров для понимания 4. Вообще о распределенных системах 5. Какие могут быть проблемы в распред.системах? 6. Split-Brain a. Что это такое? b. Как с ним бороться в Ignite? 7. Зачем Ignite нам? 99
  46. План 1. Немного о нас 2. Что такое Apache Ignite?

    3. Несколько примеров для понимания 4. Вообще о распределенных системах 5. Какие могут быть проблемы в распред.системах? 6. Split-Brain a. Что это такое? b. Как с ним бороться в Ignite? 7. Зачем Ignite нам? 105
  47. Как бороться со Split Brain? - Максимально быстро детектировать проблему

    - Принять решение, какую часть крастера необходимо остановить - Запретить модификацию данных - Есть ли возможность бороться с последствиями? 107
  48. Как бороться со Split Brain? - Максимально быстро детектировать проблему

    - Принять решение, какую часть крастера необходимо остановить - Запретить модификацию данных - Есть ли возможность бороться с последствиями? - Понять, имеет ли право, вторая половина кластера остаться “жить” - Есть ли потери данных? 108
  49. Как бороться со Split Brain? - Максимально быстро детектировать проблему

    - Принять решение, какую часть крастера необходимо остановить - Запретить модификацию данных - Есть ли возможность бороться с последствиями? - Понять, имеет ли право, вторая половина кластера остаться “жить” - Есть ли потери данных? - Не позволять собрать топологию кластера по размеру менее ожидаемого 109
  50. Давайте попробует устранить проблему со Split-Brain, для этого • Необходимо

    реагировать на изменении топологии • Проверять валидность топологии 121
  51. Давайте попробует устранить проблему со Split-Brain, для этого • Необходимо

    реагировать на изменении топологии • Проверять валидность топологии • Не позволять собраться невалидной топологии 122
  52. Segmentation Resolver • Есть имплементация от GridGain ◦ В виде

    плагина • Есть интерфейс SegmentationResolver ◦ Настраивается через IgniteConfiguration ◦ Нo Ignite его не вызывает… :( 124
  53. Как же тогда жить? • TopologyValidator ◦ Настраивается через CacheConfiguration

    ◦ Срабатывает при каждом изменении топологии 125
  54. Как же тогда жить? • TopologyValidator ◦ Настраивается через CacheConfiguration

    ◦ Срабатывает при каждом изменении топологии • Lifecycle ◦ BEFORE_NODE_START ◦ AFTER_NODE_START ◦ BEFORE_NODE_STOP ◦ AFTER_NODE_STOP 126
  55. Для начала критерии успешной топологии • Топология должна содержать более

    половины всех узлов • Все PRIMARY партиции на месте 127
  56. • Устранение Split-brain “на ходу” ◦ Не позволяет испортить данные

    при Split-brain во время работы кластера Что нам это дает? 131
  57. • Устранение Split-brain “на ходу” ◦ Не позволяет испортить данные

    при Split-brain во время работы кластера • Применимо для 3rd Party Persistence и Only In-Memory mode Что нам это дает? 132
  58. • Устранение Split-brain “на ходу” ◦ Не позволяет испортить данные

    при Split-brain во время работы кластера • Применимо для 3rd Party Persistence и Only In-Memory mode • Возможны разные сценарии на разных caches Что нам это дает? 133
  59. А еще есть BaseLine топология • Узлы кластера с Native

    Persistence • Фиксация корректной топологии • Избавляет от авторебалансировки • Позволяет выполнять rolling restart • Частичное решает проблему split-brain ◦ Контролирует история изменения BaseLine топологии ◦ Не дает собраться кластеру при наличии проблем после split-brain • Только при применении Ignite Native Persistence 134
  60. План 1. Немного о нас 2. Что такое Apache Ignite?

    3. Несколько примеров для понимания 4. Вообще о распределенных системах 5. Какие могут быть проблемы в распред.системах? 6. Split-Brain a. Что это такое? b. Как с ним бороться в Ignite? 7. Зачем Ignite нам? 136