Алексей Романчук «Реактивное программирование»

1,468 views
1,263 views

Published on

Старые подходы к построению программных систем не так актуальны для создания современных решений. В дополнение к масштабируемости добавляются требования отзывчивости, отказоустойчивости и событийности. Пытаться работать на родном старом или посмотреть в сторону новых технологий? В своем выступлении я расскажу про концепцию reactive programming. Какие технологии реализуют концепцию и как сделать первые шаги в этом новом прекрасном мире.

Published in: Software
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,468
On SlideShare
0
From Embeds
0
Number of Embeds
157
Actions
Shares
0
Downloads
22
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Алексей Романчук «Реактивное программирование»

  1. 1. 2gis.ru @rnd2gis Реактивное программирование Алексей Романчук
  2. 2. 2 Обо мне
  3. 3. 2 Обо мне
  4. 4. 2 Обо мне
  5. 5. 2 Обо мне
  6. 6. 2 Обо мне
  7. 7. Для кого этот доклад
  8. 8. 4 О чем будем говорить
  9. 9. • Почему это актуально 4 О чем будем говорить
  10. 10. • Почему это актуально • Reactive Manifesto 4 О чем будем говорить
  11. 11. • Почему это актуально • Reactive Manifesto • Технологии реактивного программирования 4 О чем будем говорить
  12. 12. • Почему это актуально • Reactive Manifesto • Технологии реактивного программирования • Опыт 2ГИС 4 О чем будем говорить
  13. 13. • Почему это актуально • Reactive Manifesto • Технологии реактивного программирования • Опыт 2ГИС • С чего начать 4 О чем будем говорить
  14. 14. Мир изменился
  15. 15. 6
  16. 16. 7
  17. 17. 8
  18. 18. Мир сильно изменился
  19. 19. 10 Реактивное программирование
  20. 20. • Не про реактивные самолеты 10 Реактивное программирование
  21. 21. • Не про реактивные самолеты • Реакция на события 10 Реактивное программирование
  22. 22. 11 Реактивное программирование
  23. 23. 1. Реакция на пользователей 11 Реактивное программирование
  24. 24. 1. Реакция на пользователей 2. Реакция на отказы 11 Реактивное программирование
  25. 25. 1. Реакция на пользователей 2. Реакция на отказы 3. Реакция на нагрузку 11 Реактивное программирование
  26. 26. 1. Реакция на пользователей 2. Реакция на отказы 3. Реакция на нагрузку 4. Событийность 11 Реактивное программирование
  27. 27. 1. Реакция на пользователей
  28. 28. Пользователи хотят, чтобы все было хорошо!
  29. 29. 14 Как определить что все хорошо
  30. 30. • Предсказуемый результат за предсказуемое время 14 Как определить что все хорошо
  31. 31. • Предсказуемый результат за предсказуемое время • Система отзывчива на действия пользователя 14 Как определить что все хорошо
  32. 32. 250мс
  33. 33. 16 Как измерять отзывчивость
  34. 34. • Время ответа 16 Как измерять отзывчивость
  35. 35. • Время ответа • Под нагрузкой 16 Как измерять отзывчивость
  36. 36. • Время ответа • Под нагрузкой • Квантили 16 Как измерять отзывчивость
  37. 37. • Время ответа • Под нагрузкой • Квантили • Время ответа при недоступности части систем 16 Как измерять отзывчивость
  38. 38. 17 Особенности в распределенных системах
  39. 39. • Недоступность узла это норма 17 Особенности в распределенных системах
  40. 40. • Недоступность узла это норма • Максимальное время ожидания ответа 17 Особенности в распределенных системах
  41. 41. • Недоступность узла это норма • Максимальное время ожидания ответа • Корректная деградация вместо полной недоступности 17 Особенности в распределенных системах
  42. 42. 2. Реакция на отказы
  43. 43. 19 Что может пойти не так
  44. 44. • Ошибка в своем коде 19 Что может пойти не так
  45. 45. • Ошибка в своем коде • Ошибка в чужом коде (сервис или ОС) 19 Что может пойти не так
  46. 46. • Ошибка в своем коде • Ошибка в чужом коде (сервис или ОС) • Железо вышло из строя 19 Что может пойти не так
  47. 47. • Ошибка в своем коде • Ошибка в чужом коде (сервис или ОС) • Железо вышло из строя • Сеть вышла из строя 19 Что может пойти не так
  48. 48. • Ошибка в своем коде • Ошибка в чужом коде (сервис или ОС) • Железо вышло из строя • Сеть вышла из строя • Эксплутаторы тоже люди 19 Что может пойти не так
  49. 49. 20 Отказы
  50. 50. • Случатся 20 Отказы
  51. 51. • Случатся • Обязательно 20 Отказы
  52. 52. • Случатся • Обязательно • Именно с вами 20 Отказы
  53. 53. • Случатся • Обязательно • Именно с вами • Вы должны быть готовы 20 Отказы
  54. 54. 21 Как минимизировать влияние отказов
  55. 55. • Штатная ситуация 21 Как минимизировать влияние отказов
  56. 56. • Штатная ситуация • Изолированные системы 21 Как минимизировать влияние отказов
  57. 57. • Штатная ситуация • Изолированные системы • Дублирование данных 21 Как минимизировать влияние отказов
  58. 58. 3. Реакция на нагрузку
  59. 59. Хабраэффект
  60. 60. 24 Как пережить хабраэффект
  61. 61. • Что сейчас? 24 Как пережить хабраэффект
  62. 62. • Что сейчас? • Масштабирование 24 Как пережить хабраэффект
  63. 63. • Что сейчас? • Масштабирование • Нагрузка распределяема 24 Как пережить хабраэффект
  64. 64. • Что сейчас? • Масштабирование • Нагрузка распределяема • Балансировка между узлами 24 Как пережить хабраэффект
  65. 65. • Что сейчас? • Масштабирование • Нагрузка распределяема • Балансировка между узлами • Быстрое наращивание мощности 24 Как пережить хабраэффект
  66. 66. • Что сейчас? • Масштабирование • Нагрузка распределяема • Балансировка между узлами • Быстрое наращивание мощности • Сглаживание пиков 24 Как пережить хабраэффект
  67. 67. 4. Событийность
  68. 68. 26 Что дает нам событийная модель
  69. 69. • Слабая связность 26 Что дает нам событийная модель
  70. 70. • Слабая связность • Естественный параллелизм и масштабирование 26 Что дает нам событийная модель
  71. 71. • Слабая связность • Естественный параллелизм и масштабирование • Эффективное неиспользование ресурсов 26 Что дает нам событийная модель
  72. 72. 27 Слабая связность
  73. 73. • Кода 27 Слабая связность
  74. 74. • Кода • Изоляция времени исполнения 27 Слабая связность
  75. 75. • Кода • Изоляция времени исполнения • Жизненных циклов 27 Слабая связность
  76. 76. • Кода • Изоляция времени исполнения • Жизненных циклов • Простота тестирования 27 Слабая связность
  77. 77. • Кода • Изоляция времени исполнения • Жизненных циклов • Простота тестирования • Уменьшение доменной сложности 27 Слабая связность
  78. 78. 28 Reactive Manifesto
  79. 79. 29 Для разработчика
  80. 80. • Проблемы не новы 29 Для разработчика
  81. 81. • Проблемы не новы • Правильных инструментов 29 Для разработчика
  82. 82. • Проблемы не новы • Правильных инструментов • Микросервисная архитектура 29 Для разработчика
  83. 83. • Проблемы не новы • Правильных инструментов • Микросервисная архитектура • Устойчива к отказам 29 Для разработчика
  84. 84. • Проблемы не новы • Правильных инструментов • Микросервисная архитектура • Устойчива к отказам • Масштабируется 29 Для разработчика
  85. 85. • Проблемы не новы • Правильных инструментов • Микросервисная архитектура • Устойчива к отказам • Масштабируется • Слабосвязна 29 Для разработчика
  86. 86. Инструментарий
  87. 87. %здесь нужно вставить слайд про функциональное программирование%
  88. 88. 32 Требования
  89. 89. • Многопоточное программирование 32 Требования
  90. 90. • Многопоточное программирование • Асинхронность 32 Требования
  91. 91. • Многопоточное программирование • Асинхронность • Событийность 32 Требования
  92. 92. • Многопоточное программирование • Асинхронность • Событийность • Управляемая реакция на отказы 32 Требования
  93. 93. Языки программирования общего назначения
  94. 94. 34 Языки общего назначения
  95. 95. • Java, C++ 34 Языки общего назначения
  96. 96. • Java, C++ • Плюсы 34 Языки общего назначения
  97. 97. • Java, C++ • Плюсы • Параллелизм 34 Языки общего назначения
  98. 98. • Java, C++ • Плюсы • Параллелизм • Асинхронность 34 Языки общего назначения
  99. 99. • Java, C++ • Плюсы • Параллелизм • Асинхронность • Минуcы 34 Языки общего назначения
  100. 100. • Java, C++ • Плюсы • Параллелизм • Асинхронность • Минуcы • Монолит в рантайме 34 Языки общего назначения
  101. 101. • Java, C++ • Плюсы • Параллелизм • Асинхронность • Минуcы • Монолит в рантайме • Сложно масштабируемы 34 Языки общего назначения
  102. 102. • Java, C++ • Плюсы • Параллелизм • Асинхронность • Минуcы • Монолит в рантайме • Сложно масштабируемы • Возможно все, но сложно 34 Языки общего назначения
  103. 103. Process per Request
  104. 104. 36 Process per Request
  105. 105. • PHP фреймворки, Ruby on Rails, Django и т.д. 36 Process per Request
  106. 106. • PHP фреймворки, Ruby on Rails, Django и т.д. • Плюсы 36 Process per Request
  107. 107. • PHP фреймворки, Ruby on Rails, Django и т.д. • Плюсы • Изоляция 36 Process per Request
  108. 108. • PHP фреймворки, Ruby on Rails, Django и т.д. • Плюсы • Изоляция • Масштабируемость 36 Process per Request
  109. 109. • PHP фреймворки, Ruby on Rails, Django и т.д. • Плюсы • Изоляция • Масштабируемость • Минуcы 36 Process per Request
  110. 110. • PHP фреймворки, Ruby on Rails, Django и т.д. • Плюсы • Изоляция • Масштабируемость • Минуcы • Не событийны 36 Process per Request
  111. 111. • PHP фреймворки, Ruby on Rails, Django и т.д. • Плюсы • Изоляция • Масштабируемость • Минуcы • Не событийны • Нет асинхронности и неблокируемости 36 Process per Request
  112. 112. • PHP фреймворки, Ruby on Rails, Django и т.д. • Плюсы • Изоляция • Масштабируемость • Минуcы • Не событийны • Нет асинхронности и неблокируемости • Простое масштабирование до определенного предела 36 Process per Request
  113. 113. Green Threads
  114. 114. 38 Green Threads
  115. 115. • Go, Lua, Haskel 38 Green Threads
  116. 116. • Go, Lua, Haskel • Потоки планируются виртуальной машиной 38 Green Threads
  117. 117. • Go, Lua, Haskel • Потоки планируются виртуальной машиной • Плюсы 38 Green Threads
  118. 118. • Go, Lua, Haskel • Потоки планируются виртуальной машиной • Плюсы • Асинхронность, неблокируемость 38 Green Threads
  119. 119. • Go, Lua, Haskel • Потоки планируются виртуальной машиной • Плюсы • Асинхронность, неблокируемость • Минусы 38 Green Threads
  120. 120. • Go, Lua, Haskel • Потоки планируются виртуальной машиной • Плюсы • Асинхронность, неблокируемость • Минусы • Ограничены одной нодой 38 Green Threads
  121. 121. • Go, Lua, Haskel • Потоки планируются виртуальной машиной • Плюсы • Асинхронность, неблокируемость • Минусы • Ограничены одной нодой • Нет механизмов управления отказами 38 Green Threads
  122. 122. Event Loop
  123. 123. 40 Event Loop
  124. 124. • Node.js, Vert.x 40 Event Loop
  125. 125. • Node.js, Vert.x • Вся работа в event loop 40 Event Loop
  126. 126. • Node.js, Vert.x • Вся работа в event loop • Плюсы 40 Event Loop
  127. 127. • Node.js, Vert.x • Вся работа в event loop • Плюсы • Событийны, асинхронны, неблокируемы 40 Event Loop
  128. 128. • Node.js, Vert.x • Вся работа в event loop • Плюсы • Событийны, асинхронны, неблокируемы • Минусы 40 Event Loop
  129. 129. • Node.js, Vert.x • Вся работа в event loop • Плюсы • Событийны, асинхронны, неблокируемы • Минусы • Ограничен одной нодой 40 Event Loop
  130. 130. • Node.js, Vert.x • Вся работа в event loop • Плюсы • Событийны, асинхронны, неблокируемы • Минусы • Ограничен одной нодой • Не масштабируется по процессорам 40 Event Loop
  131. 131. • Node.js, Vert.x • Вся работа в event loop • Плюсы • Событийны, асинхронны, неблокируемы • Минусы • Ограничен одной нодой • Не масштабируется по процессорам • Нет механизмов управления отказами 40 Event Loop
  132. 132. Actor Model
  133. 133. 42 Actor Model
  134. 134. • Erlang, Akka 42 Actor Model
  135. 135. • Erlang, Akka • Плюсы 42 Actor Model
  136. 136. • Erlang, Akka • Плюсы • Событийны, асинхронны, неблокируемы 42 Actor Model
  137. 137. • Erlang, Akka • Плюсы • Событийны, асинхронны, неблокируемы • Не ограничены одной нодой 42 Actor Model
  138. 138. • Erlang, Akka • Плюсы • Событийны, асинхронны, неблокируемы • Не ограничены одной нодой • Присутствуют механизмы управления отказами 42 Actor Model
  139. 139. • Erlang, Akka • Плюсы • Событийны, асинхронны, неблокируемы • Не ограничены одной нодой • Присутствуют механизмы управления отказами • Минусы 42 Actor Model
  140. 140. • Erlang, Akka • Плюсы • Событийны, асинхронны, неблокируемы • Не ограничены одной нодой • Присутствуют механизмы управления отказами • Минусы • Форсисрует архитектуру 42 Actor Model
  141. 141. 43 Actor Model
  142. 142. 43 Actor Model
  143. 143. 43 Actor Model
  144. 144. 43 Actor Model
  145. 145. 43 Actor Model
  146. 146. 43 Actor Model
  147. 147. 43 Actor Model
  148. 148. 43 Actor Model
  149. 149. Node 1 43 Actor Model Node 2
  150. 150. Node 1 43 Actor Model Node 2
  151. 151. 44 Опыт в 2ГИС
  152. 152. • Внутренняя система 44 Опыт в 2ГИС
  153. 153. • Внутренняя система • Несколько источников данных 44 Опыт в 2ГИС
  154. 154. • Внутренняя система • Несколько источников данных • Множество потребителей 44 Опыт в 2ГИС
  155. 155. • Внутренняя система • Несколько источников данных • Множество потребителей • API 44 Опыт в 2ГИС
  156. 156. 45 Опыт в 2ГИС
  157. 157. Микросервисы
  158. 158. 47 Scala, Akka
  159. 159. • Модель акторов 47 Scala, Akka
  160. 160. • Модель акторов • Строгая типизация 47 Scala, Akka
  161. 161. • Модель акторов • Строгая типизация • JVM-язык 47 Scala, Akka
  162. 162. • Модель акторов • Строгая типизация • JVM-язык • Развитое сообщество 47 Scala, Akka
  163. 163. • Модель акторов • Строгая типизация • JVM-язык • Развитое сообщество • Истории успеха 47 Scala, Akka
  164. 164. Nginx
  165. 165. 49 Spray
  166. 166. • Web Framework 49 Spray
  167. 167. • Web Framework • Асинхронный 49 Spray
  168. 168. • Web Framework • Асинхронный • Неблокируемый 49 Spray
  169. 169. • Web Framework • Асинхронный • Неблокируемый • Событийный 49 Spray
  170. 170. • Web Framework • Асинхронный • Неблокируемый • Событийный • Дружит с актор системами 49 Spray
  171. 171. REST
  172. 172. 51 ØMQ
  173. 173. • Замена сокетам 51 ØMQ
  174. 174. • Замена сокетам • Высокая производительность 51 ØMQ
  175. 175. • Замена сокетам • Высокая производительность • Балансировка 51 ØMQ
  176. 176. 53 Hadoop, Spark
  177. 177. • Хранилище сырых данных 53 Hadoop, Spark
  178. 178. • Хранилище сырых данных • 50Гб в день 53 Hadoop, Spark
  179. 179. • Хранилище сырых данных • 50Гб в день • Spark как реализация map-reduce 53 Hadoop, Spark
  180. 180. 54 С чего начать
  181. 181. • Reactive Manifesto 54 С чего начать
  182. 182. • Reactive Manifesto • Coursera 54 С чего начать
  183. 183. • Reactive Manifesto • Coursera • Functional Programming Principles in Scala 54 С чего начать
  184. 184. • Reactive Manifesto • Coursera • Functional Programming Principles in Scala • Principles of Reactive Programming 54 С чего начать
  185. 185. • Reactive Manifesto • Coursera • Functional Programming Principles in Scala • Principles of Reactive Programming • Typesafe 54 С чего начать
  186. 186. • Reactive Manifesto • Coursera • Functional Programming Principles in Scala • Principles of Reactive Programming • Typesafe • Activator 54 С чего начать
  187. 187. • Reactive Manifesto • Coursera • Functional Programming Principles in Scala • Principles of Reactive Programming • Typesafe • Activator • Видео 54 С чего начать
  188. 188. • Reactive Manifesto • Coursera • Functional Programming Principles in Scala • Principles of Reactive Programming • Typesafe • Activator • Видео • Reactive Streams 54 С чего начать
  189. 189. Вопросы? al.romanchuk@2gis.ru @1esha

×