development actor model - ghdrako/doc_snipets GitHub Wiki


tags:

Development actor model

Actor Model

Aktor po otrzymaniu wiadomości może:

  • zmienić swój stan saldo: 1000 → 500
  • wysłać wiadomość innemu aktorowi
Konto Kowalski
      │
      │ "przelej 500"
      ↓
Konto Nowak
  • utworzyć nowego aktora Np. aktor OrderManager może stworzyć:
Order/123
Order/124
Order/125

Aktorzy komunikują się przez wiadomości

Zamiast:

obiekt A
    ↓
bezpośrednio zmienia
    ↓
obiekt B

masz:

A
│
│ message
│
↓
B

Aktor może reprezentować:

  • User
  • Order
  • BankAccount
  • ChatRoom
  • Game
  • IoT Device
  • ShoppingCart
  • Auction

ale także:

  • Kafka partition
  • worker
  • connection
  • cache
  • scheduler

Aktor to przede wszystkim model współbieżności i komunikacji, a nie konkretny rodzaj obiektu biznesowego.

Actor Model = zamiast wielu wątków grzebiących we wspólnym stanie, masz wiele niezależnych „skrzynek”, które mają własny stan i komunikują się poprzez wiadomoś.

A jego największa zaleta to równoległość pomiędzy aktorami + brak race condition wewnątrz pojedynczego aktora dzięki sekwencyjnemu przetwarzaniu wiadomości.

Actor Model to przede wszystkim sposób organizacji programu.

Akka jest jednym z najbardziej znanych przykładów. Programujesz aktorów, a framework zajmuje się m.in. komunikacją, współbieżnością i lokalizacją aktorów.

Erlang i jego ekosystem BEAM gdzie naturalnie piszesz programy składające się z procesów komunikujących się wiadomościami.