wiki:Actor_Model

Паралеллизм на акторах

Надо начать издалека, чтобы было понятно

Режимы I/O

Нода

  • вычисления блокируют всех остальных
  • IO через async/await
  • блокирующий IO и долгие вычисления - моветон

C#

  • вычисления блокируют только наш поток
  • IO через async-await (выглядит как блокирующий, но надо не забывать расставлять async-await)
  • блокирующий IO моветон, async-await моветон, долгие вычисления - полумоветон (достаточно не запускать слишком много потоков с долгими вычислениями или запускать их в явных потоках)

Akka

  • вычисления блокируют только наш поток
  • IO через сообщения (выглядит как блокирующий)
  • настоящий блокирующий IO моветон, долгие вычисления - полумоветон

"Внутри" и "снаружи"

Нода

Снаружи

  • пул
  • мультиплексор

Внутри

  • вычисления
  • async-await (везде, где есть async-await, также есть коллбеки и промисы)

C#

Cнаружи

  • явные потоки
  • пул
  • мультиплексор

Внутри

  • явные потоки (если очень надо)
  • пул (если надо)
  • async-await

Akka

Снаружи:

  • явные потоки
  • пул
  • мультиплексор
  • async-await

Внутри:

  • вычисления
  • отправка сообщений

Структура базового варианта приложения на Akka

К сожалению, нет библиотек, рассчитанных на акку. То есть нам понадобится IO-библиотека, оборачивающая весь IO в акторы. Благо, в коллекторе IO немного - HTTP и веб-сокеты. Зато мы получаем очень ясный код для каждой биржи, а все неясности будут вынесены в наши модули:

  • akka.http
  • akka.gearman
  • akka.websocket

Эти модули мы можем заопенсорсить и зарелизить в NuGet.

Таким образом, коллектор состоит из

  • "библиотечной" части, использующей "наружные" примитивы:
    • явные потоки
    • пул
    • async-await
  • собственно кода бирж, содержащего только "внутренние" примитивы:
    • вычисления
    • синхронные вызовы

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

После реализации базовых функций необходимо реализовать средства повышения отказоустойчивости. Для этого будет реализован компонент на супервизорном API акки, занимающийся пуском-остановкой-сохранением состояния акторов коллектора.

Last modified 5 years ago Last modified on May 28, 2019, 11:08:41 PM
Note: See TracWiki for help on using the wiki.