SlideShare uma empresa Scribd logo
1 de 35
Serverless Reactive Programming on Azure
Mário Meyrelles @mariomeyrelles
TDC 2018 | 18/07/2018
Plano da Apresentação
Contextualização
Programação Reativa
Serverless no Azure
Demo time ! Serverless CQRS
Parte 1
Contextualização
Histórico > Anos 2000
aplicação antigamente era apenas um formulário gerado
pelo servidor | não havia interações ricas com o usuário
| alto grau de automação de construção de telas |
frameworks | fábricas de software e fordismo de sw |
projetos com grandes quantidades de telas | eram os
deuses Arquitetos? | orm | bancos de dados com muitas
regras | alto risco de mudança | degeneração de
projetos | medo de javascript | conforto em stack
Microsoft | zero open-source | web forms muito
complexos ou js mais simples? |
Histórico > Fim dos anos 2000 e começo dos anos 2010
ajax com office web apps e gmail | telas não
podem mais piscar | surgimento do iPhone |
modernização de browsers | IE hell | jQuery |
novas ideias como layouts responsivos | modelo
Web Forms obsoleto | MVC como novo padrão |
devs forçados a repensar padrões | corrida pelo
ouro: mobile apps | startups e novas stacks |
primeiros frameworks js | cloud computing
becoming mainstream | ........
Histórico > Sistemas até o meio desta década
apps repensadas para rodar na nuvem | internet
acessível a mais gente | melhores browsers |
celulares acessam mais a web do que browsers |
JavaScript = principal ling de prog da década | 2014
= ano do JavaScript | corrida para entender como
funciona o this | backend é apenas fornecedor de
json? | front-end cresce | css 3 | workflows de build
| UX e UI muito superiores | apps responsivas |
cordovização | html js css em qualquer client |
modernização do javascript. MAS...................
Histórico > Novos mundos, velhos problemas no meio desta década
será que sabemos fazer um sistema? | pressa de se chegar
onde não se queria | o mundo não é feito só de startups | o
mundo corporativo também quer tela bonita| fábricas de
software continuaram vendendo o discurso de sempre |
prazos sempre apertados | devs clássicos = truques velhos =
ferramentas novas | ecossistema em plena evolução |
acúmulo telas abarrotadas de $.ajax, $.each e etc. | backend
crescendo em complexidade | software “novo” = “novo”
legado | legados bem velhos e legados novos querem ir para a
nuvem | monolitos começam a ser quebrados!
Contextualização > Novos mundos, velhos problemas: backend do mundo corporativo
complexidade de deploy, gmuds, concorrência de pacotes |
multicanais + multidispositivos = muitas novas demandas |
crescimento maciço dos sistemas | custos brutais de infra
(gente + sw + infra) | terceirização frustrante de infra (pelo
menos no Brasil) | busca de flexibilidade para responder às
startups inovadoras | crescimento maciço de integrações
entre sistemas | problemas de performance eram| backends
para aplicações pós 2010 são muito complexos. Pré-2010
também | saímos de bolovo para chegar aonde? ddd? sabemos
fazer um sistema?
Contextualização > Ida para Nuvem
muitas empresas começaram a migração para a
nuvem migrando sistemas as-is -> IaaS | redução
de custos de manutenção e pessoas tornaram a
migração atrativa | times de dev e infra ainda
em adaptação | técnicas construtivas modernas
| práticas de DevOps | migração progressiva
para PaaS, Containers e FaaS | grandes
investimentos em quebra de monolitos
Contextualização > Ida para Nuvem > Novos Paradigmas
algumas empresas inovadoras conseguiram se
beneficiar de um modelo de programação
assíncrono e baseado em mensagens para
conseguir alocar recursos computacionais
proporcionais ao seu uso, com resiliência e
responsividade a falhas. O [reactive manifesto]
surgiu em 2013 e desde então cada vez mais
vem se popularizando.
Contextualização > Ida para Nuvem > Novos Paradigmas
para suportar cenários reativos, os times de
engenharia perceberam que programação
orientada a objetos simplesmente não ajuda
neste tipo de implementação. [programação
funcional] honra princípios de design que
ajudam a construir sistemas mais facilmente
escaláveis e simples
Parte 2
Programação Reativa
O que você precisa saber sobre programação reativa sem enrolação
• Programação reativa implica em forte desacoplamento das
causas (clicks na tela, chegada de dados de um websocket) e
efeitos (mostrar dados na tela, chamar outro sistema)
• A causa simplesmente notifica
• O efeito simplesmente reage (observer)
• Um frawework recebe as mudanças de estado e as publica
para os interessados -> Reactive Extensions, React, Akka
Streams, Spring Reactor , ferramentas no Azure. nesta
apresentação chamaremos isso de reator (observable) neste
contexto .
Programas reativos de forma simples
• Programas reativos devem produzem mensagens comunicando solicitações
de mudanças de estado. tudo deve ser tipado como uma mensagem. esta
mudança de mindset é grande e aumenta o custo inicial do projeto.
• Mudanças de estado podem ser causadas também por um fluxo de dados.
Posso querer reagir a características específicas de um flow.
• Após o reator analisar a mensagem, decide o que fazer e toma as devidas
medidas, assincronamente, para executar o que foi pedido.
• Se o estado global da aplicação for alterado, o reator comunica os
observers que houve uma mudança (flux architecture!)
• Observer simplesmente vai para um estado novo idealmente sem se
importar com o estado anterior (nem sempre é possível)
Exemplo prático! Planilha Excel
•Usuário altera um valor na célula B1
•Excel (reator) captura a mudança de estado.
•Fórmulas que estão interessadas em B1 ficam
sabendo que houve mudança assincronamente
através de uma mensagem dizendo que a célula B1
mudou de valor
•Cada fórmula então reage a esta mensagem,
causando seu efeito colateral
Sistemas reativos - parte 1
• Programação mais tradicional (chamarei de proativa nesta
apresentação) não é bom na nuvem pois:
• Há custos ao fazer polling
• Acoplar um cliente a uma tecnologia não reativa acaba
necessariamente gerando código repetitivo (ex: consumir
fila, controlar último id, while para chamar de tempos em
tempos, exponential backoff, tratamento de erros)
• Algumas empresas resolvem este problema usando
tecnologias e stacks + treinamentos que forçam os devs a
criarem sistemas reativos que aceitam streams como input
Sistemas reativos - parte 2
• Na prática, um projeto de software é uma junção de vários subsistemas que
precisam atuar de forma coesa. Sistemas reativos, idealmente devem:
• Ser resilientes -> devem tentar se recuperar de falhas sozinhos
• Ser elásticos -> devem funcionar em situações de auto-scaling (cores
/servidores), com altas cargas de processamento (respostas corretas a
tempo) e com eficiência de custos. A principal promessa da nuvem é a
cobrança proporcional ao uso. Somente sistemas com elasticidade
podem cumprir esta promessa
• Ser responsivos -> soma de resiliência e elasticidade!
• Ser message based -> a mensagem permite que o serviço (parte de uma
malha) reaja não só no nível de negócio, mas também, no nível de
infraestrutura.
Dados em sistemas reativos modernos
• Os dados precisam organizados e gerenciados mais seriamente no business. É
absolutamente mandatório haver gestão e controle sobre dados que circulam no
sistema reativo
• Serviços podem conter estado local. Entretanto, já é consenso que global state da
empresa inteira precisa ficar em um único lugar, para se tornar the single source of
truth da empresa
• A técnica mais conhecida de se fazer isso eficiente é através do uso de log centric
approach
• Log centric architecture implica na existência de event store
• O event store, além de guardar os eventos de negócio, é um reator.
Convenientemente notifica aos interessados quando há novas mensagens
• Frequentemente usa-se CQRS para criar projeções dos dados oriundos dos eventos.
Pode-se usar Event Sourcing para trabalhar diretamente com os eventos,
reconstruindo o estado do aggregate a cada vez que chegar uma consulta.
Parte 2
Programação
Funcional (no contexto de
programação reativa)
Programas reativos e programação funcional
• Programação funcional acaba sendo um enabler de programação
reativa. Tanto no nível de programas quanto no nível de sistemas
• Função pura sempre retorna a mesma saída para uma mesma
entrada, sem gerar efeitos colaterais
• Um serviço stateless puro pode ser visto como uma função “in
the large”
• É muito fácil escalar um serviço sem efeitos colaterais (I/O).
• É muito fácil paralelizar uma função pura / serviço stateless
• Um retorno de um serviço em stacks modernas pode ser síncrono
(via HTTP mesmo) ou assíncrono (um evento publicado)
Programas reativos e programação funcional
• Em um ambiente de microsserviços logicamente há menos linhas de
código por serviço. Isso ajuda a:
• Fazer apenas o que a regra de negócio precisa, sem pensar em
código de coordenação
• Usar stacks diferentes (um serviço em Scala pode mandar
mensagens para outro em C# normalmente)
• Deixa de fazer sentido técnicas como IoC / DI, DDD, proliferação
de interfaces e amigos
• Passa a fazer ainda mais sentido considerar o uso de uma stack
reativa como Akka (em Java, Scala ou .NET), pois estamos
idealmente apenas processamento mensagens em série.
Programas reativos e programação funcional
• Já que só estamos querendo processar uma mensagem, não
precisamos de uma classe. Muitas vezes só queremos
executar uma função.
• Em cenários serverless e reativos esta questão fica ainda
mais clara: uma function pode ser literalmente publicada
com menos de 10 linhas de código!
• O uso de funções permite fazer coisas muito simples, como
também, permite construir abstrações absurdamente
complexas. Cuidado para não deixar sua empresa ficar
inacessível a novos programadores 
Parte 3
Serverless
Espectro do uso de serviços na nuvem
O que é serverless mesmo? O que não é serveless?
• Nesta apresentação, vou seguir o consenso de que
serverless é tecnologia que executa seu código e só
cobra por número de chamadas / execuções, não
cobrando absolutamente nada quando o código não está
em execução.
• Não consideramos serverless estratégias PaaS ou
mesmo, estratégias de conteinerização on-demand, já
que nestes casos, cobra-se por tempo de alocação dos
recursos e não por número de mensagens.
Tecnologias no Azure
• Principais Tecnologias Serverless no Azure
• Azure Functions: principal player
• CosmosDB: banco de dados multi-modelo que
também é um reator!
• Event Grid: principal reator do Azure
• Event Hubs: ingestão de logs de alta performance
• Stream Analytics: processamento de dados em tempo
real
Azure Functions é *&(* pra &(($#@! Serverless Reactive Programming for the win!
• Rodar uma função na nuvem já é muito vantajoso.
• O modelo de bindings (anotações nas funções) habilitam programação reativa em um
ambiente serverless.
• O Azure em si atua é um reator. Nós pagamos por este serviço, proporcionalmente ao
uso. Isso muda tudo. Mesmo um modelo conteinerizado não consegue facilmente este
grau de reatividade com tão pouco investimento de código e dinheiro
• Trabalhar com functions já é ergonômico tanto em C#, quanto F# e JavaScript.
• É possível incluir pacotes usando NPM quando se fala em funções js
• É possível trabalhar com Paket e Fake (F# Make) quando se fala em F#
• Bindings podem ser declarados em um arquivo json ou em atributos do .net
• Frequentemente heavy-lifting de infra é feito pelo runtime do Azure Functions. É
possível “injetar” um client ou mesmo, uma query parametrizada!
Azure Functions - Detalhes
•Desde o Build 2018 é possível contar com
Durable Functions em GA. Ou seja, é possível
criar workflows complexos (impossíveis de
fazer com Azure Logic Apps) e armazenar
estado entre as chamadas de funções. Isso
abre ainda mais possibilidades, baratas, de se
colocar algo no ar rapidamente.
Azure Functions – Detalhes 2
• Há duas versões de Azure Functions:
• V1: runtime antigo
• V2: runtime novo em .net core. Ainda está em preview, mas já é muito confiável Ainda há muita coisa em
finalização ATOW (Julho de 2018)
• É possível construir um pequeno api gateway com Azure Functions Proxies – muito mais barato do que um full-fledged
API Gateway do Azure
• Há previsão de suporte a outras linguagens de programação mas ainda deve demorar para ficar pronto para prime
time. Estão previstos Node.JS, Java e Python na V2. Java já está em preview.
• É possível trabalhar com Visual Studio Code em 100% dos projetos
• Instale as extensões do Azure e Azure Functions
• C#: instale a extensão padrão oficial. É possível criar scripts csx para funções pequenas.
• F#: instale Ionide, Paket e Fake. A melhor forma de se trabalhar é usando precompiled functions.
• JS: suporte a hot-reload funciona bem. Tipagem dinâmica é adorável. É possível ter funções com menos de 5
linhas!
• Experiência desenvolvimento é satisfatória, mas pode melhorar. Uso de Postman/Fiddler é indispensável.
• Não hesite em criar mais de uma “function app”. Pode haver funções que sejam mais convenientes de serem criadas
em JS e outras em C# e ainda outras em F#.
Parte 4
Demo time!
Stack utilizada para a Demo
•Front-end:
•React, Redux, Redux-saga, SignalR client, ES6
•Não há servidor web na nuvem!
•Serverless back-end:
•Azure Functions em F# e JS
•CosmosDB + Change Feed Notifications
•Azure SignalR Service (Build 2018, preview!)
•Azure Event Grid
Término da apresentação
Conclusão
Notas Finais
• Empreendedores: comecem pelo serverless
• Custos de CosmosDB podem ser altos – considere criar o mínimo de collections por
enquanto
• Ao migrar para um modelo reativo, baseado em eventos e mensagens, planeje
seriamente como será a gestão dos eventos, bounded contexts, nomenclatura,
documentação, evolução de eventos e replay de eventos
• Não é fácil programar de forma assíncrona. Mesmo localmente não é intuitivo.
Programação reativa precisa ser sentida na prática. É como dirigir ou andar de
bicicleta
• Eventos são a chave para multiplicar a capacidade criativa das empresas. Estratégias
de migração para nuvem e para microsserviços devem obrigatoriamente considerar a
produção e armazenamento de eventos corporativos
• Eventos são ativos da empresa. Cuide bem deles.
Notas Finais
•Front-end: para projetos sérios considere apenas
React, que é o padrão de-facto de grandes
empresas mundialmente. Para front-end, é o que
há de mais reativo em sua essência
•Mesmo que Angular fale sobre observables e cite
casos de uso, IMHO não vejo angular como um
framework que facilite a criação de apps reativas
•Estudem Elm! Estudem React! É um caminho
íngreme. Mas a foto lá de cima compensa 
Muito Obrigado!
Mário Meyrelles - @mariomeyrelles
mario.meyrelles@gmail.com
(11) 3290-8519
(19) 99379-9796

Mais conteúdo relacionado

Mais procurados

.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?Letticia Nicoli
 
Testes com xUnit + Coding Dojo
Testes com xUnit + Coding DojoTestes com xUnit + Coding Dojo
Testes com xUnit + Coding DojoLetticia Nicoli
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservicestdc-globalcode
 
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTaise Dias da Silva
 
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimentoDevops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimentoThiago Ferreira
 
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIsDevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIsJúnior Porfirio
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosRafael Chaves
 
TDC2016SP - Infra ágil: conceito e prática
TDC2016SP - Infra ágil: conceito e práticaTDC2016SP - Infra ágil: conceito e prática
TDC2016SP - Infra ágil: conceito e práticatdc-globalcode
 
Desenvolvendo uma App multiplataforma compartilhando 90% do código
Desenvolvendo uma App multiplataforma compartilhando 90% do códigoDesenvolvendo uma App multiplataforma compartilhando 90% do código
Desenvolvendo uma App multiplataforma compartilhando 90% do códigoGuilherme Heynemann Bruzzi
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringEder Magalhães
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareLucas Teles
 
TDC SP 2016 - Dos requisitos à implantação em uma palestra
TDC SP 2016 - Dos requisitos à implantação em uma palestraTDC SP 2016 - Dos requisitos à implantação em uma palestra
TDC SP 2016 - Dos requisitos à implantação em uma palestraRafael Chaves
 
DevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de SoftwareDevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de SoftwarePaulo Lacerda
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funcionaRodrigo Serradura
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberCamilo Lopes
 
DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014Rodrigo Campos
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - IntroduçãoRodrigo Branas
 

Mais procurados (20)

.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
Testes com xUnit + Coding Dojo
Testes com xUnit + Coding DojoTestes com xUnit + Coding Dojo
Testes com xUnit + Coding Dojo
 
Bdd&tdd
Bdd&tddBdd&tdd
Bdd&tdd
 
TDC2016SP - Trilha Microservices
TDC2016SP - Trilha MicroservicesTDC2016SP - Trilha Microservices
TDC2016SP - Trilha Microservices
 
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passosTheDevConf 2016 - Análise efetiva de microservices em 3 passos
TheDevConf 2016 - Análise efetiva de microservices em 3 passos
 
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimentoDevops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
Devops CI/CD: Obtendo qualidade de vida para o time de desenvolvimento
 
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIsDevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
DevPira Festival 21 - .NET6 Uma nova forma de construir apis MinimalAPIs
 
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutosTDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
 
TDC2016SP - Infra ágil: conceito e prática
TDC2016SP - Infra ágil: conceito e práticaTDC2016SP - Infra ágil: conceito e prática
TDC2016SP - Infra ágil: conceito e prática
 
Desenvolvendo uma App multiplataforma compartilhando 90% do código
Desenvolvendo uma App multiplataforma compartilhando 90% do códigoDesenvolvendo uma App multiplataforma compartilhando 90% do código
Desenvolvendo uma App multiplataforma compartilhando 90% do código
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo software
 
TDC SP 2016 - Dos requisitos à implantação em uma palestra
TDC SP 2016 - Dos requisitos à implantação em uma palestraTDC SP 2016 - Dos requisitos à implantação em uma palestra
TDC SP 2016 - Dos requisitos à implantação em uma palestra
 
DevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de SoftwareDevOps - Entrega Contínua de Software
DevOps - Entrega Contínua de Software
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funciona
 
TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saber
 
DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014
 
#1 - Git - Introdução
#1 - Git - Introdução#1 - Git - Introdução
#1 - Git - Introdução
 
Novidades do C#6
Novidades do C#6 Novidades do C#6
Novidades do C#6
 
Novidades do c#6
Novidades do c#6Novidades do c#6
Novidades do c#6
 

Semelhante a Serverless Reactive Programming on Azure

Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoLuiz Costa
 
Introdução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NETIntrodução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NETMário Meyrelles
 
MIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoMIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoCaio Candido
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...iMasters
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoDarlan Segalin
 
O desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicosO desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicosGraziella Bonizi
 
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...Luiz Costa
 
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...tdc-globalcode
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal RailsLuiz Costa
 
Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Flávio Lisboa
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devopsDiego Pacheco
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_jsgustavobeavis
 
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaTdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaDextra Sistemas / Etec Itu
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Renato Groff
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvemAdriano Bertucci
 
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso SalesforceCloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso SalesforceFernando Carvalho
 

Semelhante a Serverless Reactive Programming on Azure (20)

Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um LegadoComo DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
 
Introdução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NETIntrodução a arquitetura de sistemas com .NET
Introdução a arquitetura de sistemas com .NET
 
MIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoMIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como Código
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 
Transformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualizaçãoTransformando a ti com cloud computing e virtualização
Transformando a ti com cloud computing e virtualização
 
O desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicosO desafio de sustentar centenas de servicos
O desafio de sustentar centenas de servicos
 
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
Modular Monoliths - Como é possível organizar sua aplicação para habilitar um...
 
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
TDC2018SP | Trilha Microservices - Modular Monoliths - Como e possivel organi...
 
Hexagonal Rails
Hexagonal RailsHexagonal Rails
Hexagonal Rails
 
Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3
 
Workshop soa, microservices e devops
Workshop soa, microservices e devopsWorkshop soa, microservices e devops
Workshop soa, microservices e devops
 
Aula01
Aula01Aula01
Aula01
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_js
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério NizzolaTdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
Tdc Future 2021 - simples soluções grandes resultados - Márcio Rogério Nizzola
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016
 
Trabalhando com ALM na nuvem
Trabalhando com ALM na nuvemTrabalhando com ALM na nuvem
Trabalhando com ALM na nuvem
 
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso SalesforceCloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
Cloud Computing: Desafios de Arquiteturas multitenantes e o Caso Salesforce
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 

Mais de tdc-globalcode

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadetdc-globalcode
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...tdc-globalcode
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucessotdc-globalcode
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPAtdc-globalcode
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinotdc-globalcode
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...tdc-globalcode
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicestdc-globalcode
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publicatdc-globalcode
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#tdc-globalcode
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocustdc-globalcode
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?tdc-globalcode
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golangtdc-globalcode
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QAtdc-globalcode
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciatdc-globalcode
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Servicetdc-globalcode
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETtdc-globalcode
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8tdc-globalcode
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#tdc-globalcode
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Coretdc-globalcode
 

Mais de tdc-globalcode (20)

TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidadeTDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
 
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
 
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de SucessoTDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
 
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPATDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
 
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVinoTDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
 
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
 
TDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devicesTDC2019 Intel Software Day - Inferencia de IA em edge devices
TDC2019 Intel Software Day - Inferencia de IA em edge devices
 
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca PublicaTrilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
 
Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case EasylocusTDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Go - Case Easylocus
 
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
 
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em GolangTDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - Clean architecture em Golang
 
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QATDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
 
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendenciaTDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
 
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR ServiceTDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
 
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NETTDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
 
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - .NET funcional com F#
 
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net CoreTDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor  em .Net Core
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
 

Último

William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfAdrianaCunha84
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptMaiteFerreira4
 
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdfCD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdfManuais Formação
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOColégio Santa Teresinha
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.silves15
 
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.MrPitobaldo
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Mary Alvarenga
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxOsnilReis1
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesMary Alvarenga
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Centro Jacques Delors
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMVanessaCavalcante37
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?Rosalina Simão Nunes
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxLuizHenriquedeAlmeid6
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -Aline Santana
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfAlissonMiranda22
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividadeMary Alvarenga
 

Último (20)

William J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdfWilliam J. Bennett - O livro das virtudes para Crianças.pdf
William J. Bennett - O livro das virtudes para Crianças.pdf
 
Literatura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.pptLiteratura Brasileira - escolas literárias.ppt
Literatura Brasileira - escolas literárias.ppt
 
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdfCD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
CD_B3_C_ Criar e editar conteúdos digitais em diferentes formatos_índice.pdf
 
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃOLEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
LEMBRANDO A MORTE E CELEBRANDO A RESSUREIÇÃO
 
A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.A horta do Senhor Lobo que protege a sua horta.
A horta do Senhor Lobo que protege a sua horta.
 
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
1.ª Fase do Modernismo Brasileira - Contexto histórico, autores e obras.
 
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
 
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptxATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
ATIVIDADE AVALIATIVA VOZES VERBAIS 7º ano.pptx
 
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -XI OLIMPÍADAS DA LÍNGUA PORTUGUESA      -
XI OLIMPÍADAS DA LÍNGUA PORTUGUESA -
 
Em tempo de Quaresma .
Em tempo de Quaresma                            .Em tempo de Quaresma                            .
Em tempo de Quaresma .
 
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
Orientação Técnico-Pedagógica EMBcae Nº 001, de 16 de abril de 2024
 
A Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das MãesA Arte de Escrever Poemas - Dia das Mães
A Arte de Escrever Poemas - Dia das Mães
 
Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029Apresentação | Eleições Europeias 2024-2029
Apresentação | Eleições Europeias 2024-2029
 
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEMCOMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
COMPETÊNCIA 1 DA REDAÇÃO DO ENEM - REDAÇÃO ENEM
 
E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?E agora?! Já não avalio as atitudes e valores?
E agora?! Já não avalio as atitudes e valores?
 
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptxSlides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
Slides Lição 03, Central Gospel, O Arrebatamento, 1Tr24.pptx
 
CINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULACINEMATICA DE LOS MATERIALES Y PARTICULA
CINEMATICA DE LOS MATERIALES Y PARTICULA
 
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
DESAFIO LITERÁRIO - 2024 - EASB/ÁRVORE -
 
RedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdfRedacoesComentadasModeloAnalisarFazer.pdf
RedacoesComentadasModeloAnalisarFazer.pdf
 
Música Meu Abrigo - Texto e atividade
Música   Meu   Abrigo  -   Texto e atividadeMúsica   Meu   Abrigo  -   Texto e atividade
Música Meu Abrigo - Texto e atividade
 

Serverless Reactive Programming on Azure

  • 1. Serverless Reactive Programming on Azure Mário Meyrelles @mariomeyrelles TDC 2018 | 18/07/2018
  • 2. Plano da Apresentação Contextualização Programação Reativa Serverless no Azure Demo time ! Serverless CQRS
  • 4. Histórico > Anos 2000 aplicação antigamente era apenas um formulário gerado pelo servidor | não havia interações ricas com o usuário | alto grau de automação de construção de telas | frameworks | fábricas de software e fordismo de sw | projetos com grandes quantidades de telas | eram os deuses Arquitetos? | orm | bancos de dados com muitas regras | alto risco de mudança | degeneração de projetos | medo de javascript | conforto em stack Microsoft | zero open-source | web forms muito complexos ou js mais simples? |
  • 5. Histórico > Fim dos anos 2000 e começo dos anos 2010 ajax com office web apps e gmail | telas não podem mais piscar | surgimento do iPhone | modernização de browsers | IE hell | jQuery | novas ideias como layouts responsivos | modelo Web Forms obsoleto | MVC como novo padrão | devs forçados a repensar padrões | corrida pelo ouro: mobile apps | startups e novas stacks | primeiros frameworks js | cloud computing becoming mainstream | ........
  • 6. Histórico > Sistemas até o meio desta década apps repensadas para rodar na nuvem | internet acessível a mais gente | melhores browsers | celulares acessam mais a web do que browsers | JavaScript = principal ling de prog da década | 2014 = ano do JavaScript | corrida para entender como funciona o this | backend é apenas fornecedor de json? | front-end cresce | css 3 | workflows de build | UX e UI muito superiores | apps responsivas | cordovização | html js css em qualquer client | modernização do javascript. MAS...................
  • 7. Histórico > Novos mundos, velhos problemas no meio desta década será que sabemos fazer um sistema? | pressa de se chegar onde não se queria | o mundo não é feito só de startups | o mundo corporativo também quer tela bonita| fábricas de software continuaram vendendo o discurso de sempre | prazos sempre apertados | devs clássicos = truques velhos = ferramentas novas | ecossistema em plena evolução | acúmulo telas abarrotadas de $.ajax, $.each e etc. | backend crescendo em complexidade | software “novo” = “novo” legado | legados bem velhos e legados novos querem ir para a nuvem | monolitos começam a ser quebrados!
  • 8. Contextualização > Novos mundos, velhos problemas: backend do mundo corporativo complexidade de deploy, gmuds, concorrência de pacotes | multicanais + multidispositivos = muitas novas demandas | crescimento maciço dos sistemas | custos brutais de infra (gente + sw + infra) | terceirização frustrante de infra (pelo menos no Brasil) | busca de flexibilidade para responder às startups inovadoras | crescimento maciço de integrações entre sistemas | problemas de performance eram| backends para aplicações pós 2010 são muito complexos. Pré-2010 também | saímos de bolovo para chegar aonde? ddd? sabemos fazer um sistema?
  • 9. Contextualização > Ida para Nuvem muitas empresas começaram a migração para a nuvem migrando sistemas as-is -> IaaS | redução de custos de manutenção e pessoas tornaram a migração atrativa | times de dev e infra ainda em adaptação | técnicas construtivas modernas | práticas de DevOps | migração progressiva para PaaS, Containers e FaaS | grandes investimentos em quebra de monolitos
  • 10. Contextualização > Ida para Nuvem > Novos Paradigmas algumas empresas inovadoras conseguiram se beneficiar de um modelo de programação assíncrono e baseado em mensagens para conseguir alocar recursos computacionais proporcionais ao seu uso, com resiliência e responsividade a falhas. O [reactive manifesto] surgiu em 2013 e desde então cada vez mais vem se popularizando.
  • 11. Contextualização > Ida para Nuvem > Novos Paradigmas para suportar cenários reativos, os times de engenharia perceberam que programação orientada a objetos simplesmente não ajuda neste tipo de implementação. [programação funcional] honra princípios de design que ajudam a construir sistemas mais facilmente escaláveis e simples
  • 13. O que você precisa saber sobre programação reativa sem enrolação • Programação reativa implica em forte desacoplamento das causas (clicks na tela, chegada de dados de um websocket) e efeitos (mostrar dados na tela, chamar outro sistema) • A causa simplesmente notifica • O efeito simplesmente reage (observer) • Um frawework recebe as mudanças de estado e as publica para os interessados -> Reactive Extensions, React, Akka Streams, Spring Reactor , ferramentas no Azure. nesta apresentação chamaremos isso de reator (observable) neste contexto .
  • 14. Programas reativos de forma simples • Programas reativos devem produzem mensagens comunicando solicitações de mudanças de estado. tudo deve ser tipado como uma mensagem. esta mudança de mindset é grande e aumenta o custo inicial do projeto. • Mudanças de estado podem ser causadas também por um fluxo de dados. Posso querer reagir a características específicas de um flow. • Após o reator analisar a mensagem, decide o que fazer e toma as devidas medidas, assincronamente, para executar o que foi pedido. • Se o estado global da aplicação for alterado, o reator comunica os observers que houve uma mudança (flux architecture!) • Observer simplesmente vai para um estado novo idealmente sem se importar com o estado anterior (nem sempre é possível)
  • 15. Exemplo prático! Planilha Excel •Usuário altera um valor na célula B1 •Excel (reator) captura a mudança de estado. •Fórmulas que estão interessadas em B1 ficam sabendo que houve mudança assincronamente através de uma mensagem dizendo que a célula B1 mudou de valor •Cada fórmula então reage a esta mensagem, causando seu efeito colateral
  • 16. Sistemas reativos - parte 1 • Programação mais tradicional (chamarei de proativa nesta apresentação) não é bom na nuvem pois: • Há custos ao fazer polling • Acoplar um cliente a uma tecnologia não reativa acaba necessariamente gerando código repetitivo (ex: consumir fila, controlar último id, while para chamar de tempos em tempos, exponential backoff, tratamento de erros) • Algumas empresas resolvem este problema usando tecnologias e stacks + treinamentos que forçam os devs a criarem sistemas reativos que aceitam streams como input
  • 17. Sistemas reativos - parte 2 • Na prática, um projeto de software é uma junção de vários subsistemas que precisam atuar de forma coesa. Sistemas reativos, idealmente devem: • Ser resilientes -> devem tentar se recuperar de falhas sozinhos • Ser elásticos -> devem funcionar em situações de auto-scaling (cores /servidores), com altas cargas de processamento (respostas corretas a tempo) e com eficiência de custos. A principal promessa da nuvem é a cobrança proporcional ao uso. Somente sistemas com elasticidade podem cumprir esta promessa • Ser responsivos -> soma de resiliência e elasticidade! • Ser message based -> a mensagem permite que o serviço (parte de uma malha) reaja não só no nível de negócio, mas também, no nível de infraestrutura.
  • 18. Dados em sistemas reativos modernos • Os dados precisam organizados e gerenciados mais seriamente no business. É absolutamente mandatório haver gestão e controle sobre dados que circulam no sistema reativo • Serviços podem conter estado local. Entretanto, já é consenso que global state da empresa inteira precisa ficar em um único lugar, para se tornar the single source of truth da empresa • A técnica mais conhecida de se fazer isso eficiente é através do uso de log centric approach • Log centric architecture implica na existência de event store • O event store, além de guardar os eventos de negócio, é um reator. Convenientemente notifica aos interessados quando há novas mensagens • Frequentemente usa-se CQRS para criar projeções dos dados oriundos dos eventos. Pode-se usar Event Sourcing para trabalhar diretamente com os eventos, reconstruindo o estado do aggregate a cada vez que chegar uma consulta.
  • 19. Parte 2 Programação Funcional (no contexto de programação reativa)
  • 20. Programas reativos e programação funcional • Programação funcional acaba sendo um enabler de programação reativa. Tanto no nível de programas quanto no nível de sistemas • Função pura sempre retorna a mesma saída para uma mesma entrada, sem gerar efeitos colaterais • Um serviço stateless puro pode ser visto como uma função “in the large” • É muito fácil escalar um serviço sem efeitos colaterais (I/O). • É muito fácil paralelizar uma função pura / serviço stateless • Um retorno de um serviço em stacks modernas pode ser síncrono (via HTTP mesmo) ou assíncrono (um evento publicado)
  • 21. Programas reativos e programação funcional • Em um ambiente de microsserviços logicamente há menos linhas de código por serviço. Isso ajuda a: • Fazer apenas o que a regra de negócio precisa, sem pensar em código de coordenação • Usar stacks diferentes (um serviço em Scala pode mandar mensagens para outro em C# normalmente) • Deixa de fazer sentido técnicas como IoC / DI, DDD, proliferação de interfaces e amigos • Passa a fazer ainda mais sentido considerar o uso de uma stack reativa como Akka (em Java, Scala ou .NET), pois estamos idealmente apenas processamento mensagens em série.
  • 22. Programas reativos e programação funcional • Já que só estamos querendo processar uma mensagem, não precisamos de uma classe. Muitas vezes só queremos executar uma função. • Em cenários serverless e reativos esta questão fica ainda mais clara: uma function pode ser literalmente publicada com menos de 10 linhas de código! • O uso de funções permite fazer coisas muito simples, como também, permite construir abstrações absurdamente complexas. Cuidado para não deixar sua empresa ficar inacessível a novos programadores 
  • 24. Espectro do uso de serviços na nuvem
  • 25. O que é serverless mesmo? O que não é serveless? • Nesta apresentação, vou seguir o consenso de que serverless é tecnologia que executa seu código e só cobra por número de chamadas / execuções, não cobrando absolutamente nada quando o código não está em execução. • Não consideramos serverless estratégias PaaS ou mesmo, estratégias de conteinerização on-demand, já que nestes casos, cobra-se por tempo de alocação dos recursos e não por número de mensagens.
  • 26. Tecnologias no Azure • Principais Tecnologias Serverless no Azure • Azure Functions: principal player • CosmosDB: banco de dados multi-modelo que também é um reator! • Event Grid: principal reator do Azure • Event Hubs: ingestão de logs de alta performance • Stream Analytics: processamento de dados em tempo real
  • 27. Azure Functions é *&(* pra &(($#@! Serverless Reactive Programming for the win! • Rodar uma função na nuvem já é muito vantajoso. • O modelo de bindings (anotações nas funções) habilitam programação reativa em um ambiente serverless. • O Azure em si atua é um reator. Nós pagamos por este serviço, proporcionalmente ao uso. Isso muda tudo. Mesmo um modelo conteinerizado não consegue facilmente este grau de reatividade com tão pouco investimento de código e dinheiro • Trabalhar com functions já é ergonômico tanto em C#, quanto F# e JavaScript. • É possível incluir pacotes usando NPM quando se fala em funções js • É possível trabalhar com Paket e Fake (F# Make) quando se fala em F# • Bindings podem ser declarados em um arquivo json ou em atributos do .net • Frequentemente heavy-lifting de infra é feito pelo runtime do Azure Functions. É possível “injetar” um client ou mesmo, uma query parametrizada!
  • 28. Azure Functions - Detalhes •Desde o Build 2018 é possível contar com Durable Functions em GA. Ou seja, é possível criar workflows complexos (impossíveis de fazer com Azure Logic Apps) e armazenar estado entre as chamadas de funções. Isso abre ainda mais possibilidades, baratas, de se colocar algo no ar rapidamente.
  • 29. Azure Functions – Detalhes 2 • Há duas versões de Azure Functions: • V1: runtime antigo • V2: runtime novo em .net core. Ainda está em preview, mas já é muito confiável Ainda há muita coisa em finalização ATOW (Julho de 2018) • É possível construir um pequeno api gateway com Azure Functions Proxies – muito mais barato do que um full-fledged API Gateway do Azure • Há previsão de suporte a outras linguagens de programação mas ainda deve demorar para ficar pronto para prime time. Estão previstos Node.JS, Java e Python na V2. Java já está em preview. • É possível trabalhar com Visual Studio Code em 100% dos projetos • Instale as extensões do Azure e Azure Functions • C#: instale a extensão padrão oficial. É possível criar scripts csx para funções pequenas. • F#: instale Ionide, Paket e Fake. A melhor forma de se trabalhar é usando precompiled functions. • JS: suporte a hot-reload funciona bem. Tipagem dinâmica é adorável. É possível ter funções com menos de 5 linhas! • Experiência desenvolvimento é satisfatória, mas pode melhorar. Uso de Postman/Fiddler é indispensável. • Não hesite em criar mais de uma “function app”. Pode haver funções que sejam mais convenientes de serem criadas em JS e outras em C# e ainda outras em F#.
  • 31. Stack utilizada para a Demo •Front-end: •React, Redux, Redux-saga, SignalR client, ES6 •Não há servidor web na nuvem! •Serverless back-end: •Azure Functions em F# e JS •CosmosDB + Change Feed Notifications •Azure SignalR Service (Build 2018, preview!) •Azure Event Grid
  • 33. Notas Finais • Empreendedores: comecem pelo serverless • Custos de CosmosDB podem ser altos – considere criar o mínimo de collections por enquanto • Ao migrar para um modelo reativo, baseado em eventos e mensagens, planeje seriamente como será a gestão dos eventos, bounded contexts, nomenclatura, documentação, evolução de eventos e replay de eventos • Não é fácil programar de forma assíncrona. Mesmo localmente não é intuitivo. Programação reativa precisa ser sentida na prática. É como dirigir ou andar de bicicleta • Eventos são a chave para multiplicar a capacidade criativa das empresas. Estratégias de migração para nuvem e para microsserviços devem obrigatoriamente considerar a produção e armazenamento de eventos corporativos • Eventos são ativos da empresa. Cuide bem deles.
  • 34. Notas Finais •Front-end: para projetos sérios considere apenas React, que é o padrão de-facto de grandes empresas mundialmente. Para front-end, é o que há de mais reativo em sua essência •Mesmo que Angular fale sobre observables e cite casos de uso, IMHO não vejo angular como um framework que facilite a criação de apps reativas •Estudem Elm! Estudem React! É um caminho íngreme. Mas a foto lá de cima compensa 
  • 35. Muito Obrigado! Mário Meyrelles - @mariomeyrelles mario.meyrelles@gmail.com (11) 3290-8519 (19) 99379-9796