127
Потоковая обработка данных с помощью Actor Model Вадим Цесько [email protected] twitter.com/incubos 12 мая 2012 г. Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 1 / 42

Потоковая обработка данных с помощью модели акторов (Actor Model)

Embed Size (px)

DESCRIPTION

Модель параллельных вычислений на основе акторов была предложена в 1973 г. Модель предоставляет собой элегантный и выразительный формализм для описания и разработки асинхронных параллельных распределённых систем. Одной из наиболее популярных и зарекомендовавших себя реализаций модели является среда выполнения Erlang, успешно использующаяся во многих промышленных системах. Мы рассмотрим модель акторов и опыт промышленного использования её реализации на языке Scala в фреймворке Akka, позаимствовавшем успешные решения из мира Erlang, на примере систем потоковой обработки данных, разрабатываемых в Яндекс. Несмотря на многие достоинства, которыми обладает модель акторов, разработчикам приходится самостоятельно решать задачи, возникающие на практике и связанные с ограничениями и допущениями модели акторов, её конкретной реализации и распределенных систем в целом.

Citation preview

Page 1: Потоковая обработка данных с помощью модели акторов (Actor Model)

Потоковая обработка данных спомощью Actor Model

Вадим Цесько[email protected]/incubos

12 мая 2012 г.

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 1 / 42

Page 2: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Класс систем

Мы разрабатываемЯндекс.АвтоЯндекс.НедвижимостьЯндекс.Работа

ETL-процесс:1 Extract — загрузка внешних данных2 Transform — унификация, кластеризация, ...3 Load — построение и раскладка индекса

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42

Page 3: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Класс систем

Мы разрабатываемЯндекс.АвтоЯндекс.НедвижимостьЯндекс.Работа

ETL-процесс:

1 Extract — загрузка внешних данных2 Transform — унификация, кластеризация, ...3 Load — построение и раскладка индекса

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42

Page 4: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Класс систем

Мы разрабатываемЯндекс.АвтоЯндекс.НедвижимостьЯндекс.Работа

ETL-процесс:1 Extract — загрузка внешних данных

2 Transform — унификация, кластеризация, ...3 Load — построение и раскладка индекса

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42

Page 5: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Класс систем

Мы разрабатываемЯндекс.АвтоЯндекс.НедвижимостьЯндекс.Работа

ETL-процесс:1 Extract — загрузка внешних данных2 Transform — унификация, кластеризация, ...

3 Load — построение и раскладка индекса

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42

Page 6: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Класс систем

Мы разрабатываемЯндекс.АвтоЯндекс.НедвижимостьЯндекс.Работа

ETL-процесс:1 Extract — загрузка внешних данных2 Transform — унификация, кластеризация, ...3 Load — построение и раскладка индекса

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42

Page 7: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Статистика

Данные:До 104 источниковДо 107 сущностей20% обновляется ежедневно2x рост за год

Пользователи1:Яндекс.Авто — 4.5 млн. чел.Яндекс.Недвижимость — 2 млн. чел.Яндекс.Работа — 3.3 млн. чел.

1http://stat.yandex.ruВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 3 / 42

Page 8: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Статистика

Данные:До 104 источниковДо 107 сущностей20% обновляется ежедневно2x рост за год

Пользователи1:Яндекс.Авто — 4.5 млн. чел.Яндекс.Недвижимость — 2 млн. чел.Яндекс.Работа — 3.3 млн. чел.

1http://stat.yandex.ruВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 3 / 42

Page 9: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Было

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 4 / 42

Page 10: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

За кадром

Кластер поисковых машинРаскладкаБалансировка

Дополнительные процессы и данныеСтатистикаКартинкиЦеныКачествоАдминки/партнёркиИстория

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 5 / 42

Page 11: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Мотивация

Масштабируемость с ростом объёма данныхИнкрементальная индексация(мягкий) real-time

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42

Page 12: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Мотивация

Масштабируемость с ростом объёма данных

Инкрементальная индексация(мягкий) real-time

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42

Page 13: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Мотивация

Масштабируемость с ростом объёма данныхИнкрементальная индексация

(мягкий) real-time

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42

Page 14: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Мотивация

Масштабируемость с ростом объёма данныхИнкрементальная индексация(мягкий) real-time

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42

Page 15: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Система

Стало

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 7 / 42

Page 16: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Распределённые системы

Свойства must have

