SlideShare uma empresa Scribd logo
Modelo de Atores
com Microsoft Orleans
André Minelli
Maio/2019
● Sistemas Escaláveis
● Modelo de Atores
● Implementações .NET
○ Microsoft Orleans
● Demo
Agenda
Sistemas Escaláveis
Necessidade Número 1
Sistemas Escaláveis
Necessidade Número 1
Crescimento
HORIZONTAL
Recomendação para sistemas/APIs
escalarem horizontalmente
Sistemas Escaláveis
Sistemas Escaláveis
Recomendação para sistemas/APIs
escalarem horizontalmente
STATELESS
Sistemas Escaláveis
STATELESS
=
Sem Estado!
Sistema
Stateless
DB
Sistema
Stateless
DB
Sistema
Stateless
Sistema
Stateless
DB
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
DB
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistemas Escaláveis
STATELESS
=
Sem Estado?!?
Sistema
Stateless
DB
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Cache
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
NoSql DB
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
NoSql DB
Cache
Sistemas Escaláveis
STATELESS
=
Estado Externo
Sistemas Escaláveis
“Bagagem” Stateless:
-Storaging (problemas de I/O)
-Caching (problemas com sincronização)
-Locking (problemas de concorrência)
Sistemas Escaláveis
Vamos imaginar um sistema Statefull ...
Sistema
Stateless
DB
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
Sistema
Stateless
State State State State State State State State
State State State State State State State State
State State State State State State State State
Sistemas Escaláveis
Stateful:
-1 instância por entidade
Single source of truth
-Lazy loaded
Redução de I/O ao banco de dados
-Single threaded
Lock-free
Modelo de Atores
Modelo de Atores
Modelo de Atores
“Erlang is a programming language
used to build massively scalable soft
real-time systems with requirements on
high availability.
Some of its uses are in telecoms,
banking, e-commerce, computer
telephony and instant messaging.
Erlang's runtime system has built-in
support for concurrency, distribution
and fault tolerance.”
Modelo de Atores
“We work on the Erlang programming
language, libraries and tools.
Our mission is to push Erlang technology
forward, and develop WhatsApp's
reputation as a major contributor in the
broader Erlang user community.”
Modelo de Atores - Características
● Unidade computacional: ator
● Ator se comunica com outros atores através de mensagens
imutáveis
● Ao receber uma mensagem um ator pode:
○ Criar um outro ator
○ Enviar mensagem para outro ator
○ Alterar seu estado
Modelo de Atores - Características
● Ator tem apenas referência a outro ator
○ Endereço
○ Transparência de localização
● Apenas 1 mensagem é processada por vez
○ Mailbox de mensagens
○ Assincronamente
● Ator é ‘barato’ (lightweight)
Implementações .NET
● Akka.NET
● Portado no Akka (JVM)
● Mantenedora: Petabridge
● Criação explícita de atores
● Detecção de falhas baseado em árvore de supervisão
○ Ator que cria outro ator é responsável por ele
○ Decide o que fazer quando ele falha
● Clustering é um add-on
Akka.NET
Akka.NET
public class GreetingActor : ReceiveActor
{
public GreetingActor()
{
Receive<Greet>(greet =>
Sender.Tell($"Greeting {greet.Who}", Self));
}
}
Akka.NET
var system = ActorSystem.Create("MySystem");
var greeter = system.ActorOf<GreetingActor>("greeter");
var result = await greeter.Ask<string>(
new Greet("Hello World"));
Implementações .NET
● Microsoft Orleans
● Microsoft Research
● Abraça o TAP (async/await)
○ Métodos -> Mensagens
● Atores Virtuais
○ Não é preciso criar um ator explicitamente
● Cluster-aware por padrão
MS Orleans
● Grain (Ator)
● Identificador (Int, Guid ou String)
● Criado sob demanda
● Transparência de localização
● Silo
● Nós do cluster
● Onde grains são executados
MS Orleans
public interface IHello : Orleans.IGrainWithStringKey
{
Task<string> Greet(string greeting);
}
MS Orleans
public class HelloGrain: Orleans.Grain, IHello
{
Task<string> Greet(string greeting)
{
return Task.FromResult($"You said: '{greeting}'");
}
}
MS Orleans
var client = new ClientBuilder().UseLocalhostClustering()
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "dev";
options.ServiceId = "HelloWorldApp";
}).Build();
await client.Connect();
var hello = client.GetGrain<IHello>(“Minelli”);
var result = await hello.Greet("Hello World!");
Implementações .NET
● Proto.Actor
● Virtual Actors do MS Orleans
● Modelo conceitual Akka / Erlang
● Interoperabilidade
○ C#, Go, Java e Kotlin
● Projeto menos maduro que os anteriores
Proto.Actor
public class HelloActor : IActor
{
public Task ReceiveAsync(IContext context)
{
var msg = context.Message;
if (msg is Greet greet)
{
context.Respond(greet.Who);
}
return Actor.Done;
}
}
Proto.Actor
var context = new RootContext();
var props = Props.FromProducer(() => new HelloActor());
var actor = context.Spawn(props);
var result = await context.RequestAsync<string>(
actor,
new Greet { Who = "Alex" });
Demo
Referências
● The Inevitable Rise of the Stateful Web Application
● Developing APIs using Actor model in ASP.NET Core
● Akka.Net
● Orleans
● Proto.Actor
● MS Orleans in Real World Application
● Scalable by Design

