Simplificando sistemas concorrentes e distribuídos com modelo de atores

O modelo de atores é uma alternativa fascinante e relativamente simples para o desenvolvimento de sistemas distribuídos ou concorrentes. Exceto pela liberdade de de adoção tecnológica,  entrega quase todos os benefícios geralmente associados a microsserviços com uma parcela reduzida de complexidade (consequentemente, custo).

O modelo de atores não é uma ideia nova. O modelo foi proposto em 1973, por Carl Hewitt, e é aplicada em sistemas básicos de telefonia e em sistemas como Whatsapp e RabbitMQ.

A ideia central para o modelo de atores é “decompor” o sistema em pequenas unidades de processamento (os atores) que se comunicam através da troca de mensagens imutáveis.

class GreeterActor : TypedActor, 
    IHandle<GoodMorning>,
    IHandle<GoodAfternoon>,
    IHandle<GoodEvening>,
    IHandle<GenericGreeting>
{
    public void Handle(GoodMorning m)
        => WriteLine("Good Morning");

    public void Handle(GoodAfternoon m)
        => WriteLine("Good Afernoon");

    public void Handle(GoodEvening m)
        => WriteLine("Good Evening");

    public void Handle(GenericGreeting m)
        => WriteLine(m.Message);
}

O código acima, mostra a implementação de um ator em Akka.net.

Os atores funcionam em um ambiente supervisionado que garante a resiliência do sistema. A supervisão garante que instâncias problemáticas de atores sejam descartadas e substituídas por novas instâncias com o menor prejuízo possível.

A interface de comunicação dos atores é padronizada o que reduz o acoplamento. Dois atores nunca se “comunicam” diretamente, mas sempre através de um “agente” mantido e controlado pelo sistema.

A comunicação entre os atores é garantida pelo sistema. Aliás, para os atores é indiferente se um ator com que precisa interagir está rodando no mesmo processo, no mesmo computador ou, até mesmo, na mesma rede. Essa característica torna o desenvolvimento muito mais simples.

Um ator tem liberdade para criar e supervisionar outras instâncias de atores. Assim, pode distribuir trabalho sem mudar a interação com outros serviços.

static void Main()
{
    var actorSystem = ActorSystem.Create("myactorsystem");

    var workerProp = Props.Create(() => new WorkerActor())
        .WithRouter(new RoundRobinPool(10));

    var worker = actorSystem.ActorOf(workerProp);
    var boss = actorSystem.ActorOf(Props.Create(() => new BossActor(worker)));

    boss.Tell(Start.Instance);
            
    actorSystem.WhenTerminated.Wait();
}

No exemplo acima, utilizamos um factory de Akka.net para criar um ator que supervisiona a execução de 10 outros atores (que fazem o processamento real) distribuindo a carga em estratégia round robin.

Há frameworks para adoção do modelo de atores em praticamente todos os grandes ecossistemas tecnológicos modernos. Além de ERLANG, há, por exemplo Akka para Java, Akka.net e Orleans para .NET.

Nos próximos posts dessa série mostraremos exemplos concretos de adoção do modelo de atores em diversas tecnologias.

Se você já desenvolve usando modelo de atores, recomendamos ler o livro do Vaugh Vernon sobre padrões.

Compartilhe este insight:

Comentários

Participe deixando seu comentário sobre este artigo a seguir:

Subscribe
Notify of
guest
2 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Fabricio Doi
Fabricio Doi
4 anos atrás

Só faltou citar Scala, em que o modelo de ator é mais presente. Você acha que linguagens funcionais como o Scala e o F# podem ser mais adequadas para esse modelo?

Elemar Júnior
Elemar Júnior
4 anos atrás

Sim. Poderia ter mencionado Scala.

Acho que não conheço nenhuma implementação séria usando Akka que não seja em Scala. Penso que há bom fit entre funcionais e o modelo de atores, mas não acho que seja, necessariamente, um pré-requisito.

AUTOR

Elemar Júnior
Fundador e CEO da EximiaCo atua como tech trusted advisor ajudando empresas e profissionais a gerar mais resultados através da tecnologia.

NOVOS HORIZONTES PARA O SEU NEGÓCIO

Nosso time está preparado para superar junto com você grandes desafios tecnológicos.

Entre em contato e vamos juntos utilizar a tecnologia do jeito certo para gerar mais resultados.

Insights EximiaCo

Confira os conteúdos de negócios e tecnologia desenvolvidos pelos nossos consultores:

Arquivo

Pós-pandemia, trabalho remoto e a retenção dos profissionais de TI

CTO Consulting e Especialista em Execução em TI
2
0
Queremos saber a sua opinião, deixe seu comentáriox
Oferta de pré-venda!

Mentoria em
Arquitetura de Software

Práticas, padrões & técnicas para Arquitetura de Software, de maneira efetiva, com base em cenários reais para profissionais envolvidos no projeto e implantação de software.

Muito obrigado!

Deu tudo certo com seu envio!
Logo entraremos em contato

Simplificando sistemas concorrentes e distribuídos com modelo de atores

Para se candidatar nesta turma aberta, preencha o formulário a seguir:

Simplificando sistemas concorrentes e distribuídos com modelo de atores

Para se candidatar nesta turma aberta, preencha o formulário a seguir:

Condição especial de pré-venda: R$ 14.000,00 - contratando a mentoria até até 31/01/2023 e R$ 15.000,00 - contratando a mentoria a partir de 01/02/2023, em até 12x com taxas.

Tenho interesse nessa capacitação

Para solicitar mais informações sobre essa capacitação para a sua empresa, preencha o formulário a seguir:

Tenho interesse em conversar

Se você está querendo gerar resultados através da tecnologia, preencha este formulário que um de nossos consultores entrará em contato com você:

O seu insight foi excluído com sucesso!

O seu insight foi excluído e não está mais disponível.

O seu insight foi salvo com sucesso!

Ele está na fila de espera, aguardando ser revisado para ter sua publicação programada.

Tenho interesse em conversar

Se você está querendo gerar resultados através da tecnologia, preencha este formulário que um de nossos consultores entrará em contato com você:

Tenho interesse nessa solução

Se você está procurando este tipo de solução para o seu negócio, preencha este formulário que um de nossos consultores entrará em contato com você:

Tenho interesse neste serviço

Se você está procurando este tipo de solução para o seu negócio, preencha este formulário que um de nossos consultores entrará em contato com você:

× Precisa de ajuda?