МасштабируемостьГибкостьУстойчивость к сбоямТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42

Page 17: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Распределённые системы

Свойства must have

Масштабируемость

ГибкостьУстойчивость к сбоямТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42

Page 18: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Распределённые системы

Свойства must have

МасштабируемостьГибкость

Устойчивость к сбоямТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42

Page 19: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Распределённые системы

Свойства must have

МасштабируемостьГибкостьУстойчивость к сбоям

ТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42

Page 20: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Распределённые системы

Свойства must have

МасштабируемостьГибкостьУстойчивость к сбоямТестируемость

Наблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42

Page 21: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Распределённые системы

Свойства must have

МасштабируемостьГибкостьУстойчивость к сбоямТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42

Page 22: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Происхождение

Carl Hewitt, Peter Bishop and Richard Steiger. AUniversal Modular Actor Formalism for ArtificialIntelligence. 1973.

Изначально для описания параллельныхвычисленийПозднее основа для реализаций

Don’t panicАлгебры, логики, семантики и остальное оставим закадром.

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 9 / 42

Page 23: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Происхождение

Carl Hewitt, Peter Bishop and Richard Steiger. AUniversal Modular Actor Formalism for ArtificialIntelligence. 1973.Изначально для описания параллельныхвычислений

Позднее основа для реализаций

Don’t panicАлгебры, логики, семантики и остальное оставим закадром.

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 9 / 42

Page 24: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Происхождение

Carl Hewitt, Peter Bishop and Richard Steiger. AUniversal Modular Actor Formalism for ArtificialIntelligence. 1973.Изначально для описания параллельныхвычисленийПозднее основа для реализаций

Don’t panicАлгебры, логики, семантики и остальное оставим закадром.

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 9 / 42

Page 25: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Происхождение

Carl Hewitt, Peter Bishop and Richard Steiger. AUniversal Modular Actor Formalism for ArtificialIntelligence. 1973.Изначально для описания параллельныхвычисленийПозднее основа для реализаций

Don’t panicАлгебры, логики, семантики и остальное оставим закадром.

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 9 / 42

Page 26: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Что такое Actor

Всё это актор2

Функционируют параллельноАсинхронно обмениваются сообщениямиПри обработке сообщения актор может

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

Порядок доставки сообщений не специфицированАкторы имеют «адреса»

2http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42

Page 27: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Что такое Actor

Всё это актор2

Функционируют параллельно

Асинхронно обмениваются сообщениямиПри обработке сообщения актор может

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

Порядок доставки сообщений не специфицированАкторы имеют «адреса»

2http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42

Page 28: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Что такое Actor

Всё это актор2

Функционируют параллельноАсинхронно обмениваются сообщениями

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

Порядок доставки сообщений не специфицированАкторы имеют «адреса»

2http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42

Page 29: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Что такое Actor

Всё это актор2

Функционируют параллельноАсинхронно обмениваются сообщениямиПри обработке сообщения актор может

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

Порядок доставки сообщений не специфицированАкторы имеют «адреса»

2http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42

Page 30: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Что такое Actor

Всё это актор2

Функционируют параллельноАсинхронно обмениваются сообщениямиПри обработке сообщения актор может

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

Порядок доставки сообщений не специфицирован

Акторы имеют «адреса»

2http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42

Page 31: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Что такое Actor

Всё это актор2

Функционируют параллельноАсинхронно обмениваются сообщениямиПри обработке сообщения актор может

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

Порядок доставки сообщений не специфицированАкторы имеют «адреса»

2http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42

Page 32: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Реализации Actor Model

Языки3 с «родной» поддержкой:ErlangScala...

Библиотеки для языков:ScalaJavaF#...

Мы выбралиAkka (Scala API).

3http://en.wikipedia.org/wiki/Actor_modelВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42

Page 33: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Реализации Actor ModelЯзыки3 с «родной» поддержкой:

ErlangScala...

Библиотеки для языков:ScalaJavaF#...

Мы выбралиAkka (Scala API).

3http://en.wikipedia.org/wiki/Actor_modelВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42

Page 34: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Реализации Actor ModelЯзыки3 с «родной» поддержкой:

ErlangScala...

Библиотеки для языков:ScalaJavaF#...

Мы выбралиAkka (Scala API).

3http://en.wikipedia.org/wiki/Actor_modelВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42

Page 35: Потоковая обработка данных с помощью модели акторов (Actor Model)

