SlideShare uma empresa Scribd logo
1 de 40
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

Semelhante a Modelo de atores com Microsoft Orleans

Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com GrailsWanderson Oliveira
 
Elastic MeetUp Porto Alegre
Elastic MeetUp Porto AlegreElastic MeetUp Porto Alegre
Elastic MeetUp Porto AlegreRafael Gomes
 
Akka no Just Java 2012
Akka no Just Java 2012Akka no Just Java 2012
Akka no Just Java 2012Paulo Siqueira
 
Um Mundo Java Sem XML
Um Mundo Java Sem XMLUm Mundo Java Sem XML
Um Mundo Java Sem XMLiMasters
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsVinicius Reis
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Deploy Automatizado usando Octopus
Deploy Automatizado usando OctopusDeploy Automatizado usando Octopus
Deploy Automatizado usando OctopusAndré Minelli
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsJulio Betta
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYraquelcarsi
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 

Semelhante a Modelo de atores com Microsoft Orleans (20)

Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
Elastic MeetUp Porto Alegre
Elastic MeetUp Porto AlegreElastic MeetUp Porto Alegre
Elastic MeetUp Porto Alegre
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Power mock
Power mockPower mock
Power mock
 
Akka no Just Java 2012
Akka no Just Java 2012Akka no Just Java 2012
Akka no Just Java 2012
 
Um Mundo Java Sem XML
Um Mundo Java Sem XMLUm Mundo Java Sem XML
Um Mundo Java Sem XML
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Deploy Automatizado usando Octopus
Deploy Automatizado usando OctopusDeploy Automatizado usando Octopus
Deploy Automatizado usando Octopus
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Javascript
JavascriptJavascript
Javascript
 
Introdução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on RailsIntrodução ao Desenvolvimento WEB com Ruby on Rails
Introdução ao Desenvolvimento WEB com Ruby on Rails
 
Jdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITYJdbc, JAVA DATABASE CONNECTIVITY
Jdbc, JAVA DATABASE CONNECTIVITY
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Linguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação JavaLinguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação Java
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 

Modelo de atores com Microsoft Orleans

Notas do Editor

  1. O que um sistema precisa permitir para dizermos que é escalável?
  2. 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
  3. Recomendação de arquitetura ou desenho
  4. Podemos adicionar servidores de forma que qualquer um poderá atender qq requisição
  5. Adicionar diagrama de API stateless
  6. Ops…
  7. Mentira: desconsiderando apis funcionais ou CRUD, sempre há estado!! Para uma API stateless funcionar, todo o estado deve ser carregado antes da execução!
  8. Cache
  9. NoSql
  10. Cache + NoSql
  11. Repositorios para estado externo são complexos e/ou dificeis de escalar Complexidade operacional e arquitetural
  12. Analogia do callcenter: Stateless - cada vez q vc fala: aguarde, estou pesquisando seu cadastro… Stateful - cadastro está na tela o tempo todo
  13. Implementar isto não é facil.
  14. Sistemas de atores entregam as partes complicadas destas funcionalidades ‘stateful’ Ou abstraem boa parte da complexidade para obtermos aquelas caracteristicas
  15. Modelo de atores não é nada novo, na verdade. Vem dos anos 70/80
  16. 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?
  17. 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
  18. Unidade computacional -> tudo é modelado como um ator É comum ouvir dizer que atores não andam sozinhos, são sempre encontrados em sistemas
  19. Transparencia, Assincrono -> facilitam a implementação de sistemas de atores distribuidos
  20. Iniciado 2014
  21. ActorSystem
  22. ActorSystem
  23. ActorSystem
  24. Research em 2012 - Hallo 4 e 5
  25. ActorSystem
  26. ActorSystem
  27. ActorSystem
  28. Iniciado por um dos desenvolvedores originais do Akka.NET - Roger Johanson Iniciado em 2017
  29. ActorSystem