Алексей Романчук «Реактивное программирование»
description
Transcript of Алексей Романчук «Реактивное программирование»
2gis.ru @rnd2gis
Реактивное программированиеАлексей Романчук
• Почему это актуально
• Reactive Manifesto
• Технологии реактивного программирования
4О чем будем говорить
• Почему это актуально
• Reactive Manifesto
• Технологии реактивного программирования
• Опыт 2ГИС
4О чем будем говорить
• Почему это актуально
• Reactive Manifesto
• Технологии реактивного программирования
• Опыт 2ГИС
• С чего начать
4О чем будем говорить
1. Реакция на пользователей
2. Реакция на отказы
3. Реакция на нагрузку
11Реактивное программирование
1. Реакция на пользователей
2. Реакция на отказы
3. Реакция на нагрузку
4. Событийность
11Реактивное программирование
• Предсказуемый результат за предсказуемое время
• Система отзывчива на действия пользователя
14Как определить что все хорошо
• Время ответа
• Под нагрузкой
• Квантили
• Время ответа при недоступности части систем
16Как измерять отзывчивость
• Недоступность узла это норма
• Максимальное время ожидания ответа
17Особенности в распределенных системах
• Недоступность узла это норма
• Максимальное время ожидания ответа
• Корректная деградация вместо полной недоступности
17Особенности в распределенных системах
• Ошибка в своем коде
• Ошибка в чужом коде (сервис или ОС)
• Железо вышло из строя
19Что может пойти не так
• Ошибка в своем коде
• Ошибка в чужом коде (сервис или ОС)
• Железо вышло из строя
• Сеть вышла из строя
19Что может пойти не так
• Ошибка в своем коде
• Ошибка в чужом коде (сервис или ОС)
• Железо вышло из строя
• Сеть вышла из строя
• Эксплутаторы тоже люди
19Что может пойти не так
• Штатная ситуация
• Изолированные системы
• Дублирование данных
21Как минимизировать влияние отказов
• Что сейчас?
• Масштабирование
• Нагрузка распределяема
• Балансировка между узлами
24Как пережить хабраэффект
• Что сейчас?
• Масштабирование
• Нагрузка распределяема
• Балансировка между узлами
• Быстрое наращивание мощности
24Как пережить хабраэффект
• Что сейчас?
• Масштабирование
• Нагрузка распределяема
• Балансировка между узлами
• Быстрое наращивание мощности
• Сглаживание пиков
24Как пережить хабраэффект
• Слабая связность
• Естественный параллелизм и масштабирование
• Эффективное неиспользование ресурсов
26Что дает нам событийная модель
• Кода
• Изоляция времени исполнения
• Жизненных циклов
• Простота тестирования
• Уменьшение доменной сложности
27Слабая связность
• Проблемы не новы
• Правильных инструментов
• Микросервисная архитектура
• Устойчива к отказам
29Для разработчика
• Проблемы не новы
• Правильных инструментов
• Микросервисная архитектура
• Устойчива к отказам
• Масштабируется
29Для разработчика
• Проблемы не новы
• Правильных инструментов
• Микросервисная архитектура
• Устойчива к отказам
• Масштабируется
• Слабосвязна
29Для разработчика
• Многопоточное программирование
• Асинхронность
• Событийность
• Управляемая реакция на отказы
32Требования
• Java, C++
• Плюсы
• Параллелизм
• Асинхронность
• Минуcы
• Монолит в рантайме
34Языки общего назначения
• Java, C++
• Плюсы
• Параллелизм
• Асинхронность
• Минуcы
• Монолит в рантайме
• Сложно масштабируемы
34Языки общего назначения
• Java, C++
• Плюсы
• Параллелизм
• Асинхронность
• Минуcы
• Монолит в рантайме
• Сложно масштабируемы
• Возможно все, но сложно
34Языки общего назначения
• PHP фреймворки, Ruby on Rails, Django и т.д.
• Плюсы
• Изоляция
• Масштабируемость
36Process per Request
• PHP фреймворки, Ruby on Rails, Django и т.д.
• Плюсы
• Изоляция
• Масштабируемость
• Минуcы
36Process per Request
• PHP фреймворки, Ruby on Rails, Django и т.д.
• Плюсы
• Изоляция
• Масштабируемость
• Минуcы
• Не событийны
36Process per Request
• PHP фреймворки, Ruby on Rails, Django и т.д.
• Плюсы
• Изоляция
• Масштабируемость
• Минуcы
• Не событийны
• Нет асинхронности и неблокируемости
36Process per Request
• PHP фреймворки, Ruby on Rails, Django и т.д.
• Плюсы
• Изоляция
• Масштабируемость
• Минуcы
• Не событийны
• Нет асинхронности и неблокируемости
• Простое масштабирование до определенного предела
36Process per Request
• Go, Lua, Haskel
• Потоки планируются виртуальной машиной
• Плюсы
• Асинхронность, неблокируемость
38Green Threads
• Go, Lua, Haskel
• Потоки планируются виртуальной машиной
• Плюсы
• Асинхронность, неблокируемость
• Минусы
38Green Threads
• Go, Lua, Haskel
• Потоки планируются виртуальной машиной
• Плюсы
• Асинхронность, неблокируемость
• Минусы
• Ограничены одной нодой
38Green Threads
• Go, Lua, Haskel
• Потоки планируются виртуальной машиной
• Плюсы
• Асинхронность, неблокируемость
• Минусы
• Ограничены одной нодой
• Нет механизмов управления отказами
38Green Threads
• Node.js, Vert.x
• Вся работа в event loop
• Плюсы
• Событийны, асинхронны, неблокируемы
40Event Loop
• Node.js, Vert.x
• Вся работа в event loop
• Плюсы
• Событийны, асинхронны, неблокируемы
• Минусы
40Event Loop
• Node.js, Vert.x
• Вся работа в event loop
• Плюсы
• Событийны, асинхронны, неблокируемы
• Минусы
• Ограничен одной нодой
40Event Loop
• Node.js, Vert.x
• Вся работа в event loop
• Плюсы
• Событийны, асинхронны, неблокируемы
• Минусы
• Ограничен одной нодой
• Не масштабируется по процессорам
40Event Loop
• Node.js, Vert.x
• Вся работа в event loop
• Плюсы
• Событийны, асинхронны, неблокируемы
• Минусы
• Ограничен одной нодой
• Не масштабируется по процессорам
• Нет механизмов управления отказами
40Event Loop
• Erlang, Akka
• Плюсы
• Событийны, асинхронны, неблокируемы
• Не ограничены одной нодой
42Actor Model
• Erlang, Akka
• Плюсы
• Событийны, асинхронны, неблокируемы
• Не ограничены одной нодой
• Присутствуют механизмы управления отказами
42Actor Model
• Erlang, Akka
• Плюсы
• Событийны, асинхронны, неблокируемы
• Не ограничены одной нодой
• Присутствуют механизмы управления отказами
• Минусы
42Actor Model
• Erlang, Akka
• Плюсы
• Событийны, асинхронны, неблокируемы
• Не ограничены одной нодой
• Присутствуют механизмы управления отказами
• Минусы
• Форсисрует архитектуру
42Actor Model
• Модель акторов
• Строгая типизация
• JVM-язык
• Развитое сообщество
• Истории успеха
47Scala, Akka
• Reactive Manifesto
54С чего начать
• Reactive Manifesto
• Coursera
54С чего начать
• Reactive Manifesto
• Coursera
• Functional Programming Principles in Scala
54С чего начать
• Reactive Manifesto
• Coursera
• Functional Programming Principles in Scala
• Principles of Reactive Programming
54С чего начать
• Reactive Manifesto
• Coursera
• Functional Programming Principles in Scala
• Principles of Reactive Programming
• Typesafe
54С чего начать
• Reactive Manifesto
• Coursera
• Functional Programming Principles in Scala
• Principles of Reactive Programming
• Typesafe
• Activator
54С чего начать
• Reactive Manifesto
• Coursera
• Functional Programming Principles in Scala
• Principles of Reactive Programming
• Typesafe
• Activator
• Видео
54С чего начать
• Reactive Manifesto
• Coursera
• Functional Programming Principles in Scala
• Principles of Reactive Programming
• Typesafe
• Activator
• Видео
• Reactive Streams
54С чего начать