Введение Actor Model

Реализации Actor ModelЯзыки3 с «родной» поддержкой:

ErlangScala...

Библиотеки для языков:ScalaJavaF#...

Мы выбралиAkka (Scala API).

3http://en.wikipedia.org/wiki/Actor_modelВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42

Page 36: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

О проекте

Jonas Boner:Java ChampionTerracotta JVM clustering, JRockit JVM,AspectWerkz AOP, Eclipse AspectJ

Ресурсы:http://akka.io/docs/http://letitcrash.com/

Код:https://github.com/akka/akkaApache V2 license

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 12 / 42

Page 37: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

О проекте

Jonas Boner:Java ChampionTerracotta JVM clustering, JRockit JVM,AspectWerkz AOP, Eclipse AspectJ

Ресурсы:http://akka.io/docs/http://letitcrash.com/

Код:https://github.com/akka/akkaApache V2 license

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 12 / 42

Page 38: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

О проекте

Jonas Boner:Java ChampionTerracotta JVM clustering, JRockit JVM,AspectWerkz AOP, Eclipse AspectJ

Ресурсы:http://akka.io/docs/http://letitcrash.com/

Код:https://github.com/akka/akkaApache V2 license

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 12 / 42

Page 39: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Производительность

ВниманиеСинтетические тесты ,

Erlang R14B04 vs Akka 2.0-SNAPSHOT4:1M mps vs 2.1M mps

Akka 2.05:50M mps48-core, 128 GB, ForkJoinPool

4http://letitcrash.com/post/14783691760/akka-vs-erlang5http://letitcrash.com/post/20397701710/

50-million-messages-per-second-on-a-single-machineВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42

Page 40: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Производительность

ВниманиеСинтетические тесты ,

Erlang R14B04 vs Akka 2.0-SNAPSHOT4:

1M mps vs 2.1M mpsAkka 2.05:

50M mps48-core, 128 GB, ForkJoinPool

4http://letitcrash.com/post/14783691760/akka-vs-erlang5http://letitcrash.com/post/20397701710/

50-million-messages-per-second-on-a-single-machineВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42

Page 41: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Производительность

ВниманиеСинтетические тесты ,

Erlang R14B04 vs Akka 2.0-SNAPSHOT4:1M mps vs 2.1M mps

Akka 2.05:50M mps48-core, 128 GB, ForkJoinPool

4http://letitcrash.com/post/14783691760/akka-vs-erlang5http://letitcrash.com/post/20397701710/

50-million-messages-per-second-on-a-single-machineВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42

Page 42: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Производительность

ВниманиеСинтетические тесты ,

Erlang R14B04 vs Akka 2.0-SNAPSHOT4:1M mps vs 2.1M mps

Akka 2.05:

50M mps48-core, 128 GB, ForkJoinPool

4http://letitcrash.com/post/14783691760/akka-vs-erlang5http://letitcrash.com/post/20397701710/

50-million-messages-per-second-on-a-single-machineВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42

Page 43: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Производительность

ВниманиеСинтетические тесты ,

Erlang R14B04 vs Akka 2.0-SNAPSHOT4:1M mps vs 2.1M mps

Akka 2.05:50M mps

48-core, 128 GB, ForkJoinPool

4http://letitcrash.com/post/14783691760/akka-vs-erlang5http://letitcrash.com/post/20397701710/

50-million-messages-per-second-on-a-single-machineВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42

Page 44: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Производительность

ВниманиеСинтетические тесты ,

Erlang R14B04 vs Akka 2.0-SNAPSHOT4:1M mps vs 2.1M mps

Akka 2.05:50M mps48-core, 128 GB, ForkJoinPool

4http://letitcrash.com/post/14783691760/akka-vs-erlang5http://letitcrash.com/post/20397701710/

50-million-messages-per-second-on-a-single-machineВадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42

Page 45: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Особенности реализации Actor Model

300 байт на акторАктор: состояние, поведение, почтовый ящик,список детей, стратегия супервизораМножество акторов на множестве нитейНет гарантированной доставки, семантикаat-most-once, порядок сохраняетсяСообщения обрабатываются строго по порядкуИерархия: создаваемые акторы — дети,родитель — супервизорАктор скрыт за переносимой ActorRef

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42

Page 46: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Особенности реализации Actor Model

300 байт на актор

