SlideShare ist ein Scribd-Unternehmen logo
1 von 127
Downloaden Sie, um offline zu lesen
Потоковая обработка данных с
           помощью Actor Model

                           Вадим Цесько
                         incubos@yandex.ru
                        twitter.com/incubos




                            12 мая 2012 г.

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



Класс систем

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




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



Класс систем

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




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



Класс систем

Мы разрабатываем
   Яндекс.Авто
   Яндекс.Недвижимость
   Яндекс.Работа
ETL-процесс:
  1 Extract — загрузка внешних данных




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



Класс систем

Мы разрабатываем
   Яндекс.Авто
   Яндекс.Недвижимость
   Яндекс.Работа
ETL-процесс:
  1 Extract — загрузка внешних данных
  2 Transform — унификация, кластеризация, ...



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



Класс систем

Мы разрабатываем
   Яндекс.Авто
   Яндекс.Недвижимость
   Яндекс.Работа
ETL-процесс:
  1 Extract — загрузка внешних данных
  2 Transform — унификация, кластеризация, ...
  3 Load — построение и раскладка индекса


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



Статистика

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




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



Статистика

Данные:
    До 104 источников
    До 107 сущностей
    20% обновляется ежедневно
    2x рост за год
Пользователи1 :
    Яндекс.Авто — 4.5 млн. чел.
    Яндекс.Недвижимость — 2 млн. чел.
    Яндекс.Работа — 3.3 млн. чел.

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



Было




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



За кадром

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



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



Мотивация




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



Мотивация



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




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



Мотивация



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




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



Мотивация



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




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



Стало




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



Свойства must have




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



Свойства must have


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




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



Свойства must have


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




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



Свойства must have


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




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



Свойства must have


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




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



Свойства must have


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




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



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

      Carl Hewitt, Peter Bishop and Richard Steiger. A
      Universal Modular Actor Formalism for Artificial
      Intelligence. 1973.




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



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

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




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



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

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




 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   9 / 42
Введение    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
Введение    Actor Model



Что такое Actor

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




  2
   http://letitcrash.com/post/20964174345/
carl-hewitt-explains-the-essence-of-the-actor
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   10 / 42
Введение    Actor Model



Что такое Actor

      Всё это актор2
      Функционируют параллельно




  2
   http://letitcrash.com/post/20964174345/
carl-hewitt-explains-the-essence-of-the-actor
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   10 / 42
Введение    Actor Model



Что такое Actor

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




  2
   http://letitcrash.com/post/20964174345/
carl-hewitt-explains-the-essence-of-the-actor
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   10 / 42
Введение    Actor Model



Что такое Actor

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




  2
   http://letitcrash.com/post/20964174345/
carl-hewitt-explains-the-essence-of-the-actor
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   10 / 42
Введение    Actor Model



Что такое Actor

      Всё это актор2
      Функционируют параллельно
      Асинхронно обмениваются сообщениями
      При обработке сообщения актор может
              отправить конечное число сообщений другим акторам
              создать конечное число новых акторов
              назначить поведение для обработки следующего
              сообщения
      Порядок доставки сообщений не специфицирован


  2
   http://letitcrash.com/post/20964174345/
carl-hewitt-explains-the-essence-of-the-actor
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   10 / 42
Введение    Actor Model



Что такое Actor

      Всё это актор2
      Функционируют параллельно
      Асинхронно обмениваются сообщениями
      При обработке сообщения актор может
              отправить конечное число сообщений другим акторам
              создать конечное число новых акторов
              назначить поведение для обработки следующего
              сообщения
      Порядок доставки сообщений не специфицирован
      Акторы имеют «адреса»
  2
   http://letitcrash.com/post/20964174345/
carl-hewitt-explains-the-essence-of-the-actor
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   10 / 42
Введение    Actor Model



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




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



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




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



Реализации Actor Model
Языки3 с «родной» поддержкой:
    Erlang
    Scala
    ...
Библиотеки для языков:
    Scala
    Java
    F#
    ...


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