Mais conteúdo relacionado

PDF
[Curso Java Basico] Aula 14: Condicionais If-Else
PDF
[Curso Java Basico] Aula 17: Loop for
PDF
[Curso Java Basico] Aula 15: Controle de Decisao Switch-Case
PPTX
Soluções escaláveis com Microsoft Orleans e Windows Azure
PPTX
Soluções escaláveis com Microsoft Orleans
PDF
TDC - Introdução ao Actor Model com Microsoft Orleans
PDF
Akka programação concorrente
PPTX
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
[Curso Java Basico] Aula 14: Condicionais If-Else
[Curso Java Basico] Aula 17: Loop for
[Curso Java Basico] Aula 15: Controle de Decisao Switch-Case
Soluções escaláveis com Microsoft Orleans e Windows Azure
Soluções escaláveis com Microsoft Orleans
TDC - Introdução ao Actor Model com Microsoft Orleans
Akka programação concorrente
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...

Último (11)

PDF
Manejo integrado de pragas na cultura do algodão
PDF
Jira Software projetos completos com scrum
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Eng. Software - pontos essenciais para o início
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPT
Conceitos básicos de Redes Neurais Artificiais
PPTX
Utilizando code blockes por andre backes
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Tipos de servidor em redes de computador.pptx
Manejo integrado de pragas na cultura do algodão
Jira Software projetos completos com scrum
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Eng. Software - pontos essenciais para o início
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Conceitos básicos de Redes Neurais Artificiais
Utilizando code blockes por andre backes
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Viasol Energia Solar -Soluções para geração e economia de energia
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Tipos de servidor em redes de computador.pptx
Anúncio
Anúncio

Modelo de atores com Microsoft Orleans

Notas do Editor

  • #4: O que um sistema precisa permitir para dizermos que é escalável?
  • #5: Escalabilidade vertical é mais barata no curto prazo - equipes de desenvolvimento geralmente são mais caras. Mas e.v. tem um limite de volume que pode suportar. Longo prazo ou volumes muito grandes, escalabilidade horizontal é mais vantajosa
  • #6: Recomendação de arquitetura ou desenho
  • #8: Podemos adicionar servidores de forma que qualquer um poderá atender qq requisição
  • #10: Adicionar diagrama de API stateless
  • #12: Ops…
  • #13: Mentira: desconsiderando apis funcionais ou CRUD, sempre há estado!! Para uma API stateless funcionar, todo o estado deve ser carregado antes da execução!
  • #14: Cache
  • #15: NoSql
  • #16: Cache + NoSql
  • #17: Repositorios para estado externo são complexos e/ou dificeis de escalar Complexidade operacional e arquitetural
  • #20: Analogia do callcenter: Stateless - cada vez q vc fala: aguarde, estou pesquisando seu cadastro… Stateful - cadastro está na tela o tempo todo
  • #21: Implementar isto não é facil.
  • #22: Sistemas de atores entregam as partes complicadas destas funcionalidades ‘stateful’ Ou abstraem boa parte da complexidade para obtermos aquelas caracteristicas
  • #23: Modelo de atores não é nada novo, na verdade. Vem dos anos 70/80
  • #24: Uma das primeiras implementações foi feita no Erlang, originalmente desenvolvida pela Ericsson (Ericsson Language) Switches e equipamentos dela ainda usam nas redes de telecom, principalmente europeias. Curiosidade: adivinhem ai uma empresa bastante conhecida e que usa Erlang?
  • #25: Whatsapp feito em Erlang - citação direta da pagina de vagas de engenharia do WA Vamos ver algumas caracteristicas dos modelos ou sistemas de atores
  • #26: Unidade computacional -> tudo é modelado como um ator É comum ouvir dizer que atores não andam sozinhos, são sempre encontrados em sistemas
  • #27: Transparencia, Assincrono -> facilitam a implementação de sistemas de atores distribuidos
  • #28: Iniciado 2014
  • #29: ActorSystem
  • #30: ActorSystem
  • #31: ActorSystem
  • #32: Research em 2012 - Hallo 4 e 5
  • #34: ActorSystem
  • #35: ActorSystem
  • #36: ActorSystem
  • #37: Iniciado por um dos desenvolvedores originais do Akka.NET - Roger Johanson Iniciado em 2017
  • #38: ActorSystem