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

Heroku

Deploy with ease. Manage efficiently. Scale faster.

Leave the infrastructure headaches to us, while you focus on pushing boundaries, realizing your vision, and making a lasting impression on your users.

Get Started

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.

Playwright CLI Flags Tutorial

5 Playwright CLI Flags That Will Transform Your Testing Workflow

  • --last-failed: Zero in on just the tests that failed in your previous run
  • --only-changed: Test only the spec files you've modified in git
  • --repeat-each: Run tests multiple times to catch flaky behavior before it reaches production
  • --forbid-only: Prevent accidental test.only commits from breaking your CI pipeline
  • --ui --headed --workers 1: Debug visually with browser windows and sequential test execution

Learn how these powerful command-line options can save you time, strengthen your test suite, and streamline your Playwright testing experience. Practical examples included!

Watch Video 📹️

👋 Kindness is contagious

Explore a trove of insights in this engaging article, celebrated within our welcoming DEV Community. Developers from every background are invited to join and enhance our shared wisdom.

A genuine "thank you" can truly uplift someone’s day. Feel free to express your gratitude in the comments below!

On DEV, our collective exchange of knowledge lightens the road ahead and strengthens our community bonds. Found something valuable here? A small thank you to the author can make a big difference.

Okay