Актор: состояние, поведение, почтовый ящик,список детей, стратегия супервизораМножество акторов на множестве нитейНет гарантированной доставки, семантикаat-most-once, порядок сохраняетсяСообщения обрабатываются строго по порядкуИерархия: создаваемые акторы — дети,родитель — супервизорАктор скрыт за переносимой ActorRef

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42

Page 47: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Особенности реализации Actor Model

300 байт на акторАктор: состояние, поведение, почтовый ящик,список детей, стратегия супервизора

Множество акторов на множестве нитейНет гарантированной доставки, семантикаat-most-once, порядок сохраняетсяСообщения обрабатываются строго по порядкуИерархия: создаваемые акторы — дети,родитель — супервизорАктор скрыт за переносимой ActorRef

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42

Page 48: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Особенности реализации Actor Model

300 байт на акторАктор: состояние, поведение, почтовый ящик,список детей, стратегия супервизораМножество акторов на множестве нитей

Нет гарантированной доставки, семантикаat-most-once, порядок сохраняетсяСообщения обрабатываются строго по порядкуИерархия: создаваемые акторы — дети,родитель — супервизорАктор скрыт за переносимой ActorRef

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42

Page 49: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Особенности реализации Actor Model

300 байт на акторАктор: состояние, поведение, почтовый ящик,список детей, стратегия супервизораМножество акторов на множестве нитейНет гарантированной доставки, семантикаat-most-once, порядок сохраняется

Сообщения обрабатываются строго по порядкуИерархия: создаваемые акторы — дети,родитель — супервизорАктор скрыт за переносимой ActorRef

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42

Page 50: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Особенности реализации Actor Model

300 байт на акторАктор: состояние, поведение, почтовый ящик,список детей, стратегия супервизораМножество акторов на множестве нитейНет гарантированной доставки, семантикаat-most-once, порядок сохраняетсяСообщения обрабатываются строго по порядку

Иерархия: создаваемые акторы — дети,родитель — супервизорАктор скрыт за переносимой ActorRef

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42

Page 51: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Особенности реализации Actor Model

300 байт на акторАктор: состояние, поведение, почтовый ящик,список детей, стратегия супервизораМножество акторов на множестве нитейНет гарантированной доставки, семантикаat-most-once, порядок сохраняетсяСообщения обрабатываются строго по порядкуИерархия: создаваемые акторы — дети,родитель — супервизор

Актор скрыт за переносимой ActorRef

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42

Page 52: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Особенности реализации Actor Model

300 байт на акторАктор: состояние, поведение, почтовый ящик,список детей, стратегия супервизораМножество акторов на множестве нитейНет гарантированной доставки, семантикаat-most-once, порядок сохраняетсяСообщения обрабатываются строго по порядкуИерархия: создаваемые акторы — дети,родитель — супервизорАктор скрыт за переносимой ActorRef

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42

Page 53: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Ссылки

Чисто локальныеЛокальные ссылкиСсылки для маршрутизации (Router)Ссылки на удалённых акторовОсобые: PromiseActorRef, DeadLetterActorRef,EmptyLocalActorRef (DeadLetterActorRef)

Примеры путейakka://system/user/service/workerakka://[email protected]:2552/user/service

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 15 / 42

Page 54: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Ссылки

Чисто локальныеЛокальные ссылкиСсылки для маршрутизации (Router)Ссылки на удалённых акторовОсобые: PromiseActorRef, DeadLetterActorRef,EmptyLocalActorRef (DeadLetterActorRef)

Примеры путейakka://system/user/service/workerakka://[email protected]:2552/user/service

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 15 / 42

Page 55: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Конструирование ссылок

Создание акторов: ActorSystem.actorOf илиActorContext.actorOfПоиск акторов: ActorSystem.actorFor илиActorContext.actorForКаждый актор знает себя, родителя и детей

Можно делать так:1 context.actorFor("../brother") ! msg2 context.actorFor("/user/service") ! msg3 context.actorSelection("../*") ! msg

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 16 / 42

Page 56: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Конструирование ссылок

Создание акторов: ActorSystem.actorOf илиActorContext.actorOfПоиск акторов: ActorSystem.actorFor илиActorContext.actorForКаждый актор знает себя, родителя и детей

Можно делать так:1 context.actorFor("../brother") ! msg2 context.actorFor("/user/service") ! msg3 context.actorSelection("../*") ! msg

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 16 / 42

Page 57: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Именование в локальной системе

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 17 / 42

