DEV Community

Cover image for Visão Geral do Modelo de Atores
Rafael Andrade
Rafael Andrade

Posted on

1

Visão Geral do Modelo de Atores

Visão Geral do Modelo de Atores

O Modelo de Atores é um dos modelos mais interessantes que já vi. Ele foi projetado para alta concorrência, escalabilidade e tolerância a falhas. A maioria das linguagens de programação possui um framework que o implementa, mas algumas, como Erlang/Elixir, são desenvolvidas com esse modelo em mente.

História

O modelo de atores foi criado em 1973, inspirado pela física e por linguagens como Smalltalk e Lisp. Ele foi concebido para lidar com máquinas altamente paralelas, compostas por dezenas, centenas ou milhares de microprocessadores independentes, cada um com memória local e comunicação via rede de alto desempenho.

Conceitos Fundamentais

Em Programação Orientada a Objetos, tudo é tratado como objeto. No modelo de atores, tudo é um ator.

Visão Geral do Modelo de Atores

Ator

O ator é a unidade básica de concorrência. Ele reage a mensagens alterando seu estado, modificando seu comportamento para a próxima mensagem ou enviando novas mensagens. Um ator pode:

  • Enviar um número finito de mensagens para outros atores.
  • Criar um número finito de novos atores.
  • Designar o comportamento para a próxima mensagem.

Mensagem

A mensagem é a unidade de comunicação entre atores. Ela deve ser serializável para ser transmitida em redes.

Caixa de Correio (Mailbox)

A caixa de correio é onde um ator recebe mensagens. Normalmente, segue a ordem FIFO (First-In, First-Out), mas pode ser personalizada para priorizar mensagens.

Estado

O estado do ator só pode ser modificado por ele mesmo, embora outros atores possam ler seu estado.

Comportamentos (Behaviours)

Define como um ator reage a uma mensagem.

PID ou Referência do Ator

O Process Identification (PID) é o "endereço" do ator. Pode ser local ou remoto, permitindo comunicação entre máquinas.

Supervisão

A supervisão define como o modelo coordena tarefas e garante resiliência. Quando um ator falha, ele emite um sinal ao supervisor, que decide:

  • Parar apenas o ator com falha (One-For-One).
  • Parar todos os atores filhos (All-For-One).
  • Repassar o sinal ao supervisor hierárquico superior.

Supervisors

Ator Virtual/Grain

Conceito criado pela Microsoft no projeto Orleans, onde o ator é identificado por um ID único, e o framework gerencia sua localização ou criação [[6]]. Combina-se bem com DDD (Domain-Driven Design) e Event Sourcing, usando o ID do ator como ID de domínio.

Frameworks

A escolha do framework depende da linguagem. Em C#, destacam-se:

Microsoft Orleans

Implementa apenas o Ator Virtual (chamado de Grain), com termos adaptados (Silos = nós). É fácil de usar, mas carece de flexibilidade na supervisão.

Akka.NET

Port do Java, segue o modelo clássico, mas não suporta Ator Virtual. Requer adaptações para DDD.

Proto.Actor

Implementa tanto o modelo clássico quanto o Ator Virtual, sendo altamente flexível e recomendado para casos complexos.

Elixir/Erlang

Baseadas na BEAM VM, nativamente alinhadas ao modelo de atores. Não possuem suporte nativo para Ator Virtual, exigindo bibliotecas externas.

Conclusão

O modelo de atores é ideal para sistemas de alta escalabilidade e combina-se com DDD, Event Sourcing e CQRS. Frameworks como Proto.Actor oferecem implementações completas, enquanto Orleans simplifica o uso de Atores Virtuais.

Referências

https://proto.actor/docs/actors/
https://doc.akka.io/libraries/akka-core/current/general/actors.html
https://en.wikipedia.org/wiki/Actor_model

Top comments (1)

Collapse
 
angelobelchior profile image
Angelo Belchior

Tenho estudado o Microsoft Orleans tem vários anos e acho fascinante. Tenho criado algumas PoCs e acredito que uma delas vai virar produto aqui na empresa. Essa abordagem é muito interessante, porém, modelar atores é algo que acredito ser bem complexo.

👋 Kindness is contagious

Please show some love ❤️ or share a kind word in the comments if you found this useful!

Got it!