Потоковая обработка данных с           помощью Actor Model                           Вадим Цесько                         ...
Введение    СистемаКласс системМы разрабатываем   Яндекс.Авто   Яндекс.Недвижимость   Яндекс.Работа Вадим Цесько (Яндекс) ...
Введение    СистемаКласс системМы разрабатываем   Яндекс.Авто   Яндекс.Недвижимость   Яндекс.РаботаETL-процесс: Вадим Цесь...
Введение    СистемаКласс системМы разрабатываем   Яндекс.Авто   Яндекс.Недвижимость   Яндекс.РаботаETL-процесс:  1 Extract...
Введение    СистемаКласс системМы разрабатываем   Яндекс.Авто   Яндекс.Недвижимость   Яндекс.РаботаETL-процесс:  1 Extract...
Введение    СистемаКласс системМы разрабатываем   Яндекс.Авто   Яндекс.Недвижимость   Яндекс.РаботаETL-процесс:  1 Extract...
Введение    СистемаСтатистикаДанные:    До 104 источников    До 107 сущностей    20% обновляется ежедневно    2x рост за г...
Введение    СистемаСтатистикаДанные:    До 104 источников    До 107 сущностей    20% обновляется ежедневно    2x рост за г...
Введение    СистемаБыло Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   4 / 42
Введение    СистемаЗа кадром      Кластер поисковых машин              Раскладка              Балансировка      Дополнител...
Введение    СистемаМотивация Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   6 / 42
Введение    СистемаМотивация      Масштабируемость с ростом объёма данных Вадим Цесько (Яндекс)   Потоковая обработка на A...
Введение    СистемаМотивация      Масштабируемость с ростом объёма данных      Инкрементальная индексация Вадим Цесько (Ян...
Введение    СистемаМотивация      Масштабируемость с ростом объёма данных      Инкрементальная индексация      (мягкий) re...
Введение    СистемаСтало Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   7 / 42
Введение    Распределённые системыСвойства must have Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model         12...
Введение    Распределённые системыСвойства must have      Масштабируемость Вадим Цесько (Яндекс)   Потоковая обработка на ...
Введение    Распределённые системыСвойства must have      Масштабируемость      Гибкость Вадим Цесько (Яндекс)   Потоковая...
Введение    Распределённые системыСвойства must have      Масштабируемость      Гибкость      Устойчивость к сбоям Вадим Ц...
Введение    Распределённые системыСвойства must have      Масштабируемость      Гибкость      Устойчивость к сбоям      Те...
Введение    Распределённые системыСвойства must have      Масштабируемость      Гибкость      Устойчивость к сбоям      Те...
Введение    Actor ModelПроисхождение      Carl Hewitt, Peter Bishop and Richard Steiger. A      Universal Modular Actor Fo...
Введение    Actor ModelПроисхождение      Carl Hewitt, Peter Bishop and Richard Steiger. A      Universal Modular Actor Fo...
Введение    Actor ModelПроисхождение      Carl Hewitt, Peter Bishop and Richard Steiger. A      Universal Modular Actor Fo...
Введение    Actor ModelПроисхождение      Carl Hewitt, Peter Bishop and Richard Steiger. A      Universal Modular Actor Fo...
Введение    Actor ModelЧто такое Actor      Всё это актор2  2   http://letitcrash.com/post/20964174345/carl-hewitt-explain...
Введение    Actor ModelЧто такое Actor      Всё это актор2      Функционируют параллельно  2   http://letitcrash.com/post/...
Введение    Actor ModelЧто такое Actor      Всё это актор2      Функционируют параллельно      Асинхронно обмениваются соо...
Введение    Actor ModelЧто такое Actor      Всё это актор2      Функционируют параллельно      Асинхронно обмениваются соо...
Введение    Actor ModelЧто такое Actor      Всё это актор2      Функционируют параллельно      Асинхронно обмениваются соо...
Введение    Actor ModelЧто такое Actor      Всё это актор2      Функционируют параллельно      Асинхронно обмениваются соо...
Введение    Actor ModelРеализации Actor Model  3      http://en.wikipedia.org/wiki/Actor_model Вадим Цесько (Яндекс)   Пот...
Введение    Actor ModelРеализации Actor ModelЯзыки3 с «родной» поддержкой:    Erlang    Scala    ...  3      http://en.wik...
Введение    Actor ModelРеализации Actor ModelЯзыки3 с «родной» поддержкой:    Erlang    Scala    ...Библиотеки для языков:...
Введение    Actor ModelРеализации Actor ModelЯзыки3 с «родной» поддержкой:    Erlang    Scala    ...Библиотеки для языков:...
Практика    AkkaО проектеJonas Bon´r:         e    Java Champion    Terracotta JVM clustering, JRockit JVM,    AspectWerkz...
Практика    AkkaО проектеJonas Bon´r:         e    Java Champion    Terracotta JVM clustering, JRockit JVM,    AspectWerkz...
Практика    AkkaО проектеJonas Bon´r:          e     Java Champion     Terracotta JVM clustering, JRockit JVM,     AspectW...
Практика    AkkaПроизводительностьВниманиеСинтетические тесты  4   http://letitcrash.com/post/14783691760/akka-vs-erlang  ...
Практика    AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 :  4   http://letitcrash....
Практика    AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 :    1M mps vs 2.1M mps  ...
Практика    AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 :    1M mps vs 2.1M mpsAk...
Практика    AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 :    1M mps vs 2.1M mpsAk...
Практика    AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 :    1M mps vs 2.1M mpsAk...
Практика    AkkaОсобенности реализации Actor Model Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 201...
Практика    AkkaОсобенности реализации Actor Model      300 байт на актор Вадим Цесько (Яндекс)   Потоковая обработка на A...
Практика    AkkaОсобенности реализации Actor Model      300 байт на актор      Актор: состояние, поведение, почтовый ящик,...
Практика    AkkaОсобенности реализации Actor Model      300 байт на актор      Актор: состояние, поведение, почтовый ящик,...
Практика    AkkaОсобенности реализации Actor Model      300 байт на актор      Актор: состояние, поведение, почтовый ящик,...
Практика    AkkaОсобенности реализации Actor Model      300 байт на актор      Актор: состояние, поведение, почтовый ящик,...
Практика    AkkaОсобенности реализации Actor Model      300 байт на актор      Актор: состояние, поведение, почтовый ящик,...
Практика    AkkaОсобенности реализации Actor Model      300 байт на актор      Актор: состояние, поведение, почтовый ящик,...
Практика    AkkaСсылки      Чисто локальные      Локальные ссылки      Ссылки для маршрутизации (Router)      Ссылки на уд...
Практика    AkkaСсылки      Чисто локальные      Локальные ссылки      Ссылки для маршрутизации (Router)      Ссылки на уд...
Практика    AkkaКонструирование ссылок      Создание акторов: ActorSystem.actorOf или      ActorContext.actorOf      Поиск...
Практика    AkkaКонструирование ссылок          Создание акторов: ActorSystem.actorOf или          ActorContext.actorOf   ...
Практика    AkkaИменование в локальной системе Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г....
Практика    AkkaПутиТипы путей:   Логический   Физический Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 ...
Практика    AkkaПутиТипы путей:    Логический    ФизическийОсобые пути:    /user    /system    /deadLetters    /temp    /r...
Практика    AkkaУдалённое развёртывание Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   19 /...
Практика    AkkaActor Best Practices Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   20 / 42
Практика    AkkaActor Best Practices      Не блокироваться Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12...
Практика    AkkaActor Best Practices      Не блокироваться      Неизменяемые сообщения Вадим Цесько (Яндекс)   Потоковая о...
Практика    AkkaActor Best Practices      Не блокироваться      Неизменяемые сообщения      Нет разделяемому состоянию Вад...
Практика    AkkaActor Best Practices      Не блокироваться      Неизменяемые сообщения      Нет разделяемому состоянию    ...
Практика    AkkaActor Best Practices      Не блокироваться      Неизменяемые сообщения      Нет разделяемому состоянию    ...
Практика    AkkaИспользуемые фичи      Actors      Logging      Scheduler      Dispatchers      Routing      Remoting     ...
Практика    AkkaНеиспользуемые фичи      Typed Actors      Event Bus      Futures      Dataflow Concurrency      STM      A...
Практика    Примеры Определение актора 1   class Partitioner(partitionStorage: ActorRef) extends Actor { 2 3       lazy va...
Практика    Примеры Создание актора 1   val system = ActorSystem("sharder") 2 3   val partitionStorage = ... 4 5   val par...
Практика    Примеры Конфигурация диспетчера     Конфигурация в HOCON6 : 1   dispatcher { 2     cpu { 3       type = Dispat...
Практика    ПримерыДиспетчеры и ящикиДиспетчеры:    Dispatcher    PinnedDispatcher    BalancingDispatcher    CallingThread...
Практика    ПримерыКонфигурация маршрутизатора1   akka.actor.deployment {2     /partitioner {3       router = smallest-mai...
Практика    ПримерыМаршрутизаторы      RoundRobinRouter      RandomRouter      SmallestMailboxRouter      BroadcastRouter ...
Практика    ПримерыКонфигурирование из кода1   val shardActors =2     shards.map(system.actorFor(_)).toIndexedSeq34   val ...
Практика    Примеры Распределённые акторы 1   akka { 2     actor { 3       provider = "akka.remote.RemoteActorRefProvider"...
Практика    Примеры Пример теста 1   val probe = TestProbe() 2   val burstScaler = TestActorRef(new BurstScaler(probe.ref)...
Практика    ПримерыТестирование акторов Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   32 /...
Практика    ПримерыТестирование акторов      Модульное тестирование с TestActorRef Вадим Цесько (Яндекс)   Потоковая обраб...
Практика    ПримерыТестирование акторов      Модульное тестирование с TestActorRef      Интеграционное тестирование с Prob...
Практика    ПримерыТестирование акторов      Модульное тестирование с TestActorRef      Интеграционное тестирование с Prob...
Практика    ПримерыТестирование акторов      Модульное тестирование с TestActorRef      Интеграционное тестирование с Prob...
Практика    ПримерыТестирование акторов      Модульное тестирование с TestActorRef      Интеграционное тестирование с Prob...
Практика    ПримерыТестирование акторов      Модульное тестирование с TestActorRef      Интеграционное тестирование с Prob...
Практика    ПримерыСупервизорРешение при сбое:  1 Resume  2 Restart  3 Stop  4 Escalate Вадим Цесько (Яндекс)   Потоковая ...
Практика    ПримерыСупервизорРешение при сбое:  1 Resume  2 Restart  3 Stop  4 Escalate      Принятое решение (1-3) действ...
Практика    ПримерыСупервизорРешение при сбое:  1 Resume  2 Restart  3 Stop  4 Escalate      Принятое решение (1-3) действ...
Практика    ПримерыСупервизорРешение при сбое:  1 Resume  2 Restart  3 Stop  4 Escalate      Принятое решение (1-3) действ...
Практика    ПримерыСупервизорРешение при сбое:  1 Resume  2 Restart  3 Stop  4 Escalate      Принятое решение (1-3) действ...
Практика    ПримерыСупервизорРешение при сбое:  1 Resume  2 Restart  3 Stop  4 Escalate      Принятое решение (1-3) действ...
Практика    ПримерыСупервизор по умолчанию1   final val defaultStrategy: SupervisorStrategy = {2     def defaultDecider: De...
Практика    ПримерыНаблюдаемость      Typesafe Console для мониторинга Вадим Цесько (Яндекс)   Потоковая обработка на Acto...
Практика    ПримерыНаблюдаемость      Typesafe Console для мониторинга      Graphite + statsd + statsd-over-slf4j Вадим Це...
Практика    ПримерыСвойства must have Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   36 / 42
Практика    ПримерыСвойства must have      Масштабируемость Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   1...
Практика    ПримерыСвойства must have      Масштабируемость      Гибкость Вадим Цесько (Яндекс)   Потоковая обработка на A...
Практика    ПримерыСвойства must have      Масштабируемость      Гибкость      Устойчивость к сбоям Вадим Цесько (Яндекс) ...
Практика    ПримерыСвойства must have      Масштабируемость      Гибкость      Устойчивость к сбоям      Тестируемость Вад...
Практика    ПримерыСвойства must have      Масштабируемость      Гибкость      Устойчивость к сбоям      Тестируемость    ...
Практика    ОпытАкторы Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   37 / 42
Практика    ОпытАкторы      Храните состояние вовне Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 20...
Практика    ОпытАкторы      Храните состояние вовне      Стройте всю систему на акторах Вадим Цесько (Яндекс)   Потоковая ...
Практика    ОпытАкторы      Храните состояние вовне      Стройте всю систему на акторах      Пишите асинхронный код Вадим ...
Практика    ОпытАкторы      Храните состояние вовне      Стройте всю систему на акторах      Пишите асинхронный код      И...
Практика    ОпытАкторы      Храните состояние вовне      Стройте всю систему на акторах      Пишите асинхронный код      И...
Практика    ОпытПамять и ящики  7   http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2 Вадим Цесько (Янде...
Практика    ОпытПамять и ящики      Неограниченные ящики ⇒ неограниченная память      при перегрузке  7   http://letitcras...
Практика    ОпытПамять и ящики      Неограниченные ящики ⇒ неограниченная память      при перегрузке      Ограниченные ящи...
Практика    ОпытПамять и ящики      Неограниченные ящики ⇒ неограниченная память      при перегрузке      Ограниченные ящи...
Практика    ОпытПамять и ящики      Неограниченные ящики ⇒ неограниченная память      при перегрузке      Ограниченные ящи...
Практика    ОпытПамять и ящики      Неограниченные ящики ⇒ неограниченная память      при перегрузке      Ограниченные ящи...
Практика    ОпытУдалённые акторы Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   39 / 42
Практика    ОпытУдалённые акторы      Remote deploy пока не работает в полной мере Вадим Цесько (Яндекс)   Потоковая обраб...
Практика    ОпытУдалённые акторы      Remote deploy пока не работает в полной мере      На клиенте нужно иметь код удалённ...
Практика    ОпытУдалённые акторы      Remote deploy пока не работает в полной мере      На клиенте нужно иметь код удалённ...
Заключение    Недостатки реализацииНедостатки реализации Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model       ...
Заключение    Недостатки реализацииНедостатки реализации      Отсутствует явная структура системы Вадим Цесько (Яндекс)   ...
Заключение    Недостатки реализацииНедостатки реализации      Отсутствует явная структура системы      Нет статической про...
Заключение    Недостатки реализацииНедостатки реализации      Отсутствует явная структура системы      Нет статической про...
Заключение    Недостатки реализацииНедостатки реализации      Отсутствует явная структура системы      Нет статической про...
Заключение    Достоинства подходаДостоинства подхода Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model      12 ма...
Заключение    Достоинства подходаДостоинства подхода      Выразительное описание поведения и      взаимодействия Вадим Цес...
Заключение    Достоинства подходаДостоинства подхода      Выразительное описание поведения и      взаимодействия      Прос...
Заключение    Достоинства подходаДостоинства подхода      Выразительное описание поведения и      взаимодействия      Прос...
Заключение    Достоинства подходаДостоинства подхода      Выразительное описание поведения и      взаимодействия      Прос...
Заключение    Достоинства подходаДостоинства подхода      Выразительное описание поведения и      взаимодействия      Прос...
Заключение    Alan Kay on OOP, 1967Alan Kay on OOP, 1967I thought of objects being like biological cells and/orindividual ...
Upcoming SlideShare
Loading in …5
×

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

4,515 views

Published on

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

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

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,515
On SlideShare
0
From Embeds
0
Number of Embeds
2,228
Actions
Shares
0
Downloads
36
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

  1. 1. Потоковая обработка данных с помощью Actor Model Вадим Цесько incubos@yandex.ru twitter.com/incubos 12 мая 2012 г.Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 1 / 42
  2. 2. Введение СистемаКласс системМы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.Работа Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  3. 3. Введение СистемаКласс системМы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.РаботаETL-процесс: Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  4. 4. Введение СистемаКласс системМы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.РаботаETL-процесс: 1 Extract — загрузка внешних данных Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  5. 5. Введение СистемаКласс системМы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.РаботаETL-процесс: 1 Extract — загрузка внешних данных 2 Transform — унификация, кластеризация, ... Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  6. 6. Введение СистемаКласс системМы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.РаботаETL-процесс: 1 Extract — загрузка внешних данных 2 Transform — унификация, кластеризация, ... 3 Load — построение и раскладка индекса Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  7. 7. Введение СистемаСтатистикаДанные: До 104 источников До 107 сущностей 20% обновляется ежедневно 2x рост за год 1 http://stat.yandex.ru Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 3 / 42
  8. 8. Введение СистемаСтатистикаДанные: До 104 источников До 107 сущностей 20% обновляется ежедневно 2x рост за годПользователи1 : Яндекс.Авто — 4.5 млн. чел. Яндекс.Недвижимость — 2 млн. чел. Яндекс.Работа — 3.3 млн. чел. 1 http://stat.yandex.ru Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 3 / 42
  9. 9. Введение СистемаБыло Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 4 / 42
  10. 10. Введение СистемаЗа кадром Кластер поисковых машин Раскладка Балансировка Дополнительные процессы и данные Статистика Картинки Цены Качество Админки/партнёрки История Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 5 / 42
  11. 11. Введение СистемаМотивация Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42
  12. 12. Введение СистемаМотивация Масштабируемость с ростом объёма данных Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42
  13. 13. Введение СистемаМотивация Масштабируемость с ростом объёма данных Инкрементальная индексация Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42
  14. 14. Введение СистемаМотивация Масштабируемость с ростом объёма данных Инкрементальная индексация (мягкий) real-time Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42
  15. 15. Введение СистемаСтало Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 7 / 42
  16. 16. Введение Распределённые системыСвойства must have Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  17. 17. Введение Распределённые системыСвойства must have Масштабируемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  18. 18. Введение Распределённые системыСвойства must have Масштабируемость Гибкость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  19. 19. Введение Распределённые системыСвойства must have Масштабируемость Гибкость Устойчивость к сбоям Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  20. 20. Введение Распределённые системыСвойства must have Масштабируемость Гибкость Устойчивость к сбоям Тестируемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  21. 21. Введение Распределённые системыСвойства must have Масштабируемость Гибкость Устойчивость к сбоям Тестируемость Наблюдаемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  22. 22. Введение Actor ModelПроисхождение Carl Hewitt, Peter Bishop and Richard Steiger. A Universal Modular Actor Formalism for Artificial Intelligence. 1973. Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 9 / 42
  23. 23. Введение Actor ModelПроисхождение Carl Hewitt, Peter Bishop and Richard Steiger. A Universal Modular Actor Formalism for Artificial Intelligence. 1973. Изначально для описания параллельных вычислений Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 9 / 42
  24. 24. Введение Actor ModelПроисхождение Carl Hewitt, Peter Bishop and Richard Steiger. A Universal Modular Actor Formalism for Artificial Intelligence. 1973. Изначально для описания параллельных вычислений Позднее основа для реализаций Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 9 / 42
  25. 25. Введение Actor ModelПроисхождение Carl Hewitt, Peter Bishop and Richard Steiger. A Universal Modular Actor Formalism for Artificial Intelligence. 1973. Изначально для описания параллельных вычислений Позднее основа для реализацийDon’t panicАлгебры, логики, семантики и остальное оставим закадром. Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 9 / 42
  26. 26. Введение Actor ModelЧто такое Actor Всё это актор2 2 http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42
  27. 27. Введение Actor ModelЧто такое Actor Всё это актор2 Функционируют параллельно 2 http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42
  28. 28. Введение Actor ModelЧто такое Actor Всё это актор2 Функционируют параллельно Асинхронно обмениваются сообщениями 2 http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42
  29. 29. Введение Actor ModelЧто такое Actor Всё это актор2 Функционируют параллельно Асинхронно обмениваются сообщениями При обработке сообщения актор может отправить конечное число сообщений другим акторам создать конечное число новых акторов назначить поведение для обработки следующего сообщения 2 http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42
  30. 30. Введение Actor ModelЧто такое Actor Всё это актор2 Функционируют параллельно Асинхронно обмениваются сообщениями При обработке сообщения актор может отправить конечное число сообщений другим акторам создать конечное число новых акторов назначить поведение для обработки следующего сообщения Порядок доставки сообщений не специфицирован 2 http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42
  31. 31. Введение Actor ModelЧто такое Actor Всё это актор2 Функционируют параллельно Асинхронно обмениваются сообщениями При обработке сообщения актор может отправить конечное число сообщений другим акторам создать конечное число новых акторов назначить поведение для обработки следующего сообщения Порядок доставки сообщений не специфицирован Акторы имеют «адреса» 2 http://letitcrash.com/post/20964174345/carl-hewitt-explains-the-essence-of-the-actor Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 10 / 42
  32. 32. Введение Actor ModelРеализации Actor Model 3 http://en.wikipedia.org/wiki/Actor_model Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42
  33. 33. Введение Actor ModelРеализации Actor ModelЯзыки3 с «родной» поддержкой: Erlang Scala ... 3 http://en.wikipedia.org/wiki/Actor_model Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42
  34. 34. Введение Actor ModelРеализации Actor ModelЯзыки3 с «родной» поддержкой: Erlang Scala ...Библиотеки для языков: Scala Java F# ... 3 http://en.wikipedia.org/wiki/Actor_model Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42
  35. 35. Введение Actor ModelРеализации Actor ModelЯзыки3 с «родной» поддержкой: Erlang Scala ...Библиотеки для языков: Scala Java F# ...Мы выбралиAkka (Scala API). 3 http://en.wikipedia.org/wiki/Actor_model Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42
  36. 36. Практика AkkaО проектеJonas Bon´r: e Java Champion Terracotta JVM clustering, JRockit JVM, AspectWerkz AOP, Eclipse AspectJ Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 12 / 42
  37. 37. Практика AkkaО проектеJonas Bon´r: e Java Champion Terracotta JVM clustering, JRockit JVM, AspectWerkz AOP, Eclipse AspectJРесурсы: http://akka.io/docs/ http://letitcrash.com/ Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 12 / 42
  38. 38. Практика AkkaО проектеJonas Bon´r: e Java Champion Terracotta JVM clustering, JRockit JVM, AspectWerkz AOP, Eclipse AspectJРесурсы: http://akka.io/docs/ http://letitcrash.com/Код: https://github.com/akka/akka Apache V2 license Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 12 / 42
  39. 39. Практика AkkaПроизводительностьВниманиеСинтетические тесты 4 http://letitcrash.com/post/14783691760/akka-vs-erlang 5 http://letitcrash.com/post/20397701710/50-million-messages-per-second-on-a-single-machine Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42
  40. 40. Практика AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 : 4 http://letitcrash.com/post/14783691760/akka-vs-erlang 5 http://letitcrash.com/post/20397701710/50-million-messages-per-second-on-a-single-machine Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42
  41. 41. Практика AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 : 1M mps vs 2.1M mps 4 http://letitcrash.com/post/14783691760/akka-vs-erlang 5 http://letitcrash.com/post/20397701710/50-million-messages-per-second-on-a-single-machine Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42
  42. 42. Практика AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 : 1M mps vs 2.1M mpsAkka 2.05 : 4 http://letitcrash.com/post/14783691760/akka-vs-erlang 5 http://letitcrash.com/post/20397701710/50-million-messages-per-second-on-a-single-machine Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42
  43. 43. Практика AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 : 1M mps vs 2.1M mpsAkka 2.05 : 50M mps 4 http://letitcrash.com/post/14783691760/akka-vs-erlang 5 http://letitcrash.com/post/20397701710/50-million-messages-per-second-on-a-single-machine Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42
  44. 44. Практика AkkaПроизводительностьВниманиеСинтетические тестыErlang R14B04 vs Akka 2.0-SNAPSHOT4 : 1M mps vs 2.1M mpsAkka 2.05 : 50M mps 48-core, 128 GB, ForkJoinPool 4 http://letitcrash.com/post/14783691760/akka-vs-erlang 5 http://letitcrash.com/post/20397701710/50-million-messages-per-second-on-a-single-machine Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 13 / 42
  45. 45. Практика AkkaОсобенности реализации Actor Model Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  46. 46. Практика AkkaОсобенности реализации Actor Model 300 байт на актор Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  47. 47. Практика AkkaОсобенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  48. 48. Практика AkkaОсобенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  49. 49. Практика AkkaОсобенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Нет гарантированной доставки, семантика at-most-once, порядок сохраняется Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  50. 50. Практика AkkaОсобенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Нет гарантированной доставки, семантика at-most-once, порядок сохраняется Сообщения обрабатываются строго по порядку Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  51. 51. Практика AkkaОсобенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Нет гарантированной доставки, семантика at-most-once, порядок сохраняется Сообщения обрабатываются строго по порядку Иерархия: создаваемые акторы — дети, родитель — супервизор Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  52. 52. Практика AkkaОсобенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Нет гарантированной доставки, семантика at-most-once, порядок сохраняется Сообщения обрабатываются строго по порядку Иерархия: создаваемые акторы — дети, родитель — супервизор Актор скрыт за переносимой ActorRef Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  53. 53. Практика AkkaСсылки Чисто локальные Локальные ссылки Ссылки для маршрутизации (Router) Ссылки на удалённых акторов Особые: PromiseActorRef, DeadLetterActorRef, EmptyLocalActorRef (DeadLetterActorRef) Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 15 / 42
  54. 54. Практика AkkaСсылки Чисто локальные Локальные ссылки Ссылки для маршрутизации (Router) Ссылки на удалённых акторов Особые: PromiseActorRef, DeadLetterActorRef, EmptyLocalActorRef (DeadLetterActorRef)Примеры путей akka://system/user/service/worker akka://system@server.yandex.ru:2552/user/service Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 15 / 42
  55. 55. Практика AkkaКонструирование ссылок Создание акторов: ActorSystem.actorOf или ActorContext.actorOf Поиск акторов: ActorSystem.actorFor или ActorContext.actorFor Каждый актор знает себя, родителя и детей Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 16 / 42
  56. 56. Практика 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
  57. 57. Практика AkkaИменование в локальной системе Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 17 / 42
  58. 58. Практика AkkaПутиТипы путей: Логический Физический Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 18 / 42
  59. 59. Практика AkkaПутиТипы путей: Логический ФизическийОсобые пути: /user /system /deadLetters /temp /remote Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 18 / 42
  60. 60. Практика AkkaУдалённое развёртывание Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 19 / 42
  61. 61. Практика AkkaActor Best Practices Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  62. 62. Практика AkkaActor Best Practices Не блокироваться Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  63. 63. Практика AkkaActor Best Practices Не блокироваться Неизменяемые сообщения Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  64. 64. Практика AkkaActor Best Practices Не блокироваться Неизменяемые сообщения Нет разделяемому состоянию Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  65. 65. Практика AkkaActor Best Practices Не блокироваться Неизменяемые сообщения Нет разделяемому состоянию «Опасные» подзадачи в дочерние акторы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  66. 66. Практика AkkaActor Best Practices Не блокироваться Неизменяемые сообщения Нет разделяемому состоянию «Опасные» подзадачи в дочерние акторы События жизненного цикла Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  67. 67. Практика AkkaИспользуемые фичи Actors Logging Scheduler Dispatchers Routing Remoting Serialization Testing FSM Fault Tolerance Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 21 / 42
  68. 68. Практика AkkaНеиспользуемые фичи Typed Actors Event Bus Futures Dataflow Concurrency STM Agents Transactors Durable Mailboxes (file, Redis, ZooKeeper, Mongo) Akka Cluster Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 22 / 42
  69. 69. Практика Примеры Определение актора 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 }1112 def partition(partner: Partner, offers: Traversable[Offer]) {13 ...1415 partitionStorage ! UpdatePartitions(partner, partitioning)16 }17 } Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 23 / 42
  70. 70. Практика Примеры Создание актора 1 val system = ActorSystem("sharder") 2 3 val partitionStorage = ... 4 5 val partitioner = system.actorOf(Props( 6 new Partitioner( 7 partitionStorage 8 )).withDispatcher("dispatcher.cpu") 9 .withRouter(FromConfig()),10 "partitioner") Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 24 / 42
  71. 71. Практика Примеры Конфигурация диспетчера Конфигурация в HOCON6 : 1 dispatcher { 2 cpu { 3 type = Dispatcher 4 executor = "fork-join-executor" 5 mailbox-capacity = 4 6 mailbox-push-timeout-time = 5m 7 8 fork-join-executor { 9 parallelism-min = 410 parallelism-factor = 1.011 }12 }13 } 6 Human-Optimized Config Object Notation: https://github.com/typesafehub/config Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 25 / 42
  72. 72. Практика ПримерыДиспетчеры и ящикиДиспетчеры: Dispatcher PinnedDispatcher BalancingDispatcher CallingThreadDispatcherПочтовые ящики: UnboundedMailbox BoundedMailbox UnboundedPriorityMailbox BoundedPriorityMailbox Durable Mailboxes Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 26 / 42
  73. 73. Практика ПримерыКонфигурация маршрутизатора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
  74. 74. Практика ПримерыМаршрутизаторы RoundRobinRouter RandomRouter SmallestMailboxRouter BroadcastRouter ScatterGatherFirstCompletedRouter Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 28 / 42
  75. 75. Практика ПримерыКонфигурирование из кода1 val shardActors =2 shards.map(system.actorFor(_)).toIndexedSeq34 val shard = system.actorOf(5 Props[PartitionReceiver]6 .withRouter(RoundRobinRouter(shardActors))7 .withDispatcher("dispatcher.shard"),8 "shard") Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 29 / 42
  76. 76. Практика Примеры Распределённые акторы 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
  77. 77. Практика Примеры Пример теста 1 val probe = TestProbe() 2 val burstScaler = TestActorRef(new BurstScaler(probe.ref)) 3 4 before { 5 burstScaler.underlyingActor.sent = 6 burstScaler.underlyingActor.sent.empty 7 } 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
  78. 78. Практика ПримерыТестирование акторов Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  79. 79. Практика ПримерыТестирование акторов Модульное тестирование с TestActorRef Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  80. 80. Практика ПримерыТестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  81. 81. Практика ПримерыТестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Проверки с сопоставлением по шаблону Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  82. 82. Практика ПримерыТестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Проверки с сопоставлением по шаблону Замедление времени Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  83. 83. Практика ПримерыТестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Проверки с сопоставлением по шаблону Замедление времени Детализированные логи akka.actor.debug.* Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  84. 84. Практика ПримерыТестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Проверки с сопоставлением по шаблону Замедление времени Детализированные логи akka.actor.debug.* CallingThreadDispatcher Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  85. 85. Практика ПримерыСупервизорРешение при сбое: 1 Resume 2 Restart 3 Stop 4 Escalate Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42
  86. 86. Практика ПримерыСупервизорРешение при сбое: 1 Resume 2 Restart 3 Stop 4 Escalate Принятое решение (1-3) действует рекурсивно Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42
  87. 87. Практика ПримерыСупервизорРешение при сбое: 1 Resume 2 Restart 3 Stop 4 Escalate Принятое решение (1-3) действует рекурсивно Функция Exception ⇒ Directive Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42
  88. 88. Практика ПримерыСупервизорРешение при сбое: 1 Resume 2 Restart 3 Stop 4 Escalate Принятое решение (1-3) действует рекурсивно Функция Exception ⇒ Directive Terminated, preStart, preRestart, postStop, postRestart Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42
  89. 89. Практика ПримерыСупервизорРешение при сбое: 1 Resume 2 Restart 3 Stop 4 Escalate Принятое решение (1-3) действует рекурсивно Функция Exception ⇒ Directive Terminated, preStart, preRestart, postStop, postRestart OneForOneStrategy и AllForOneStrategy Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42
  90. 90. Практика ПримерыСупервизорРешение при сбое: 1 Resume 2 Restart 3 Stop 4 Escalate Принятое решение (1-3) действует рекурсивно Функция Exception ⇒ Directive Terminated, preStart, preRestart, postStop, postRestart OneForOneStrategy и AllForOneStrategy Ограничение количества перезапусков Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42
  91. 91. Практика ПримерыСупервизор по умолчанию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
  92. 92. Практика ПримерыНаблюдаемость Typesafe Console для мониторинга Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 35 / 42
  93. 93. Практика ПримерыНаблюдаемость Typesafe Console для мониторинга Graphite + statsd + statsd-over-slf4j Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 35 / 42
  94. 94. Практика ПримерыСвойства must have Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  95. 95. Практика ПримерыСвойства must have Масштабируемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  96. 96. Практика ПримерыСвойства must have Масштабируемость Гибкость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  97. 97. Практика ПримерыСвойства must have Масштабируемость Гибкость Устойчивость к сбоям Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  98. 98. Практика ПримерыСвойства must have Масштабируемость Гибкость Устойчивость к сбоям Тестируемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  99. 99. Практика ПримерыСвойства must have Масштабируемость Гибкость Устойчивость к сбоям Тестируемость Наблюдаемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  100. 100. Практика ОпытАкторы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  101. 101. Практика ОпытАкторы Храните состояние вовне Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  102. 102. Практика ОпытАкторы Храните состояние вовне Стройте всю систему на акторах Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  103. 103. Практика ОпытАкторы Храните состояние вовне Стройте всю систему на акторах Пишите асинхронный код Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  104. 104. Практика ОпытАкторы Храните состояние вовне Стройте всю систему на акторах Пишите асинхронный код Избегайте косвенного взаимодействия акторов Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  105. 105. Практика ОпытАкторы Храните состояние вовне Стройте всю систему на акторах Пишите асинхронный код Избегайте косвенного взаимодействия акторов Баги есть, но быстро чинят Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  106. 106. Практика ОпытПамять и ящики 7 http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  107. 107. Практика ОпытПамять и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке 7 http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  108. 108. Практика ОпытПамять и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке Ограниченные ящики ⇒ возможные deadlock’и при наличии циклов 7 http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  109. 109. Практика ОпытПамять и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке Ограниченные ящики ⇒ возможные deadlock’и при наличии циклов ⇒ стройте системы без циклов 7 http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  110. 110. Практика ОпытПамять и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке Ограниченные ящики ⇒ возможные deadlock’и при наличии циклов ⇒ стройте системы без циклов Существует диспетчер по умолчанию 7 http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  111. 111. Практика ОпытПамять и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке Ограниченные ящики ⇒ возможные deadlock’и при наличии циклов ⇒ стройте системы без циклов Существует диспетчер по умолчанию Нет доступа к размеру ящика7 7 http://letitcrash.com/post/17707262394/why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  112. 112. Практика ОпытУдалённые акторы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42
  113. 113. Практика ОпытУдалённые акторы Remote deploy пока не работает в полной мере Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42
  114. 114. Практика ОпытУдалённые акторы Remote deploy пока не работает в полной мере На клиенте нужно иметь код удалённо развёртываемого актора (WTF?!) Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42
  115. 115. Практика ОпытУдалённые акторы Remote deploy пока не работает в полной мере На клиенте нужно иметь код удалённо развёртываемого актора (WTF?!) Маршрутизатор smallest-mailbox не работает для удалённых акторов Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42
  116. 116. Заключение Недостатки реализацииНедостатки реализации Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  117. 117. Заключение Недостатки реализацииНедостатки реализации Отсутствует явная структура системы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  118. 118. Заключение Недостатки реализацииНедостатки реализации Отсутствует явная структура системы Нет статической проверки протоколов Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  119. 119. Заключение Недостатки реализацииНедостатки реализации Отсутствует явная структура системы Нет статической проверки протоколов Пока неполноценная реализация удалённого деплоя и апгрейда Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  120. 120. Заключение Недостатки реализацииНедостатки реализации Отсутствует явная структура системы Нет статической проверки протоколов Пока неполноценная реализация удалённого деплоя и апгрейда Нет развитых средств анализа производительности системы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  121. 121. Заключение Достоинства подходаДостоинства подхода Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  122. 122. Заключение Достоинства подходаДостоинства подхода Выразительное описание поведения и взаимодействия Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  123. 123. Заключение Достоинства подходаДостоинства подхода Выразительное описание поведения и взаимодействия Простое конфигурирование Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  124. 124. Заключение Достоинства подходаДостоинства подхода Выразительное описание поведения и взаимодействия Простое конфигурирование Гибкое управления выполнением Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  125. 125. Заключение Достоинства подходаДостоинства подхода Выразительное описание поведения и взаимодействия Простое конфигурирование Гибкое управления выполнением Масштабируется локально и распределённо Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  126. 126. Заключение Достоинства подходаДостоинства подхода Выразительное описание поведения и взаимодействия Простое конфигурирование Гибкое управления выполнением Масштабируется локально и распределённо Работает Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  127. 127. Заключение Alan Kay on OOP, 1967Alan Kay on OOP, 1967I 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

×