Page 58: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Пути

Типы путей:ЛогическийФизический

Особые пути:/user/system/deadLetters/temp/remote

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 18 / 42

Page 59: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Пути

Типы путей:ЛогическийФизический

Особые пути:/user/system/deadLetters/temp/remote

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 18 / 42

Page 60: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Удалённое развёртывание

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 19 / 42

Page 61: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Actor Best Practices

Не блокироватьсяНеизменяемые сообщенияНет разделяемому состоянию«Опасные» подзадачи в дочерние акторыСобытия жизненного цикла

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42

Page 62: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Actor Best Practices

Не блокироваться

Неизменяемые сообщенияНет разделяемому состоянию«Опасные» подзадачи в дочерние акторыСобытия жизненного цикла

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42

Page 63: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Actor Best Practices

Не блокироватьсяНеизменяемые сообщения

Нет разделяемому состоянию«Опасные» подзадачи в дочерние акторыСобытия жизненного цикла

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42

Page 64: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Actor Best Practices

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

«Опасные» подзадачи в дочерние акторыСобытия жизненного цикла

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42

Page 65: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Actor Best Practices

Не блокироватьсяНеизменяемые сообщенияНет разделяемому состоянию«Опасные» подзадачи в дочерние акторы

События жизненного цикла

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42

Page 66: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Actor Best Practices

Не блокироватьсяНеизменяемые сообщенияНет разделяемому состоянию«Опасные» подзадачи в дочерние акторыСобытия жизненного цикла

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42

Page 67: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Используемые фичи

ActorsLoggingSchedulerDispatchersRoutingRemotingSerializationTestingFSMFault Tolerance

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 21 / 42

Page 68: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Akka

Неиспользуемые фичи

Typed ActorsEvent BusFuturesDataflow ConcurrencySTMAgentsTransactorsDurable Mailboxes (file, Redis, ZooKeeper, Mongo)Akka Cluster

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 22 / 42

Page 69: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Определение актора1 class Partitioner(partitionStorage: ActorRef) extends Actor {2

3 lazy val log = Logging(context.system, this)4

5 def receive = {6 case PartitionFeed(partner, offers) =>7 partition(partner, offers)8 case msg =>9 log.error("Unsupported message received: {}", msg)

10 }11

12 def partition(partner: Partner, offers: Traversable[Offer]) {13 ...14

15 partitionStorage ! UpdatePartitions(partner, partitioning)16 }17 }

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 23 / 42

Page 70: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Создание актора

1 val system = ActorSystem("sharder")2

3 val partitionStorage = ...4

5 val partitioner = system.actorOf(Props(6 new Partitioner(7 partitionStorage8 )).withDispatcher("dispatcher.cpu")9 .withRouter(FromConfig()),

10 "partitioner")

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 24 / 42

Page 71: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Конфигурация диспетчераКонфигурация в HOCON6:

1 dispatcher {2 cpu {3 type = Dispatcher4 executor = "fork-join-executor"5 mailbox-capacity = 46 mailbox-push-timeout-time = 5m7

8 fork-join-executor {9 parallelism-min = 4

10 parallelism-factor = 1.011 }12 }13 }

6Human-Optimized Config Object Notation:https://github.com/typesafehub/config

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 25 / 42

Page 72: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Диспетчеры и ящики

Диспетчеры:DispatcherPinnedDispatcherBalancingDispatcherCallingThreadDispatcher

Почтовые ящики:UnboundedMailboxBoundedMailboxUnboundedPriorityMailboxBoundedPriorityMailboxDurable Mailboxes

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 26 / 42

Page 73: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Конфигурация маршрутизатора

1 akka.actor.deployment {2 /partitioner {3 router = smallest-mailbox4 nr-of-instances = 45 }6 }

1 akka.actor.deployment {2 /unifier {3 router = round-robin4 resizer {5 lower-bound = 26 upper-bound = 167 }8 }9 }

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 27 / 42

Page 74: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Маршрутизаторы

RoundRobinRouterRandomRouterSmallestMailboxRouterBroadcastRouterScatterGatherFirstCompletedRouter

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 28 / 42

Page 75: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Конфигурирование из кода

1 val shardActors =2 shards.map(system.actorFor(_)).toIndexedSeq3

4 val shard = system.actorOf(5 Props[PartitionReceiver]6 .withRouter(RoundRobinRouter(shardActors))7 .withDispatcher("dispatcher.shard"),8 "shard")

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 29 / 42

