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.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay