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 1 Akka Введение Open Access Quality Assurance & Related Software Development for Financial Markets Tel: +7 495 640 2460, +1 415 830 38 49 www.exactpro.com Дата 21.02.2017 Автор Заводчиков Дмитрий

Akka: Введение

Embed Size (px)

Citation preview

Page 1: 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

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: 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

2

Определение

Акка - это open-source фреймворк, упрощающий написание

многопоточных и распределенных приложений.

• В основе лежит модель акторов.

• Создавался под влиянием популяризации Erlang.

http://www.lightbend.com/akka-five-year-anniversary

Page 3: 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

3

Проблема

Разделяемое состояние между потоками

Как решать?

synchronized, wait, notify, volatile, Atomics

ReentrantLock, Condition, CyclicBarrier, CountDownLatch

Collections.synchronized(), java.util.concurrent Collections

Thread, ExecutorService

Page 4: 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

4

Проблема

Обычно многопоточный код плохо масштабируется в зависимости от

количества ядер процессора (производительность растет нелинейно)

Как решать???

Универсального ответа нет

http://www.embedded.com/design/mcus-processors-and-socs/4006507/Putting-multicore-processing-in-context-Part-One

Page 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

5

Взгляд программиста

Junior - многопоточность это сложно

Middle - многопоточность не страшно

Senior - многопоточность это вечная головная боль, корректный код

написать сложно, оптимизация еще сложнее

Junior Middle Senior

Page 6: 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

6

Акторы

Модель акторов - это модель многопоточных вычислений, в которой

актор является универсальным примитивом вычислений.

Зародилась в 70-80е годы XX века.

https://en.wikipedia.org/wiki/Actor_model

Page 7: 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

7

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

1. Система состоит из акторов - все активные классы являются

акторами

2. Акторы взаимодействуют между собой при помощи посылки

сообщений

http://blog.scottlogic.com/2014/08/15/using-akka-and-scala-to-render-a-mandelbrot-set.html

Page 8: 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

8

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

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

сообщение:

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

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

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

дальнейшем

Page 9: 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

9

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

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

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

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

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

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

Page 10: 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

10

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

Разработчики Akka позаботились о нас:

1. Не тратить время на проектирование архитектуры классов и

модели их взаимодействия (способ взаимодействия уже определен)

2. Не нужно думать о поддержке многопоточности (Актор исполняется

“как бы в одном потоке”)

3. Не нужно использовать различные примитивы синхронизации

4. Легко масштабируется (производительность растет практически

линейно)

5. Akka готовит нас к сервис-ориентированной архитектуре

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

Page 12: 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

12

Actor API

ActorRef getSelf()

ActorRef getSender()

ExecutionContext getContext()

Page 13: 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

13

ActorRef

ActorRef - это объект позволяющий идентифицировать актор. Данный

объект может передаваться по сети, в случае если система

распределенная.

ActorRef содержит в себе ActorPath - своего рода почтовый адрес. Он

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

Page 14: 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

14

Example 2 - инициализация актора

Page 15: 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

15

Example 3 - Остановка актора

Page 16: 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

16

Actor lifecycle

Page 17: 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

17

Посылка сообщений

Существует 2 правила:

1. At-most-once delivery (отсутствие гарантированной доставки)

2. Сообщения между 2 акторами доставляются в том порядке в

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

Page 18: 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

18

Example - паттерн наблюдатель

Page 19: 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

19

Actor Hierarchy

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

Page 20: 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

20

Example 4 - иерархия акторов

Page 21: 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

21

Supervision

1. Продолжить выполнение подчиненного актора, без сброса

состояния

2. Перезапустить подчиненный актор, сброс состояния

3. Остановить подчиненный актор

4. Пробросить ошибку выше

Page 22: 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

22

Example 5 - Supervision

Page 23: 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

23

Конфигурирование

Akka содержит множество настроек:

• Уровень и подсистема для логирования

• Настройка типов mailbox и dispatcher

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

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

Page 24: 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

24

Example 6 - конфигурирование

Page 25: 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

25

Mailbox

Mailbox - это очередь, в которой хранятся полученные сообщения до тех

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

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

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

Page 26: 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

26

Bounded vs Unbounded

Unbounded чуточку быстрее в общем случае, однако плохи тем, что в

случае спайка активности есть риск получить OutOfMemory.

В Bounded такого риска нет, но есть риск дедлока. Однако, появляется

возможность планировать capacity системы.

Ничего не мешает придумать собственный механизм Flow Control, тогда

мы можем воспользоваться преимуществами Unbounded очереди.

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

механизм.

Page 27: 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

27

Example 7 - настройка mailbox

Page 28: 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

28

Dispacther

Dispatcher - это движок, в котором происходит работа акторов, то есть

вызов метода onReceive.

Dispatсher можно задать как программно, так и через конфигурацию.

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

Page 29: 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

29

Виды dispatcher

Dispatcher - дефолтный вариант

PinnedDispatcher - производительность (1 актор - 1 поток)

CallingThreadDispatcher - для тестирования

Page 30: 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

30

Виды dispatсher

Однако, ключевое – это не тип, а количество Dispatcher и привязка

акторов к конкретному dispatcher.

Рекомендуется для io-bounded операций использовать отдельный

Dispatcher, так как ожидание операций ввода-вывода и переключение

контекста потоков будет замедлять обработку других акторов в данном

Dispatcher.

Page 31: 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

31

Example 8 - настройка dispatcher

Page 32: 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

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: 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

33

Спасибо

Page 34: 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

34

exactpro_llc

exactpro

#exactpro exactpro

exactpro

Вопросы и ответы

exactpro в социальных сетях