Page 76: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Распределённые акторы

1 akka {2 actor {3 provider = "akka.remote.RemoteActorRefProvider"4 }5

6 remote {7 transport = "akka.remote.netty.NettyRemoteTransport"8

9 netty {10 hostname = "server.yandex.ru"11 port = 255312 }13 }14 }

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 30 / 42

Page 77: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Пример теста

1 val probe = TestProbe()2 val burstScaler = TestActorRef(new BurstScaler(probe.ref))3

4 before {5 burstScaler.underlyingActor.sent =6 burstScaler.underlyingActor.sent.empty7 }8

9 "A BurstScaler" should {10 "always forward the first message" in {11 probe.within(1 second) {12 burstScaler ! 113 probe.expectMsg(1)14 }15 }16 }

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 31 / 42

Page 78: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Тестирование акторов

Модульное тестирование с TestActorRefИнтеграционное тестирование с ProbeПроверки с сопоставлением по шаблонуЗамедление времениДетализированные логи akka.actor.debug.*CallingThreadDispatcher

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42

Page 79: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Тестирование акторов

Модульное тестирование с TestActorRef

Интеграционное тестирование с ProbeПроверки с сопоставлением по шаблонуЗамедление времениДетализированные логи akka.actor.debug.*CallingThreadDispatcher

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42

Page 80: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Тестирование акторов

Модульное тестирование с TestActorRefИнтеграционное тестирование с Probe

Проверки с сопоставлением по шаблонуЗамедление времениДетализированные логи akka.actor.debug.*CallingThreadDispatcher

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42

Page 81: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Тестирование акторов

Модульное тестирование с TestActorRefИнтеграционное тестирование с ProbeПроверки с сопоставлением по шаблону

Замедление времениДетализированные логи akka.actor.debug.*CallingThreadDispatcher

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42

Page 82: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Тестирование акторов

Модульное тестирование с TestActorRefИнтеграционное тестирование с ProbeПроверки с сопоставлением по шаблонуЗамедление времени

Детализированные логи akka.actor.debug.*CallingThreadDispatcher

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42

Page 83: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Тестирование акторов

Модульное тестирование с TestActorRefИнтеграционное тестирование с ProbeПроверки с сопоставлением по шаблонуЗамедление времениДетализированные логи akka.actor.debug.*

CallingThreadDispatcher

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42

Page 84: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Тестирование акторов

Модульное тестирование с TestActorRefИнтеграционное тестирование с ProbeПроверки с сопоставлением по шаблонуЗамедление времениДетализированные логи akka.actor.debug.*CallingThreadDispatcher

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42

Page 85: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

СупервизорРешение при сбое:

1 Resume2 Restart3 Stop4 Escalate

Принятое решение (1-3) действует рекурсивноФункция Exception ⇒ DirectiveTerminated, preStart, preRestart, postStop,postRestartOneForOneStrategy и AllForOneStrategyОграничение количества перезапусков

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42

Page 86: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

СупервизорРешение при сбое:

1 Resume2 Restart3 Stop4 Escalate

Принятое решение (1-3) действует рекурсивно

Функция Exception ⇒ DirectiveTerminated, preStart, preRestart, postStop,postRestartOneForOneStrategy и AllForOneStrategyОграничение количества перезапусков

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42

Page 87: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

СупервизорРешение при сбое:

1 Resume2 Restart3 Stop4 Escalate

Принятое решение (1-3) действует рекурсивноФункция Exception ⇒ Directive

Terminated, preStart, preRestart, postStop,postRestartOneForOneStrategy и AllForOneStrategyОграничение количества перезапусков

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42

Page 88: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

СупервизорРешение при сбое:

1 Resume2 Restart3 Stop4 Escalate

Принятое решение (1-3) действует рекурсивноФункция Exception ⇒ DirectiveTerminated, preStart, preRestart, postStop,postRestart

OneForOneStrategy и AllForOneStrategyОграничение количества перезапусков

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42

Page 89: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

СупервизорРешение при сбое:

1 Resume2 Restart3 Stop4 Escalate

Принятое решение (1-3) действует рекурсивноФункция Exception ⇒ DirectiveTerminated, preStart, preRestart, postStop,postRestartOneForOneStrategy и AllForOneStrategy

Ограничение количества перезапусков

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42

Page 90: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

