Page 1
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
1
AkkaВведение
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 2460, +1 415 830 38 49www.exactpro.com
Дата 21.02.2017 Автор Заводчиков Дмитрий
Page 2
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
2
Определение
Акка - это open-source фреймворк, упрощающий написание
многопоточных и распределенных приложений.
• В основе лежит модель акторов.
• Создавался под влиянием популяризации Erlang.
http://www.lightbend.com/akka-five-year-anniversary
Page 3
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
3
Проблема
Разделяемое состояние между потоками
Как решать?
synchronized, wait, notify, volatile, Atomics
ReentrantLock, Condition, CyclicBarrier, CountDownLatch
Collections.synchronized(), java.util.concurrent Collections
Thread, ExecutorService
Page 4
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
4
Проблема
Обычно многопоточный код плохо масштабируется в зависимости от
количества ядер процессора (производительность растет нелинейно)
Как решать???
Универсального ответа нет
http://www.embedded.com/design/mcus-processors-and-socs/4006507/Putting-multicore-processing-in-context-Part-One
Page 5
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
5
Взгляд программиста
Junior - многопоточность это сложно
Middle - многопоточность не страшно
Senior - многопоточность это вечная головная боль, корректный код
написать сложно, оптимизация еще сложнее
Junior Middle Senior
Page 6
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
6
Акторы
Модель акторов - это модель многопоточных вычислений, в которой
актор является универсальным примитивом вычислений.
Зародилась в 70-80е годы XX века.
https://en.wikipedia.org/wiki/Actor_model
Page 7
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
7
Базовые принципы
1. Система состоит из акторов - все активные классы являются
акторами
2. Акторы взаимодействуют между собой при помощи посылки
сообщений
http://blog.scottlogic.com/2014/08/15/using-akka-and-scala-to-render-a-mandelbrot-set.html
Page 8
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
8
Базовые принципы
Актор может выполнять следующие действия в ответ на полученное
сообщение:
• Создавать другие акторы
• Отправлять сообщения другим акторам
• Изменять своё состояние, чтобы изменить свое поведение в
дальнейшем
Page 9
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
9
Базовые принципы
Актор может изменять только своё состояние. Состояние других акторов
должно изменяться только через посылку сообщений, избегая
необходимости синхронизации доступа к данным.
Использование какого-либо общего состояния (как при традиционном
подходе) недопустимо.
Page 10
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
10
Базовые принципы
Разработчики Akka позаботились о нас:
1. Не тратить время на проектирование архитектуры классов и
модели их взаимодействия (способ взаимодействия уже определен)
2. Не нужно думать о поддержке многопоточности (Актор исполняется
“как бы в одном потоке”)
3. Не нужно использовать различные примитивы синхронизации
4. Легко масштабируется (производительность растет практически
линейно)
5. Akka готовит нас к сервис-ориентированной архитектуре
Page 11
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
11
Example 1 - создание актора
Page 12
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
12
Actor API
ActorRef getSelf()
ActorRef getSender()
ExecutionContext getContext()
Page 13
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
13
ActorRef
ActorRef - это объект позволяющий идентифицировать актор. Данный
объект может передаваться по сети, в случае если система
распределенная.
ActorRef содержит в себе ActorPath - своего рода почтовый адрес. Он
формируется из имен акторов с учетом иерархии.
Page 14
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
14
Example 2 - инициализация актора
Page 15
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
15
Example 3 - Остановка актора
Page 16
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
16
Actor lifecycle
Page 17
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
17
Посылка сообщений
Существует 2 правила:
1. At-most-once delivery (отсутствие гарантированной доставки)
2. Сообщения между 2 акторами доставляются в том порядке в
котором они отправлены
Page 18
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
18
Example - паттерн наблюдатель
Page 19
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
19
Actor Hierarchy
Акторы создаются в строго определенной иерархии.
Page 20
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
20
Example 4 - иерархия акторов
Page 21
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
21
Supervision
1. Продолжить выполнение подчиненного актора, без сброса
состояния
2. Перезапустить подчиненный актор, сброс состояния
3. Остановить подчиненный актор
4. Пробросить ошибку выше
Page 22
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
22
Example 5 - Supervision
Page 23
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
23
Конфигурирование
Akka содержит множество настроек:
• Уровень и подсистема для логирования
• Настройка типов mailbox и dispatcher
• Поддержка удаленного взаимодействия
• Способ сериализации сообщений
Page 24
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
24
Example 6 - конфигурирование
Page 25
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
25
Mailbox
Mailbox - это очередь, в которой хранятся полученные сообщения до тех
пор, пока не будут обработаны, или актор не будет остановлен. Обычно
каждый актор имеет свою собственную очередь, но бывают исключения,
когда очередь шарится между несколькими акторами.
Page 26
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
26
Bounded vs Unbounded
Unbounded чуточку быстрее в общем случае, однако плохи тем, что в
случае спайка активности есть риск получить OutOfMemory.
В Bounded такого риска нет, но есть риск дедлока. Однако, появляется
возможность планировать capacity системы.
Ничего не мешает придумать собственный механизм Flow Control, тогда
мы можем воспользоваться преимуществами Unbounded очереди.
Правда, нужно подумать, куда именно в цепочке добавить такой
механизм.
Page 27
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
27
Example 7 - настройка mailbox
Page 28
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
28
Dispacther
Dispatcher - это движок, в котором происходит работа акторов, то есть
вызов метода onReceive.
Dispatсher можно задать как программно, так и через конфигурацию.
Второй вариант считается более предпочтительным.
Page 29
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
29
Виды dispatcher
Dispatcher - дефолтный вариант
PinnedDispatcher - производительность (1 актор - 1 поток)
CallingThreadDispatcher - для тестирования
Page 30
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
30
Виды dispatсher
Однако, ключевое – это не тип, а количество Dispatcher и привязка
акторов к конкретному dispatcher.
Рекомендуется для io-bounded операций использовать отдельный
Dispatcher, так как ожидание операций ввода-вывода и переключение
контекста потоков будет замедлять обработку других акторов в данном
Dispatcher.
Page 31
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
31
Example 8 - настройка dispatcher
Page 32
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
32
Полезные ссылки
http://doc.akka.io/docs/akka/2.4/java.html
https://en.wikipedia.org/wiki/Actor_model
https://github.com/dzavodchikov/AkkaExamples
https://www.manning.com/books/akka-in-action
http://doc.akka.io/docs/akka/current/scala/howto.html
Page 33
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
33
Спасибо
Page 34
Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 24 60 , +1 415 830 38 49 www.exactpro.com
34
exactpro_llc
exactpro
#exactpro exactpro
exactpro
Вопросы и ответы
exactpro в социальных сетях