SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
COMPOSIÇÃO E INTEGRAÇÃO
DE SISTEMAS EM 2013
Leandro Silva
TDC 2013
http://leandrosilva.com.br
@codezone
http://github.com/leandrosilva
QUEM SOU EU?
LEANDRO SILVA @codezone
•+15 na indústria (escrevendo software de produção)
•Fissurado em programação (Ruby, Java, Erlang, Clojure, C#, F#)
•Blogueiro preguiçoso (http://leandrosilva.com.br)
•Já fui gerente de sistemas, arquiteto de sistemas, líder técnico,
programador e instrutor de programação e arquitetura
•Tenho código no GitHub (https://github.com/leandrosilva)
•E perfil no LinkedIn (http://linkedin.com/in/lesilva)
NÃO SOU
UM .NET EXPERT
CONSEGUE LIDAR
COM ISSO?
PROSIGAMOS...
.NET NÃO É MAIS
O PATINHO FEIO
ASP.NET MVC
C#
Entity Framework
Web API
F#
Ninject
Unit Testing Framework
NUnit
SignalR
Reactive Extensions
LINQ
Razor
HDInsight
a.k.a. Hadoop on Azure
async Redis
Log4Net
ActorFx
The Actors Framework for Azure
“É POSSIVEL
CONSTRUIR
SISTEMAS
BEM
DECENTES
COM .NET”
– BlackWidow
COMUNIDADE
hadoop
rest
json
javascript
redis
unit testing
mvc
orm
STANDARD
OPEN SOURCE
git
“NÃO
QUEIRA
BANCAR O
GÊNIO.
APENAS SIGA
A DROGA DO
PADRÃO!”
– Nick Fury
COMO INTEGRAR
SISTEMAS HOJE?
“SIMPLES. USE HTTP &
JSON. E CRIE ALGUNS
MICRO-SERVIÇOS.”
–Tony Stark
“ESQUEÇA OS PROTOCOLOS
PROPRIETÁRIOS. USE PADRÕES
ABERTOS E CONHECIDOS DE TODOS.”
–Tony Stark
“ATUALMENTE, SÓ
CONSTRUO MEUS
MICRO-SERVIÇOS
USANDO ASP.NET MVC
WEB API. É SIMPLES E
MUITO SEXY.”
– BlackWidow
AFINAL, O QUE SÃO
MICRO-SERVIÇOS?
“NÃO HÁ UMA DEFINIÇÃO
EXATA DO QUE É UM
MICRO-SERVIÇO, MAS UMA
SÉRIE DE PRINCÍPIOS QUE
PODEM SER OBSERVADOS.”
fracamente acoplados
algumas poucas linhas de código
favorecem a reescrita
escritos em frameworks leves
deployados independentemente
web apis com poucas rotas
domínio específico
interface opaca
favorecem a composição
repositórios de código independentes
uma responsabilidade
PRINCÍPIOS FUNDAMENTAIS
PARA INTEGRAÇÃO DE
SISTEMAS
PRINCÍPIOS FUNDAMENTAIS
PARA INTEGRAÇÃO DE
SISTEMAS
O QUE VOCÊ PECISA SABER
CRIAR
EM PLENO 2013
* Nada do que vou dizer
é tão novo assim. Sorry!
INTEGRAR
E
DECOMPOSIÇÃO
THE ALMIGHTY WEB SERVICE
BADASS
MICRO
SERVICE
BADASS
MICRO
SERVICE
BADASS
MICRO
SERVICE
BADASS
MICRO
SERVICE
BADASS
MICRO
SERVICE
BADASS
MICRO
SERVICE
“Todas as vezes que você tem um componente que faz 1000 coisas, com dezenas de
dependentes, você sofre com a manutenção, com a escala do time de desenvolvimento
e com a disponibilidade do serviço, só para citar alguns problemas.”
(Cuidado! Compartilhar classes de
domínio é legal, mas tende a
migrar o gesso para outro lugar. Um
pouco de duplicação de código
“nem sempre” é um problema.)
COMPOSIÇÃO
WEB
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MOBILE WORKER
Application Domain Logic Application Domain Logic Application Domain Logic
“Micro-serviços são como pacotes de procedimentos e funções, que
as aplicações usam para compor suas próprias regras de negócio
especializadas. Mas o ideal é que não sejam muito abrangentes.”
(Regras de negócio que são
fundamentais à empresa,
devem estar contidas em
micro-serviços. As demais, nas
apps; ainda que haja uma ou
outra duplicação de código.)
(DICA: Windows Task Scheduler + cURL,
por exemplo, já dá conta aqui. Não
precisa nem reinventar a roda.)
(É “micro”, lembra?!)
ESPECIALIZAÇÃO
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
“Cada micro-serviço deve
ter uma única
responsabilidade, com um
contrato muito bem
definido, e deve fazer muito
bem o seu trabalho.”
The Unix Way
bitch!
(Em alguns casos, você pode granularizar
por domínio. Mas se o domínio for amplo,
granularize ainda um pouco mais.)
ISOLAMENTO
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
“A falha em um micro-
serviço não deve afetar os
demais. Nem devem as apps
consumidoras serem
drasticamente afetadas.”
puff!
crash!
Yeah, let it crash
(A regra aqui é um Web
API Project por micro-
serviço. Quero dizer, um
deploy por micro-serviço.)
(Na hora de escalar, isso também vai te ajudar a
botar recurso onde realmente precisa de recurso.)
SIMPLICIDADE
APP
MICRO
SERVICE
GET /top/secret/data/123
X-Auth-User: codezone
X-Auth-Ticket: k3ki7s1mpl3stuff898sdATy7why3noT83ab
POST /ticket
X-Auth-User: codezone
X-Auth-Request-Timestamp: 2013081506
X-Auth-Token: h3J87Ui2i90oLkLL8j4khUUij282h3
HTTP/1.1 200 OK
X-Auth-Ticket: k3ki7s1mpl3stuff898sdATy7why3noT83ab
AUTH
DLL
(Token = Hash(User + SecretKey + Timestamp))
(Lembre-se: Ticket precisa
ter um tempo de validade)
(Agora é só validar se existe esse ticket associado
a esse usuário e se ele ainda está válido)
Não precisa
implementar IGUALZINHO. Isso é só
uma idéia!
ASSINCRONICIDADE
APP
MICRO
SERVICE
GET /some/big/task/i7s898sdATy
POST /some/big/task
{ “A”: “123”, “B”: “456” }
HTTP/1.1 200 OK
{ “SomeBigTaskID”: “i7s898sdATy” }
QUEUE
WORKER
DATABASE
(Se a coisa pode demorar, fuja do síncrono!)
(Uma outra abordagem aqui seria usar
Web Hook. Ou seja, receber um post
dizendo que o processo terminou.)
LOGGING
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
EVENTVIEWER GRAYLOG
LOG4NET
(EventLog) (Gelf4Net)
(Log tudo, absolutamente, tudo.
Só tome cuidado com dados
sensíveis. Não se empolgue!)
(É interessante ter um identificador
para a transação que está sendo
logada, de modo que ela possa ser
rastreada de ponta a ponta.)
(Ah! E logar as mensagens em
JSON também pode ser uma
boa, viu?! Ajuda a parsear e
extrair informações úteis.)
ACESSIBILIDADE
POST http://codezo.ne/api/deliveries/new
GET http://codezo.ne/api/deliveries/123
POST http://codezo.ne/api/deliveries/123/done
DELETE http://codezo.ne/api/deliveries/123
POST http://codezo.ne/api/deliveries/tasks/sync
POST http://codezo.ne/api/deliveries/123/refused
GET http://codezo.ne/api/deliveries/doc
“Se você não quiser que seu micro-serviço seja odiado logo de cara, você
tem que prover uma boa URL e documentação facilmente acessível.”
(DICA: Cuidado para
não inchar a coisa.
É sempre bom
pensar na menor
unidade de
responsabilidade
que seu micro-
serviço pode ter. Às
vezes, por exemplo,
vale a pena botar as
tasks em outro
micro-serviço. Não
se deixe levar
apenas pela URI,
porque ela é só uma
interface com o
usuário.)
RESUMINDO
Esqueças as soluções proprietárias e os protocolos pesados
Use ASP.NET MVC Web API – é fácil, testável e tem tudo que você precisa
Crie um projeto e um repositório por micro-serviço
Mantenha seus micro-serviços bem pequenininhos – umas 100 LoC
Se você não consegue ter um micro-serviço inteiro na sua cabeça, quebre-o!
“Deploye” cada micro-serviço separadamente – hamm, app pools?
Ofereça URIs amigáveis e auto-explicativas
Tenha interfaces bem definidas e opacas para quem as vê
Sempre que possível, use um fluxo assíncrono
Autenticação/autorização simples – HTTP Header, user, token, ticket, expiration
Filters e Attributes são seus amigos na hora de autenticar/autorizar, aproveite!
Faça log tudo. Depois, faça log do que faltou
Agregue seus logs em algum lugar – EventViewer e mais algum outro agregador
Windows Task Scheduler + cURL + POST /tasks/do/something é legal
Construa uma fachada para seu ERP, você vai ser muito mais feliz – vai por mim
(In Memory Server para teste de integração)
(isso vai ter ajudar a escalar o desenvolvimento)
(não precisa ser tão purista em relação a REST)
(tem que ser uma coisa binária, entra X, saí Y)
(assim fica fácil de propagar)
(só cuidado para não deixar a coisa inchada, use o princípio dos micro-serviços)
DÚVIDAS?
MUITO OBRIGADO!
Leandro Silva
TDC 2013
http://leandrosilva.com.br
@codezone
http://github.com/leandrosilva

Mais conteúdo relacionado

Mais procurados

JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...iMasters
 
Discutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo SatoDiscutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo SatoThoughtworks
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsJosé Alexandre Macedo
 
Cultura DevOps e integração entre infra e devel
Cultura DevOps e integração entre infra e develCultura DevOps e integração entre infra e devel
Cultura DevOps e integração entre infra e develJose Augusto Carvalho
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariTaller Negócio Digitais
 
DevOps - A Origem
DevOps - A OrigemDevOps - A Origem
DevOps - A OrigemAndré Dias
 
DevOps, NoOps...afinal que raios é isso?
DevOps, NoOps...afinal que raios é isso?DevOps, NoOps...afinal que raios é isso?
DevOps, NoOps...afinal que raios é isso?Thiago Ganzarolli
 
Vivenciando dev ops para além da automação de infraestrutura 2.0
Vivenciando dev ops para além da automação de infraestrutura 2.0Vivenciando dev ops para além da automação de infraestrutura 2.0
Vivenciando dev ops para além da automação de infraestrutura 2.0Diego Pacheco
 
DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014Rodrigo Campos
 
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia IIDevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia IIAlefe Variani
 
DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014Leo Lorieri
 
Testando uma aplicação AngularJS utilizando o Karma
Testando uma aplicação AngularJS utilizando o KarmaTestando uma aplicação AngularJS utilizando o Karma
Testando uma aplicação AngularJS utilizando o KarmaHenrique Limas
 

Mais procurados (20)

JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
JS Experience 2017 - Utilizando a virtualização para simplificar o desenvolvi...
 
Discutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo SatoDiscutindo DevOps na pratica, por Danilo Sato
Discutindo DevOps na pratica, por Danilo Sato
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
Testes Automatizados
Testes AutomatizadosTestes Automatizados
Testes Automatizados
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 
Cultura DevOps e integração entre infra e devel
Cultura DevOps e integração entre infra e develCultura DevOps e integração entre infra e devel
Cultura DevOps e integração entre infra e devel
 
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian FerrariDrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
DrupalCamp SP 2015 - DevOps, por onde começar? Por Sebastian Ferrari
 
DevOps - A Origem
DevOps - A OrigemDevOps - A Origem
DevOps - A Origem
 
DevOps, NoOps...afinal que raios é isso?
DevOps, NoOps...afinal que raios é isso?DevOps, NoOps...afinal que raios é isso?
DevOps, NoOps...afinal que raios é isso?
 
Vivenciando dev ops para além da automação de infraestrutura 2.0
Vivenciando dev ops para além da automação de infraestrutura 2.0Vivenciando dev ops para além da automação de infraestrutura 2.0
Vivenciando dev ops para além da automação de infraestrutura 2.0
 
scrumbut
scrumbutscrumbut
scrumbut
 
Java virtual machine quantas linguas fala a jvm2
Java virtual machine   quantas linguas fala a jvm2Java virtual machine   quantas linguas fala a jvm2
Java virtual machine quantas linguas fala a jvm2
 
DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
O que é DevOps afinal?
O que é DevOps afinal?O que é DevOps afinal?
O que é DevOps afinal?
 
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia IIDevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
DevOps II - Ambientes padronizados e Monitoramento da Aplicação | Monografia II
 
Webinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros ÁgeisWebinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros Ágeis
 
DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014DevOps com Exemplos Práticos - QConRio 2014
DevOps com Exemplos Práticos - QConRio 2014
 
Testando uma aplicação AngularJS utilizando o Karma
Testando uma aplicação AngularJS utilizando o KarmaTestando uma aplicação AngularJS utilizando o Karma
Testando uma aplicação AngularJS utilizando o Karma
 

Semelhante a Princípios fundamentais para integração de sistemas com micro-serviços em ASP.NET MVC e Web API

[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
 
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...tdc-globalcode
 
Implantando Continuous Delivery com TFS
Implantando Continuous Delivery com TFSImplantando Continuous Delivery com TFS
Implantando Continuous Delivery com TFSAndré Dias
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Renato Groffe
 
Primeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-endPrimeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-endDiego Eis
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Renato Groff
 
O que você precisa saber para se tornar um dev front-end
O que você precisa saber para se tornar um dev front-endO que você precisa saber para se tornar um dev front-end
O que você precisa saber para se tornar um dev front-endDiego Eis
 
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...tdc-globalcode
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018Graziella Bonizi
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Denis Santos
 
TDC 2019 Cloud - Liberte sua arquitetura com cloud native
TDC 2019 Cloud - Liberte sua arquitetura com cloud nativeTDC 2019 Cloud - Liberte sua arquitetura com cloud native
TDC 2019 Cloud - Liberte sua arquitetura com cloud nativeAndré Paulovich
 
Arquitetura de Microservicos
Arquitetura de MicroservicosArquitetura de Microservicos
Arquitetura de MicroservicosNorberto Enomoto
 
12 Factor App Docker na Cloud e outras buzzwords
12 Factor App Docker na Cloud e outras buzzwords12 Factor App Docker na Cloud e outras buzzwords
12 Factor App Docker na Cloud e outras buzzwordsWaldemar Neto
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Rodrigo Branas
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!Mario Guedes
 
izCode Argumento Técnico
izCode Argumento TécnicoizCode Argumento Técnico
izCode Argumento Técnicojoaopauloaos
 
Microservices - Quebrando gigantes em pequenos
Microservices - Quebrando gigantes em pequenosMicroservices - Quebrando gigantes em pequenos
Microservices - Quebrando gigantes em pequenosVinícius Krolow
 
Introdução ao 12 Factors APP
Introdução ao 12 Factors APPIntrodução ao 12 Factors APP
Introdução ao 12 Factors APPDouglas Alonso
 

Semelhante a Princípios fundamentais para integração de sistemas com micro-serviços em ASP.NET MVC e Web API (20)

[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 ...
 
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
TDC2018SP | Trilha Banco de Dados - Transformacao do DBA. O que Agile e DevOp...
 
Implantando Continuous Delivery com TFS
Implantando Continuous Delivery com TFSImplantando Continuous Delivery com TFS
Implantando Continuous Delivery com TFS
 
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
Boas Práticas em Aplicações na Nuvem: Twelve-Factor App | MVPConf Latam 2021
 
Primeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-endPrimeiros passos para estruturar uma equipe front-end
Primeiros passos para estruturar uma equipe front-end
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
 
O que você precisa saber para se tornar um dev front-end
O que você precisa saber para se tornar um dev front-endO que você precisa saber para se tornar um dev front-end
O que você precisa saber para se tornar um dev front-end
 
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
TDC2018SP | Trilha Arq .Net - 12-factor apps: Boas praticas na construcao de ...
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017
 
TDC 2019 Cloud - Liberte sua arquitetura com cloud native
TDC 2019 Cloud - Liberte sua arquitetura com cloud nativeTDC 2019 Cloud - Liberte sua arquitetura com cloud native
TDC 2019 Cloud - Liberte sua arquitetura com cloud native
 
Arquitetura de Microservicos
Arquitetura de MicroservicosArquitetura de Microservicos
Arquitetura de Microservicos
 
12 Factor App Docker na Cloud e outras buzzwords
12 Factor App Docker na Cloud e outras buzzwords12 Factor App Docker na Cloud e outras buzzwords
12 Factor App Docker na Cloud e outras buzzwords
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
 
Foco no app, viva o serverless!
Foco no app, viva o serverless!Foco no app, viva o serverless!
Foco no app, viva o serverless!
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
izCode Argumento Técnico
izCode Argumento TécnicoizCode Argumento Técnico
izCode Argumento Técnico
 
Microservices - Quebrando gigantes em pequenos
Microservices - Quebrando gigantes em pequenosMicroservices - Quebrando gigantes em pequenos
Microservices - Quebrando gigantes em pequenos
 
Introdução ao 12 Factors APP
Introdução ao 12 Factors APPIntrodução ao 12 Factors APP
Introdução ao 12 Factors APP
 

Mais de Leandro Silva

Arquitetura de Software 101
Arquitetura de Software 101Arquitetura de Software 101
Arquitetura de Software 101Leandro Silva
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#Leandro Silva
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao TerraformLeandro Silva
 
SRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégiaSRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégiaLeandro Silva
 
Gerenciando times autogerenciáveis
Gerenciando times autogerenciáveisGerenciando times autogerenciáveis
Gerenciando times autogerenciáveisLeandro Silva
 
Como vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresaComo vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresaLeandro Silva
 
Erlang/OTP - Caelum Tech Day 2009
Erlang/OTP - Caelum Tech Day 2009Erlang/OTP - Caelum Tech Day 2009
Erlang/OTP - Caelum Tech Day 2009Leandro Silva
 

Mais de Leandro Silva (7)

Arquitetura de Software 101
Arquitetura de Software 101Arquitetura de Software 101
Arquitetura de Software 101
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao Terraform
 
SRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégiaSRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégia
 
Gerenciando times autogerenciáveis
Gerenciando times autogerenciáveisGerenciando times autogerenciáveis
Gerenciando times autogerenciáveis
 
Como vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresaComo vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresa
 
Erlang/OTP - Caelum Tech Day 2009
Erlang/OTP - Caelum Tech Day 2009Erlang/OTP - Caelum Tech Day 2009
Erlang/OTP - Caelum Tech Day 2009
 

Princípios fundamentais para integração de sistemas com micro-serviços em ASP.NET MVC e Web API

  • 1. COMPOSIÇÃO E INTEGRAÇÃO DE SISTEMAS EM 2013 Leandro Silva TDC 2013 http://leandrosilva.com.br @codezone http://github.com/leandrosilva
  • 3. LEANDRO SILVA @codezone •+15 na indústria (escrevendo software de produção) •Fissurado em programação (Ruby, Java, Erlang, Clojure, C#, F#) •Blogueiro preguiçoso (http://leandrosilva.com.br) •Já fui gerente de sistemas, arquiteto de sistemas, líder técnico, programador e instrutor de programação e arquitetura •Tenho código no GitHub (https://github.com/leandrosilva) •E perfil no LinkedIn (http://linkedin.com/in/lesilva)
  • 6.
  • 8. .NET NÃO É MAIS O PATINHO FEIO
  • 9.
  • 10. ASP.NET MVC C# Entity Framework Web API F# Ninject Unit Testing Framework NUnit SignalR Reactive Extensions LINQ Razor HDInsight a.k.a. Hadoop on Azure async Redis Log4Net ActorFx The Actors Framework for Azure
  • 13. “NÃO QUEIRA BANCAR O GÊNIO. APENAS SIGA A DROGA DO PADRÃO!” – Nick Fury
  • 15. “SIMPLES. USE HTTP & JSON. E CRIE ALGUNS MICRO-SERVIÇOS.” –Tony Stark
  • 16. “ESQUEÇA OS PROTOCOLOS PROPRIETÁRIOS. USE PADRÕES ABERTOS E CONHECIDOS DE TODOS.” –Tony Stark
  • 17. “ATUALMENTE, SÓ CONSTRUO MEUS MICRO-SERVIÇOS USANDO ASP.NET MVC WEB API. É SIMPLES E MUITO SEXY.” – BlackWidow
  • 18. AFINAL, O QUE SÃO MICRO-SERVIÇOS?
  • 19. “NÃO HÁ UMA DEFINIÇÃO EXATA DO QUE É UM MICRO-SERVIÇO, MAS UMA SÉRIE DE PRINCÍPIOS QUE PODEM SER OBSERVADOS.” fracamente acoplados algumas poucas linhas de código favorecem a reescrita escritos em frameworks leves deployados independentemente web apis com poucas rotas domínio específico interface opaca favorecem a composição repositórios de código independentes uma responsabilidade
  • 21. PRINCÍPIOS FUNDAMENTAIS PARA INTEGRAÇÃO DE SISTEMAS O QUE VOCÊ PECISA SABER CRIAR EM PLENO 2013 * Nada do que vou dizer é tão novo assim. Sorry! INTEGRAR E
  • 22. DECOMPOSIÇÃO THE ALMIGHTY WEB SERVICE BADASS MICRO SERVICE BADASS MICRO SERVICE BADASS MICRO SERVICE BADASS MICRO SERVICE BADASS MICRO SERVICE BADASS MICRO SERVICE “Todas as vezes que você tem um componente que faz 1000 coisas, com dezenas de dependentes, você sofre com a manutenção, com a escala do time de desenvolvimento e com a disponibilidade do serviço, só para citar alguns problemas.” (Cuidado! Compartilhar classes de domínio é legal, mas tende a migrar o gesso para outro lugar. Um pouco de duplicação de código “nem sempre” é um problema.)
  • 23. COMPOSIÇÃO WEB MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE MOBILE WORKER Application Domain Logic Application Domain Logic Application Domain Logic “Micro-serviços são como pacotes de procedimentos e funções, que as aplicações usam para compor suas próprias regras de negócio especializadas. Mas o ideal é que não sejam muito abrangentes.” (Regras de negócio que são fundamentais à empresa, devem estar contidas em micro-serviços. As demais, nas apps; ainda que haja uma ou outra duplicação de código.) (DICA: Windows Task Scheduler + cURL, por exemplo, já dá conta aqui. Não precisa nem reinventar a roda.) (É “micro”, lembra?!)
  • 24. ESPECIALIZAÇÃO MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE “Cada micro-serviço deve ter uma única responsabilidade, com um contrato muito bem definido, e deve fazer muito bem o seu trabalho.” The Unix Way bitch! (Em alguns casos, você pode granularizar por domínio. Mas se o domínio for amplo, granularize ainda um pouco mais.)
  • 25. ISOLAMENTO MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE “A falha em um micro- serviço não deve afetar os demais. Nem devem as apps consumidoras serem drasticamente afetadas.” puff! crash! Yeah, let it crash (A regra aqui é um Web API Project por micro- serviço. Quero dizer, um deploy por micro-serviço.) (Na hora de escalar, isso também vai te ajudar a botar recurso onde realmente precisa de recurso.)
  • 26. SIMPLICIDADE APP MICRO SERVICE GET /top/secret/data/123 X-Auth-User: codezone X-Auth-Ticket: k3ki7s1mpl3stuff898sdATy7why3noT83ab POST /ticket X-Auth-User: codezone X-Auth-Request-Timestamp: 2013081506 X-Auth-Token: h3J87Ui2i90oLkLL8j4khUUij282h3 HTTP/1.1 200 OK X-Auth-Ticket: k3ki7s1mpl3stuff898sdATy7why3noT83ab AUTH DLL (Token = Hash(User + SecretKey + Timestamp)) (Lembre-se: Ticket precisa ter um tempo de validade) (Agora é só validar se existe esse ticket associado a esse usuário e se ele ainda está válido) Não precisa implementar IGUALZINHO. Isso é só uma idéia!
  • 27. ASSINCRONICIDADE APP MICRO SERVICE GET /some/big/task/i7s898sdATy POST /some/big/task { “A”: “123”, “B”: “456” } HTTP/1.1 200 OK { “SomeBigTaskID”: “i7s898sdATy” } QUEUE WORKER DATABASE (Se a coisa pode demorar, fuja do síncrono!) (Uma outra abordagem aqui seria usar Web Hook. Ou seja, receber um post dizendo que o processo terminou.)
  • 28. LOGGING MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE MICRO SERVICE EVENTVIEWER GRAYLOG LOG4NET (EventLog) (Gelf4Net) (Log tudo, absolutamente, tudo. Só tome cuidado com dados sensíveis. Não se empolgue!) (É interessante ter um identificador para a transação que está sendo logada, de modo que ela possa ser rastreada de ponta a ponta.) (Ah! E logar as mensagens em JSON também pode ser uma boa, viu?! Ajuda a parsear e extrair informações úteis.)
  • 29. ACESSIBILIDADE POST http://codezo.ne/api/deliveries/new GET http://codezo.ne/api/deliveries/123 POST http://codezo.ne/api/deliveries/123/done DELETE http://codezo.ne/api/deliveries/123 POST http://codezo.ne/api/deliveries/tasks/sync POST http://codezo.ne/api/deliveries/123/refused GET http://codezo.ne/api/deliveries/doc “Se você não quiser que seu micro-serviço seja odiado logo de cara, você tem que prover uma boa URL e documentação facilmente acessível.” (DICA: Cuidado para não inchar a coisa. É sempre bom pensar na menor unidade de responsabilidade que seu micro- serviço pode ter. Às vezes, por exemplo, vale a pena botar as tasks em outro micro-serviço. Não se deixe levar apenas pela URI, porque ela é só uma interface com o usuário.)
  • 31. Esqueças as soluções proprietárias e os protocolos pesados Use ASP.NET MVC Web API – é fácil, testável e tem tudo que você precisa Crie um projeto e um repositório por micro-serviço Mantenha seus micro-serviços bem pequenininhos – umas 100 LoC Se você não consegue ter um micro-serviço inteiro na sua cabeça, quebre-o! “Deploye” cada micro-serviço separadamente – hamm, app pools? Ofereça URIs amigáveis e auto-explicativas Tenha interfaces bem definidas e opacas para quem as vê Sempre que possível, use um fluxo assíncrono Autenticação/autorização simples – HTTP Header, user, token, ticket, expiration Filters e Attributes são seus amigos na hora de autenticar/autorizar, aproveite! Faça log tudo. Depois, faça log do que faltou Agregue seus logs em algum lugar – EventViewer e mais algum outro agregador Windows Task Scheduler + cURL + POST /tasks/do/something é legal Construa uma fachada para seu ERP, você vai ser muito mais feliz – vai por mim (In Memory Server para teste de integração) (isso vai ter ajudar a escalar o desenvolvimento) (não precisa ser tão purista em relação a REST) (tem que ser uma coisa binária, entra X, saí Y) (assim fica fácil de propagar) (só cuidado para não deixar a coisa inchada, use o princípio dos micro-serviços)
  • 33. MUITO OBRIGADO! Leandro Silva TDC 2013 http://leandrosilva.com.br @codezone http://github.com/leandrosilva