СупервизорРешение при сбое:

1 Resume2 Restart3 Stop4 Escalate

Принятое решение (1-3) действует рекурсивноФункция Exception ⇒ DirectiveTerminated, preStart, preRestart, postStop,postRestartOneForOneStrategy и AllForOneStrategyОграничение количества перезапусков

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42

Page 91: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Супервизор по умолчанию

1 final val defaultStrategy: SupervisorStrategy = {2 def defaultDecider: Decider = {3 case _: ActorInitializationException => Stop4 case _: ActorKilledException => Stop5 case _: Exception => Restart6 case _ => Escalate7 }8 OneForOneStrategy()(defaultDecider)9 }

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 34 / 42

Page 92: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Наблюдаемость

Typesafe Console для мониторинга

Graphite + statsd + statsd-over-slf4j

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 35 / 42

Page 93: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Наблюдаемость

Typesafe Console для мониторингаGraphite + statsd + statsd-over-slf4j

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 35 / 42

Page 94: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Свойства must have

МасштабируемостьГибкостьУстойчивость к сбоямТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42

Page 95: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Свойства must have

Масштабируемость

ГибкостьУстойчивость к сбоямТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42

Page 96: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Свойства must have

МасштабируемостьГибкость

Устойчивость к сбоямТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42

Page 97: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Свойства must have

МасштабируемостьГибкостьУстойчивость к сбоям

ТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42

Page 98: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Свойства must have

МасштабируемостьГибкостьУстойчивость к сбоямТестируемость

Наблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42

Page 99: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Примеры

Свойства must have

МасштабируемостьГибкостьУстойчивость к сбоямТестируемостьНаблюдаемость

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42

Page 100: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Акторы

Храните состояние вовнеСтройте всю систему на акторахПишите асинхронный кодИзбегайте косвенного взаимодействия акторовБаги есть, но быстро чинят

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42

Page 101: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Акторы

Храните состояние вовне

Стройте всю систему на акторахПишите асинхронный кодИзбегайте косвенного взаимодействия акторовБаги есть, но быстро чинят

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42

Page 102: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Акторы

Храните состояние вовнеСтройте всю систему на акторах

Пишите асинхронный кодИзбегайте косвенного взаимодействия акторовБаги есть, но быстро чинят

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42

Page 103: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Акторы

Храните состояние вовнеСтройте всю систему на акторахПишите асинхронный код

Избегайте косвенного взаимодействия акторовБаги есть, но быстро чинят

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42

Page 104: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Акторы

Храните состояние вовнеСтройте всю систему на акторахПишите асинхронный кодИзбегайте косвенного взаимодействия акторов

Баги есть, но быстро чинят

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42

Page 105: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Акторы

Храните состояние вовнеСтройте всю систему на акторахПишите асинхронный кодИзбегайте косвенного взаимодействия акторовБаги есть, но быстро чинят

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42

Page 106: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Память и ящики

Неограниченные ящики ⇒ неограниченная памятьпри перегрузкеОграниченные ящики ⇒ возможные deadlock’ипри наличии циклов⇒ стройте системы без циклов ,Существует диспетчер по умолчаниюНет доступа к размеру ящика7

7http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42

Page 107: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Память и ящики

Неограниченные ящики ⇒ неограниченная памятьпри перегрузке

Ограниченные ящики ⇒ возможные deadlock’ипри наличии циклов⇒ стройте системы без циклов ,Существует диспетчер по умолчаниюНет доступа к размеру ящика7

7http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42

Page 108: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Память и ящики

Неограниченные ящики ⇒ неограниченная памятьпри перегрузкеОграниченные ящики ⇒ возможные deadlock’ипри наличии циклов

⇒ стройте системы без циклов ,Существует диспетчер по умолчаниюНет доступа к размеру ящика7

7http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42

Page 109: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Память и ящики

Неограниченные ящики ⇒ неограниченная памятьпри перегрузкеОграниченные ящики ⇒ возможные deadlock’ипри наличии циклов⇒ стройте системы без циклов ,

Существует диспетчер по умолчаниюНет доступа к размеру ящика7

7http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42

Page 110: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Память и ящики

Неограниченные ящики ⇒ неограниченная памятьпри перегрузкеОграниченные ящики ⇒ возможные deadlock’ипри наличии циклов⇒ стройте системы без циклов ,Существует диспетчер по умолчанию

Нет доступа к размеру ящика7