О проекте
Jonas Bon´r:
         e
    Java Champion
    Terracotta JVM clustering, JRockit JVM,
    AspectWerkz AOP, Eclipse AspectJ




 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   12 / 42
Практика    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
Практика    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
Практика    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
Практика    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
Практика    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
Практика    Akka



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

Внимание
Синтетические тесты
Erlang R14B04 vs Akka 2.0-SNAPSHOT4 :
    1M mps vs 2.1M mps
Akka 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
Практика    Akka



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

Внимание
Синтетические тесты
Erlang R14B04 vs Akka 2.0-SNAPSHOT4 :
    1M mps vs 2.1M mps
Akka 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
Практика    Akka



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

Внимание
Синтетические тесты
Erlang R14B04 vs Akka 2.0-SNAPSHOT4 :
    1M mps vs 2.1M mps
Akka 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
Практика    Akka



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




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



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

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




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



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

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




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



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

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




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



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

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




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



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

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




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



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

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


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



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

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

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



Ссылки

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




 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   15 / 42
Практика    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
Практика    Akka



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

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




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



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

          Создание акторов: ActorSystem.actorOf или
          ActorContext.actorOf
          Поиск акторов: ActorSystem.actorFor или
          ActorContext.actorFor
          Каждый актор знает себя, родителя и детей
    Можно делать так:
1   context.actorFor("../brother") ! msg
2   context.actorFor("/user/service") ! msg
3   context.actorSelection("../*") ! msg



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



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




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



Пути

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




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



Пути

Типы путей:
    Логический
    Физический
Особые пути:
    /user
    /system
    /deadLetters
    /temp
    /remote


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



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




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



Actor Best Practices




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



Actor Best Practices


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




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



Actor Best Practices


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




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



Actor Best Practices


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




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



Actor Best Practices


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




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



Actor Best Practices


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




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



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

      Actors
      Logging
      Scheduler
      Dispatchers
      Routing
      Remoting
      Serialization
      Testing
      FSM
      Fault Tolerance

 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   21 / 42
Практика    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
Практика    Примеры



 Определение актора
 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
Практика    Примеры



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

 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
Практика    Примеры



 Конфигурация диспетчера
     Конфигурация в 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 = 4
10              parallelism-factor = 1.0
11            }
12       }
13   }
          6
        Human-Optimized Config Object Notation:
     https://github.com/typesafehub/config
         Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   25 / 42
Практика    Примеры



Диспетчеры и ящики
Диспетчеры:
    Dispatcher
    PinnedDispatcher
    BalancingDispatcher
    CallingThreadDispatcher
Почтовые ящики:
    UnboundedMailbox
    BoundedMailbox
    UnboundedPriorityMailbox
    BoundedPriorityMailbox
    Durable Mailboxes
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   26 / 42
Практика    Примеры



Конфигурация маршрутизатора
1   akka.actor.deployment {
2     /partitioner {
3       router = smallest-mailbox
4       nr-of-instances = 4
5     }
6   }

1   akka.actor.deployment {
2     /unifier {
3       router = round-robin
4       resizer {
5         lower-bound = 2
6         upper-bound = 16
7       }
8     }
9   }

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



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


      RoundRobinRouter
      RandomRouter
      SmallestMailboxRouter
      BroadcastRouter
      ScatterGatherFirstCompletedRouter




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



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


1   val shardActors =
2     shards.map(system.actorFor(_)).toIndexedSeq
3
4   val shard = system.actorOf(
5     Props[PartitionReceiver]
6         .withRouter(RoundRobinRouter(shardActors))
7         .withDispatcher("dispatcher.shard"),
8     "shard")




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



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

 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 = 2553
12           }
13       }
14   }


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



 Пример теста
 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 ! 1
13         probe.expectMsg(1)
14       }
15     }
16   }

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



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




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



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


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




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



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


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




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



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


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




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



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


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




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



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


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




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



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


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




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



Супервизор
Решение при сбое:
  1 Resume
  2 Restart
  3 Stop
  4 Escalate




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



