Akka: Введение

Preview:

Citation preview

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 Автор Заводчиков Дмитрий

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

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

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

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

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

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

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

Базовые принципы

Актор может выполнять следующие действия в ответ на полученное

сообщение:

• Создавать другие акторы

• Отправлять сообщения другим акторам

• Изменять своё состояние, чтобы изменить свое поведение в

дальнейшем

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

Базовые принципы

Актор может изменять только своё состояние. Состояние других акторов

должно изменяться только через посылку сообщений, избегая

необходимости синхронизации доступа к данным.

Использование какого-либо общего состояния (как при традиционном

подходе) недопустимо.

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 готовит нас к сервис-ориентированной архитектуре

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 - создание актора

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()

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 - своего рода почтовый адрес. Он

формируется из имен акторов с учетом иерархии.

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 - инициализация актора

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 - Остановка актора

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

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 акторами доставляются в том порядке в

котором они отправлены

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 - паттерн наблюдатель

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

Акторы создаются в строго определенной иерархии.

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 - иерархия акторов

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. Пробросить ошибку выше

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

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

• Поддержка удаленного взаимодействия

• Способ сериализации сообщений

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 - конфигурирование

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 - это очередь, в которой хранятся полученные сообщения до тех

пор, пока не будут обработаны, или актор не будет остановлен. Обычно

каждый актор имеет свою собственную очередь, но бывают исключения,

когда очередь шарится между несколькими акторами.

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 очереди.

Правда, нужно подумать, куда именно в цепочке добавить такой

механизм.

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

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 можно задать как программно, так и через конфигурацию.

Второй вариант считается более предпочтительным.

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 - для тестирования

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.

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

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

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

Спасибо

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 в социальных сетях