7http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42

Page 111: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Память и ящики

Неограниченные ящики ⇒ неограниченная памятьпри перегрузкеОграниченные ящики ⇒ возможные deadlock’ипри наличии циклов⇒ стройте системы без циклов ,Существует диспетчер по умолчаниюНет доступа к размеру ящика7

7http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42

Page 112: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Удалённые акторы

Remote deploy пока не работает в полной мереНа клиенте нужно иметь код удалённоразвёртываемого актора (WTF?!)Маршрутизатор smallest-mailbox не работаетдля удалённых акторов

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42

Page 113: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Удалённые акторы

Remote deploy пока не работает в полной мере

На клиенте нужно иметь код удалённоразвёртываемого актора (WTF?!)Маршрутизатор smallest-mailbox не работаетдля удалённых акторов

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42

Page 114: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Удалённые акторы

Remote deploy пока не работает в полной мереНа клиенте нужно иметь код удалённоразвёртываемого актора (WTF?!)

Маршрутизатор smallest-mailbox не работаетдля удалённых акторов

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42

Page 115: Потоковая обработка данных с помощью модели акторов (Actor Model)

Практика Опыт

Удалённые акторы

Remote deploy пока не работает в полной мереНа клиенте нужно иметь код удалённоразвёртываемого актора (WTF?!)Маршрутизатор smallest-mailbox не работаетдля удалённых акторов

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42

Page 116: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Недостатки реализации

Недостатки реализации

Отсутствует явная структура системыНет статической проверки протоколовПока неполноценная реализация удалённогодеплоя и апгрейдаНет развитых средств анализапроизводительности системы

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42

Page 117: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Недостатки реализации

Недостатки реализации

Отсутствует явная структура системы

Нет статической проверки протоколовПока неполноценная реализация удалённогодеплоя и апгрейдаНет развитых средств анализапроизводительности системы

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42

Page 118: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Недостатки реализации

Недостатки реализации

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

Пока неполноценная реализация удалённогодеплоя и апгрейдаНет развитых средств анализапроизводительности системы

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42

Page 119: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Недостатки реализации

Недостатки реализации

Отсутствует явная структура системыНет статической проверки протоколовПока неполноценная реализация удалённогодеплоя и апгрейда

Нет развитых средств анализапроизводительности системы

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42

Page 120: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Недостатки реализации

Недостатки реализации

Отсутствует явная структура системыНет статической проверки протоколовПока неполноценная реализация удалённогодеплоя и апгрейдаНет развитых средств анализапроизводительности системы

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42

Page 121: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Достоинства подхода

Достоинства подхода

Выразительное описание поведения ивзаимодействияПростое конфигурированиеГибкое управления выполнениемМасштабируется локально и распределённоРаботает ,

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42

Page 122: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Достоинства подхода

Достоинства подхода

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

Простое конфигурированиеГибкое управления выполнениемМасштабируется локально и распределённоРаботает ,

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42

Page 123: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Достоинства подхода

Достоинства подхода

Выразительное описание поведения ивзаимодействияПростое конфигурирование

Гибкое управления выполнениемМасштабируется локально и распределённоРаботает ,

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42

Page 124: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Достоинства подхода

Достоинства подхода

Выразительное описание поведения ивзаимодействияПростое конфигурированиеГибкое управления выполнением

Масштабируется локально и распределённоРаботает ,

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42

Page 125: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Достоинства подхода

Достоинства подхода

Выразительное описание поведения ивзаимодействияПростое конфигурированиеГибкое управления выполнениемМасштабируется локально и распределённо

Работает ,

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42

Page 126: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Достоинства подхода

Достоинства подхода

Выразительное описание поведения ивзаимодействияПростое конфигурированиеГибкое управления выполнениемМасштабируется локально и распределённоРаботает ,

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42

Page 127: Потоковая обработка данных с помощью модели акторов (Actor Model)

Заключение Alan Kay on OOP, 1967

Alan Kay on OOP, 1967

I thought of objects being like biological cells and/orindividual computers on a network, only able tocommunicate with messages (so messaging came at thevery beginning – it took a while to see how to domessaging in a programming language efficiently enoughto be useful).OOP to me means only messaging, local retention andprotection and hiding of state-process, and extremelate-binding of all things. It can be done in Smalltalk andin LISP. There are possibly other systems in which this ispossible, but I’m not aware of them.

Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 42 / 42