Супервизор
Решение при сбое:
  1 Resume
  2 Restart
  3 Stop
  4 Escalate
      Принятое решение (1-3) действует рекурсивно




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



Супервизор
Решение при сбое:
  1 Resume
  2 Restart
  3 Stop
  4 Escalate
      Принятое решение (1-3) действует рекурсивно
      Функция Exception ⇒ Directive




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



Супервизор
Решение при сбое:
  1 Resume
  2 Restart
  3 Stop
  4 Escalate
      Принятое решение (1-3) действует рекурсивно
      Функция Exception ⇒ Directive
      Terminated, preStart, preRestart, postStop,
      postRestart



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



Супервизор
Решение при сбое:
  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
Практика    Примеры



Супервизор
Решение при сбое:
  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
Практика    Примеры



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


1   final val defaultStrategy: SupervisorStrategy = {
2     def defaultDecider: Decider = {
3       case _: ActorInitializationException => Stop
4       case _: ActorKilledException      => Stop
5       case _: Exception                 => Restart
6       case _                            => Escalate
7     }
8     OneForOneStrategy()(defaultDecider)
9   }




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



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



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




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



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



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




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



Свойства must have




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



Свойства must have


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




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



Свойства must have


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




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



Свойства must have


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




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



Свойства must have


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




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



Свойства must have


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




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



Акторы




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



Акторы


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




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



Акторы


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




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



Акторы


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




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



Акторы


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




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



Акторы


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




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



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




  7
   http://letitcrash.com/post/17707262394/
why-no-mailboxsize-in-akka-2
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   38 / 42
Практика    Опыт



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

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




  7
   http://letitcrash.com/post/17707262394/
why-no-mailboxsize-in-akka-2
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   38 / 42
Практика    Опыт



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

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




  7
   http://letitcrash.com/post/17707262394/
why-no-mailboxsize-in-akka-2
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   38 / 42
Практика    Опыт



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

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




  7
   http://letitcrash.com/post/17707262394/
why-no-mailboxsize-in-akka-2
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   38 / 42
Практика    Опыт



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

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



  7
   http://letitcrash.com/post/17707262394/
why-no-mailboxsize-in-akka-2
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   38 / 42
Практика    Опыт



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

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


  7
   http://letitcrash.com/post/17707262394/
why-no-mailboxsize-in-akka-2
 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model   12 мая 2012 г.   38 / 42
Практика    Опыт



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




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



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


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




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



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


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




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



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


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




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



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




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



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


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




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



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


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




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



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


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




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



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


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




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



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




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



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


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




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



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


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




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



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


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




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



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


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




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



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


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




 Вадим Цесько (Яндекс)   Потоковая обработка на Actor Model      12 мая 2012 г.   41 / 42
Заключение    Alan Kay on OOP, 1967



Alan Kay on OOP, 1967
I thought of objects being like biological cells and/or
individual computers on a network, only able to
communicate with messages (so messaging came at the
very beginning – it took a while to see how to do
messaging in a programming language efficiently enough
to be useful).
OOP to me means only messaging, local retention and
protection and hiding of state-process, and extreme
late-binding of all things. It can be done in Smalltalk and
in LISP. There are possibly other systems in which this is
possible, but I’m not aware of them.

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

Weitere ähnliche Inhalte

Kürzlich hochgeladen

CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 

Kürzlich hochgeladen (9)

CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 

