Параллелизм с использованием актеров (Erlang, .NET)

Preview:

Citation preview

Параллелизм с использованием акторов

Корниенко АлександрC#, erlang developer

Global Fleet Management

Немного истории

- модель акторов(К. Хьюит, П. Бишоп и Р. Штайгер)

- операционную семантику для модели акторов(Ирен Грейф)

- аксиоматические законы для систем акторов(Г. Бейкер и К. Хьюитт)

- основы семантики акторов(Уильям Клингер)

Фундаментальные концепции акторов

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

сообщение может одновременно:

- отправить конечное число сообщений другим акторам;

Фундаментальные концепции актеров

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

сообщение может одновременно:

- отправить конечное число сообщений другим акторам;

- создать конечное число новых акторов;

Фундаментальные концепции актеров

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

сообщение может одновременно:

- отправить конечное число сообщений другим акторам;

- создать конечное число новых акторов;

- выбрать тип поведения, которое будет использоваться для следующего

сообщения в свой адрес

Message passing - основа взаимодействия акторов

Свойства модели акторов

- изолированность компонентов системы

Actor Actor

message

message

StateState

Свойства модели акторов

- асинхронное исполнение

Actor1 Actor2

Async message

Async message

MailBoxMailBox

Свойства модели акторов

- отсутствие shared memory

- отсутствие блокировки

- отстутвие необходимости синхронизации

- отсутствие “гонок” Server 1

Actor

Server 2

Actor

Address space

Address space

Свойства модели акторов

- отказоустойчивость Процесс-наблюдатель

PIDPIDPIDPID

Свойства модели акторов

- масштабираемость

Сервер

Актор Актор

Сервер Сервер

Актор Актор

Listener

Erlang и модель актеров

КлиентыАктеры клиентов (Worker)

cast() Очередь сообщений

Writer

Очередь сообщений

cast()

udp

Supervisor поведение

Listener Актеры клиентов (Worker)

cast()Очередь

сообщений

Writer

Очередь сообщений

cast()

Supervisor

- виртуальные актеры(grain) обчные объекты

- асинхронные сообщения

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

- сервера на уровне фреймворка общаются между собой

- используют разнообразные хранилища для внутренних состояний grain

- + все самое лучшее из Erlang

.Net Orleans

Silo

Распределенная система

Client

Grainmessages Grain1

Silo

GrainGrain2

Shared storage

Silo

Добавление нового Silo это просто!

Client

messages

New Silo

Silo

Storage

Silo

Создание нового Grain

Client

Grain message

Silo

Storage

- Новый грейн активируется только когда приходит новое сообщение

+Grain

Silo

Управление простаивающими Grain

Silo

Storage

- простаивающие Grain удаляются

-Idle grain

Silo

Load balancing

Client

New grain message

1 Grain

Silo

Grain2 Grain

Shared storage

- Произвольное создание grain на одном из серверов

Silo

Load balancing

Client

New grain message

+ Grain

Silo

Grain2 Grain

Shared storage

- создание grain на основании загрузки(CPU, memory, actors)

CPU, memory

10 grainsLoad 2%

2 grainsLoad 30%

Silo

Отказоустойчивость

Client

messages

Silo

Silo

Storage

Grain 1 Grain 2

Grain 1, 2,3

-кластер жив пока работает хотя бы 1 Silo

Вопросы?

Ресурсы

http://dotnet.github.io/

https://www.erlang.org/

Recommended