SlideShare a Scribd company logo
1 of 13
Download to read offline
Akka
Дмитрий Орнатский
Qubell
twitter.com/ornatsky
Зачем
• Акторы — объекты, которые вместо того чтобы
просто хранить состояние еще и выполняют код
конкурентно.
• Разделяемое состояние — это плохо, только
иммутабельные сообщения.
• Ручная синхронизация — это утомительно
!
class MyActor extends Actor {!
val log = Logging(context.system, this)!
def receive = {!
case "test" => log.info("received test")!
case _ => sender ! “what’s this?”!
}!
}
Обработка ошибок
Supervision hierarchies
• Акторы образуют иерархию
• Родитель следит за детьми и может либо
перезапускать их в ответ на ошибку, не делать
ничего, либо передавать управление наверх.
Индивидуальные ошибки
!
val breaker =
new CircuitBreaker(context.system.scheduler,
maxFailures = 5,
callTimeout = 10.seconds,
resetTimeout = 1.minute).onOpen(notifyMeOnOpen())
def notifyMeOnOpen(): Unit =
log.warning("My CircuitBreaker is now open, and will not
close for one minute")
Remoting
• Минимально затрагивает код приложения.
Кластеризация
• Кластер — совокупность узлов, которые с
заранее известной степенью точности находятся
в соглашении относительно того, кто входит в
кластер, и кто его возглавляет.
• Amazon Dynamo
Scala
Писать на джаве можно, но выглядит это грустно.
Dispatchers
• Дают акторам процессорное время.
• Например, можно балансировать нагрузку между
акторами.
• Изолировать пулы потоков, потребляемые
группами акторов (Bulkheading).
STM
• Атомарные обновления внутреннего состояния.
Например, для случаев, когда вы не хотите
рестартовать актор целиком.
• Выглядит как блок atomic {…}, внутри которого
присваивания внутри особого вида контейнеров
(агентов) атомарны.
Agents
def transfer(from: Agent[Int], to: Agent[Int], amount: Int): Boolean =
{!
atomic { txn =>!
if (from.get < amount) false!
else {!
from send (_ - amount)!
to send (_ + amount)!
true!
}!
}!
}

More Related Content

More from Open-IT

How to make friends python with win32 api
How to make friends python with win32 apiHow to make friends python with win32 api
How to make friends python with win32 apiOpen-IT
 
Mathematical optimization and python
Mathematical optimization and pythonMathematical optimization and python
Mathematical optimization and pythonOpen-IT
 
Секретный доклад
Секретный докладСекретный доклад
Секретный докладOpen-IT
 
Rust: абстракции и безопасность, совершенно бесплатно
Rust: абстракции и безопасность, совершенно бесплатноRust: абстракции и безопасность, совершенно бесплатно
Rust: абстракции и безопасность, совершенно бесплатноOpen-IT
 
Введение в Apache Cassandra
Введение в Apache CassandraВведение в Apache Cassandra
Введение в Apache CassandraOpen-IT
 
λ | Lenses
λ | Lensesλ | Lenses
λ | LensesOpen-IT
 
Cooking Cassandra
Cooking CassandraCooking Cassandra
Cooking CassandraOpen-IT
 
Fuel's current use cases, architecture and next steps
Fuel's current use cases, architecture and next stepsFuel's current use cases, architecture and next steps
Fuel's current use cases, architecture and next stepsOpen-IT
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаOpen-IT
 
Microsoft kinect
Microsoft kinectMicrosoft kinect
Microsoft kinectOpen-IT
 
Сам себе АНБ, API социальных сетей
Сам себе АНБ, API социальных сетейСам себе АНБ, API социальных сетей
Сам себе АНБ, API социальных сетейOpen-IT
 
Talkbits service architecture and deployment
Talkbits service architecture and deploymentTalkbits service architecture and deployment
Talkbits service architecture and deploymentOpen-IT
 

More from Open-IT (12)

How to make friends python with win32 api
How to make friends python with win32 apiHow to make friends python with win32 api
How to make friends python with win32 api
 
Mathematical optimization and python
Mathematical optimization and pythonMathematical optimization and python
Mathematical optimization and python
 
Секретный доклад
Секретный докладСекретный доклад
Секретный доклад
 
Rust: абстракции и безопасность, совершенно бесплатно
Rust: абстракции и безопасность, совершенно бесплатноRust: абстракции и безопасность, совершенно бесплатно
Rust: абстракции и безопасность, совершенно бесплатно
 
Введение в Apache Cassandra
Введение в Apache CassandraВведение в Apache Cassandra
Введение в Apache Cassandra
 
λ | Lenses
λ | Lensesλ | Lenses
λ | Lenses
 
Cooking Cassandra
Cooking CassandraCooking Cassandra
Cooking Cassandra
 
Fuel's current use cases, architecture and next steps
Fuel's current use cases, architecture and next stepsFuel's current use cases, architecture and next steps
Fuel's current use cases, architecture and next steps
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Microsoft kinect
Microsoft kinectMicrosoft kinect
Microsoft kinect
 
Сам себе АНБ, API социальных сетей
Сам себе АНБ, API социальных сетейСам себе АНБ, API социальных сетей
Сам себе АНБ, API социальных сетей
 
Talkbits service architecture and deployment
Talkbits service architecture and deploymentTalkbits service architecture and deployment
Talkbits service architecture and deployment
 

Akka и реактивное программирование на JVM

  • 2. Зачем • Акторы — объекты, которые вместо того чтобы просто хранить состояние еще и выполняют код конкурентно. • Разделяемое состояние — это плохо, только иммутабельные сообщения. • Ручная синхронизация — это утомительно
  • 3. ! class MyActor extends Actor {! val log = Logging(context.system, this)! def receive = {! case "test" => log.info("received test")! case _ => sender ! “what’s this?”! }! }
  • 5.
  • 6. Supervision hierarchies • Акторы образуют иерархию • Родитель следит за детьми и может либо перезапускать их в ответ на ошибку, не делать ничего, либо передавать управление наверх.
  • 7. Индивидуальные ошибки ! val breaker = new CircuitBreaker(context.system.scheduler, maxFailures = 5, callTimeout = 10.seconds, resetTimeout = 1.minute).onOpen(notifyMeOnOpen()) def notifyMeOnOpen(): Unit = log.warning("My CircuitBreaker is now open, and will not close for one minute")
  • 9. Кластеризация • Кластер — совокупность узлов, которые с заранее известной степенью точности находятся в соглашении относительно того, кто входит в кластер, и кто его возглавляет. • Amazon Dynamo
  • 10. Scala Писать на джаве можно, но выглядит это грустно.
  • 11. Dispatchers • Дают акторам процессорное время. • Например, можно балансировать нагрузку между акторами. • Изолировать пулы потоков, потребляемые группами акторов (Bulkheading).
  • 12. STM • Атомарные обновления внутреннего состояния. Например, для случаев, когда вы не хотите рестартовать актор целиком. • Выглядит как блок atomic {…}, внутри которого присваивания внутри особого вида контейнеров (агентов) атомарны.
  • 13. Agents def transfer(from: Agent[Int], to: Agent[Int], amount: Int): Boolean = {! atomic { txn =>! if (from.get < amount) false! else {! from send (_ - amount)! to send (_ + amount)! true! }! }! }