Empfohlen

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Empfohlen (20)

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 

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

  • 1. Потоковая обработка данных с помощью Actor Model Вадим Цесько incubos@yandex.ru twitter.com/incubos 12 мая 2012 г. Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 1 / 42
  • 2. Введение Система Класс систем Мы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.Работа Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  • 3. Введение Система Класс систем Мы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.Работа ETL-процесс: Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  • 4. Введение Система Класс систем Мы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.Работа ETL-процесс: 1 Extract — загрузка внешних данных Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  • 5. Введение Система Класс систем Мы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.Работа ETL-процесс: 1 Extract — загрузка внешних данных 2 Transform — унификация, кластеризация, ... Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  • 6. Введение Система Класс систем Мы разрабатываем Яндекс.Авто Яндекс.Недвижимость Яндекс.Работа ETL-процесс: 1 Extract — загрузка внешних данных 2 Transform — унификация, кластеризация, ... 3 Load — построение и раскладка индекса Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 2 / 42
  • 7. Введение Система Статистика Данные: До 104 источников До 107 сущностей 20% обновляется ежедневно 2x рост за год 1 http://stat.yandex.ru Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 3 / 42
  • 8. Введение Система Статистика Данные: До 104 источников До 107 сущностей 20% обновляется ежедневно 2x рост за год Пользователи1 : Яндекс.Авто — 4.5 млн. чел. Яндекс.Недвижимость — 2 млн. чел. Яндекс.Работа — 3.3 млн. чел. 1 http://stat.yandex.ru Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 3 / 42
  • 9. Введение Система Было Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 4 / 42
  • 10. Введение Система За кадром Кластер поисковых машин Раскладка Балансировка Дополнительные процессы и данные Статистика Картинки Цены Качество Админки/партнёрки История Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 5 / 42
  • 11. Введение Система Мотивация Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42
  • 12. Введение Система Мотивация Масштабируемость с ростом объёма данных Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42
  • 13. Введение Система Мотивация Масштабируемость с ростом объёма данных Инкрементальная индексация Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42
  • 14. Введение Система Мотивация Масштабируемость с ростом объёма данных Инкрементальная индексация (мягкий) real-time Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 6 / 42
  • 15. Введение Система Стало Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 7 / 42
  • 16. Введение Распределённые системы Свойства must have Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  • 17. Введение Распределённые системы Свойства must have Масштабируемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  • 18. Введение Распределённые системы Свойства must have Масштабируемость Гибкость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  • 19. Введение Распределённые системы Свойства must have Масштабируемость Гибкость Устойчивость к сбоям Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  • 20. Введение Распределённые системы Свойства must have Масштабируемость Гибкость Устойчивость к сбоям Тестируемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  • 21. Введение Распределённые системы Свойства must have Масштабируемость Гибкость Устойчивость к сбоям Тестируемость Наблюдаемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 8 / 42
  • 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. Введение 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. Введение 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. Введение 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. Введение 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. Введение 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. Введение 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. Введение 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. Введение 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. Введение 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. Введение Actor Model Реализации Actor Model 3 http://en.wikipedia.org/wiki/Actor_model Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42
  • 33. Введение Actor Model Реализации Actor Model Языки3 с «родной» поддержкой: Erlang Scala ... 3 http://en.wikipedia.org/wiki/Actor_model Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 11 / 42
  • 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. Введение 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. Практика Akka О проекте Jonas Bon´r: e Java Champion Terracotta JVM clustering, JRockit JVM, AspectWerkz AOP, Eclipse AspectJ Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 12 / 42
  • 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. Практика 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. Практика 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. Практика 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. Практика 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. Практика Akka Производительность Внимание Синтетические тесты Erlang R14B04 vs Akka 2.0-SNAPSHOT4 : 1M mps vs 2.1M mps Akka 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. Практика Akka Производительность Внимание Синтетические тесты Erlang R14B04 vs Akka 2.0-SNAPSHOT4 : 1M mps vs 2.1M mps Akka 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. Практика Akka Производительность Внимание Синтетические тесты Erlang R14B04 vs Akka 2.0-SNAPSHOT4 : 1M mps vs 2.1M mps Akka 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. Практика Akka Особенности реализации Actor Model Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  • 46. Практика Akka Особенности реализации Actor Model 300 байт на актор Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  • 47. Практика Akka Особенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  • 48. Практика Akka Особенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  • 49. Практика Akka Особенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Нет гарантированной доставки, семантика at-most-once, порядок сохраняется Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  • 50. Практика Akka Особенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Нет гарантированной доставки, семантика at-most-once, порядок сохраняется Сообщения обрабатываются строго по порядку Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  • 51. Практика Akka Особенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Нет гарантированной доставки, семантика at-most-once, порядок сохраняется Сообщения обрабатываются строго по порядку Иерархия: создаваемые акторы — дети, родитель — супервизор Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  • 52. Практика Akka Особенности реализации Actor Model 300 байт на актор Актор: состояние, поведение, почтовый ящик, список детей, стратегия супервизора Множество акторов на множестве нитей Нет гарантированной доставки, семантика at-most-once, порядок сохраняется Сообщения обрабатываются строго по порядку Иерархия: создаваемые акторы — дети, родитель — супервизор Актор скрыт за переносимой ActorRef Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 14 / 42
  • 53. Практика Akka Ссылки Чисто локальные Локальные ссылки Ссылки для маршрутизации (Router) Ссылки на удалённых акторов Особые: PromiseActorRef, DeadLetterActorRef, EmptyLocalActorRef (DeadLetterActorRef) Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 15 / 42
  • 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. Практика Akka Конструирование ссылок Создание акторов: ActorSystem.actorOf или ActorContext.actorOf Поиск акторов: ActorSystem.actorFor или ActorContext.actorFor Каждый актор знает себя, родителя и детей Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 16 / 42
  • 56. Практика Akka Конструирование ссылок Создание акторов: ActorSystem.actorOf или ActorContext.actorOf Поиск акторов: ActorSystem.actorFor или ActorContext.actorFor Каждый актор знает себя, родителя и детей Можно делать так: 1 context.actorFor("../brother") ! msg 2 context.actorFor("/user/service") ! msg 3 context.actorSelection("../*") ! msg Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 16 / 42
  • 57. Практика Akka Именование в локальной системе Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 17 / 42
  • 58. Практика Akka Пути Типы путей: Логический Физический Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 18 / 42
  • 59. Практика Akka Пути Типы путей: Логический Физический Особые пути: /user /system /deadLetters /temp /remote Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 18 / 42
  • 60. Практика Akka Удалённое развёртывание Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 19 / 42
  • 61. Практика Akka Actor Best Practices Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  • 62. Практика Akka Actor Best Practices Не блокироваться Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  • 63. Практика Akka Actor Best Practices Не блокироваться Неизменяемые сообщения Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  • 64. Практика Akka Actor Best Practices Не блокироваться Неизменяемые сообщения Нет разделяемому состоянию Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  • 65. Практика Akka Actor Best Practices Не блокироваться Неизменяемые сообщения Нет разделяемому состоянию «Опасные» подзадачи в дочерние акторы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  • 66. Практика Akka Actor Best Practices Не блокироваться Неизменяемые сообщения Нет разделяемому состоянию «Опасные» подзадачи в дочерние акторы События жизненного цикла Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 20 / 42
  • 67. Практика Akka Используемые фичи Actors Logging Scheduler Dispatchers Routing Remoting Serialization Testing FSM Fault Tolerance Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 21 / 42
  • 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. Практика Примеры Определение актора 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
  • 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. Практика Примеры Конфигурация диспетчера Конфигурация в 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 = 4 10 parallelism-factor = 1.0 11 } 12 } 13 } 6 Human-Optimized Config Object Notation: https://github.com/typesafehub/config Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 25 / 42
  • 72. Практика Примеры Диспетчеры и ящики Диспетчеры: Dispatcher PinnedDispatcher BalancingDispatcher CallingThreadDispatcher Почтовые ящики: UnboundedMailbox BoundedMailbox UnboundedPriorityMailbox BoundedPriorityMailbox Durable Mailboxes Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 26 / 42
  • 73. Практика Примеры Конфигурация маршрутизатора 1 akka.actor.deployment { 2 /partitioner { 3 router = smallest-mailbox 4 nr-of-instances = 4 5 } 6 } 1 akka.actor.deployment { 2 /unifier { 3 router = round-robin 4 resizer { 5 lower-bound = 2 6 upper-bound = 16 7 } 8 } 9 } Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 27 / 42
  • 74. Практика Примеры Маршрутизаторы RoundRobinRouter RandomRouter SmallestMailboxRouter BroadcastRouter ScatterGatherFirstCompletedRouter Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 28 / 42
  • 75. Практика Примеры Конфигурирование из кода 1 val shardActors = 2 shards.map(system.actorFor(_)).toIndexedSeq 3 4 val shard = system.actorOf( 5 Props[PartitionReceiver] 6 .withRouter(RoundRobinRouter(shardActors)) 7 .withDispatcher("dispatcher.shard"), 8 "shard") Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 29 / 42
  • 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 = 2553 12 } 13 } 14 } Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 30 / 42
  • 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 ! 1 13 probe.expectMsg(1) 14 } 15 } 16 } Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 31 / 42
  • 78. Практика Примеры Тестирование акторов Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  • 79. Практика Примеры Тестирование акторов Модульное тестирование с TestActorRef Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  • 80. Практика Примеры Тестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  • 81. Практика Примеры Тестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Проверки с сопоставлением по шаблону Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  • 82. Практика Примеры Тестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Проверки с сопоставлением по шаблону Замедление времени Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  • 83. Практика Примеры Тестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Проверки с сопоставлением по шаблону Замедление времени Детализированные логи akka.actor.debug.* Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  • 84. Практика Примеры Тестирование акторов Модульное тестирование с TestActorRef Интеграционное тестирование с Probe Проверки с сопоставлением по шаблону Замедление времени Детализированные логи akka.actor.debug.* CallingThreadDispatcher Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 32 / 42
  • 85. Практика Примеры Супервизор Решение при сбое: 1 Resume 2 Restart 3 Stop 4 Escalate Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42
  • 86. Практика Примеры Супервизор Решение при сбое: 1 Resume 2 Restart 3 Stop 4 Escalate Принятое решение (1-3) действует рекурсивно Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42
  • 87. Практика Примеры Супервизор Решение при сбое: 1 Resume 2 Restart 3 Stop 4 Escalate Принятое решение (1-3) действует рекурсивно Функция Exception ⇒ Directive Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 33 / 42
  • 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. Практика Примеры Супервизор Решение при сбое: 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. Практика Примеры Супервизор Решение при сбое: 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. Практика Примеры Супервизор по умолчанию 1 final val defaultStrategy: SupervisorStrategy = { 2 def defaultDecider: Decider = { 3 case _: ActorInitializationException => Stop 4 case _: ActorKilledException => Stop 5 case _: Exception => Restart 6 case _ => Escalate 7 } 8 OneForOneStrategy()(defaultDecider) 9 } Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 34 / 42
  • 92. Практика Примеры Наблюдаемость Typesafe Console для мониторинга Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 35 / 42
  • 93. Практика Примеры Наблюдаемость Typesafe Console для мониторинга Graphite + statsd + statsd-over-slf4j Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 35 / 42
  • 94. Практика Примеры Свойства must have Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  • 95. Практика Примеры Свойства must have Масштабируемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  • 96. Практика Примеры Свойства must have Масштабируемость Гибкость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  • 97. Практика Примеры Свойства must have Масштабируемость Гибкость Устойчивость к сбоям Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  • 98. Практика Примеры Свойства must have Масштабируемость Гибкость Устойчивость к сбоям Тестируемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  • 99. Практика Примеры Свойства must have Масштабируемость Гибкость Устойчивость к сбоям Тестируемость Наблюдаемость Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 36 / 42
  • 100. Практика Опыт Акторы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  • 101. Практика Опыт Акторы Храните состояние вовне Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  • 102. Практика Опыт Акторы Храните состояние вовне Стройте всю систему на акторах Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  • 103. Практика Опыт Акторы Храните состояние вовне Стройте всю систему на акторах Пишите асинхронный код Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  • 104. Практика Опыт Акторы Храните состояние вовне Стройте всю систему на акторах Пишите асинхронный код Избегайте косвенного взаимодействия акторов Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  • 105. Практика Опыт Акторы Храните состояние вовне Стройте всю систему на акторах Пишите асинхронный код Избегайте косвенного взаимодействия акторов Баги есть, но быстро чинят Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 37 / 42
  • 106. Практика Опыт Память и ящики 7 http://letitcrash.com/post/17707262394/ why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  • 107. Практика Опыт Память и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке 7 http://letitcrash.com/post/17707262394/ why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  • 108. Практика Опыт Память и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке Ограниченные ящики ⇒ возможные deadlock’и при наличии циклов 7 http://letitcrash.com/post/17707262394/ why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  • 109. Практика Опыт Память и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке Ограниченные ящики ⇒ возможные deadlock’и при наличии циклов ⇒ стройте системы без циклов 7 http://letitcrash.com/post/17707262394/ why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  • 110. Практика Опыт Память и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке Ограниченные ящики ⇒ возможные deadlock’и при наличии циклов ⇒ стройте системы без циклов Существует диспетчер по умолчанию 7 http://letitcrash.com/post/17707262394/ why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  • 111. Практика Опыт Память и ящики Неограниченные ящики ⇒ неограниченная память при перегрузке Ограниченные ящики ⇒ возможные deadlock’и при наличии циклов ⇒ стройте системы без циклов Существует диспетчер по умолчанию Нет доступа к размеру ящика7 7 http://letitcrash.com/post/17707262394/ why-no-mailboxsize-in-akka-2 Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 38 / 42
  • 112. Практика Опыт Удалённые акторы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42
  • 113. Практика Опыт Удалённые акторы Remote deploy пока не работает в полной мере Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42
  • 114. Практика Опыт Удалённые акторы Remote deploy пока не работает в полной мере На клиенте нужно иметь код удалённо развёртываемого актора (WTF?!) Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42
  • 115. Практика Опыт Удалённые акторы Remote deploy пока не работает в полной мере На клиенте нужно иметь код удалённо развёртываемого актора (WTF?!) Маршрутизатор smallest-mailbox не работает для удалённых акторов Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 39 / 42
  • 116. Заключение Недостатки реализации Недостатки реализации Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  • 117. Заключение Недостатки реализации Недостатки реализации Отсутствует явная структура системы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  • 118. Заключение Недостатки реализации Недостатки реализации Отсутствует явная структура системы Нет статической проверки протоколов Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  • 119. Заключение Недостатки реализации Недостатки реализации Отсутствует явная структура системы Нет статической проверки протоколов Пока неполноценная реализация удалённого деплоя и апгрейда Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  • 120. Заключение Недостатки реализации Недостатки реализации Отсутствует явная структура системы Нет статической проверки протоколов Пока неполноценная реализация удалённого деплоя и апгрейда Нет развитых средств анализа производительности системы Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 40 / 42
  • 121. Заключение Достоинства подхода Достоинства подхода Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  • 122. Заключение Достоинства подхода Достоинства подхода Выразительное описание поведения и взаимодействия Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  • 123. Заключение Достоинства подхода Достоинства подхода Выразительное описание поведения и взаимодействия Простое конфигурирование Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  • 124. Заключение Достоинства подхода Достоинства подхода Выразительное описание поведения и взаимодействия Простое конфигурирование Гибкое управления выполнением Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  • 125. Заключение Достоинства подхода Достоинства подхода Выразительное описание поведения и взаимодействия Простое конфигурирование Гибкое управления выполнением Масштабируется локально и распределённо Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  • 126. Заключение Достоинства подхода Достоинства подхода Выразительное описание поведения и взаимодействия Простое конфигурирование Гибкое управления выполнением Масштабируется локально и распределённо Работает Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 41 / 42
  • 127. Заключение Alan Kay on OOP, 1967 Alan Kay on OOP, 1967 I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning – it took a while to see how to do messaging in a programming language efficiently enough to be useful). OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. It can be done in Smalltalk and in LISP. There are possibly other systems in which this is possible, but I’m not aware of them. Вадим Цесько (Яндекс) Потоковая обработка на Actor Model 12 мая 2012 г. 42 / 42