SlideShare uma empresa Scribd logo
Globalcode – Open4education
Trilha Arquitetura .NET
Eric Lemes
Globalcode – Open4education
Eric Lemes
Desenvolvedor
Blogueiro
Participante da comunidade .NET Architects
Participante eventual do Void Podcast (
http://voidpodcast.com) por falta de convite.
Criador do MSBuildCodeMetrics -
http://ericlemes.github.io/MSBuildCodeMetrics/
@eric_lemes | ericlemes.com | linkedin.com/in/ericlemes | ericlemes@gmail.com
Globalcode – Open4education
Integrações entre sistemas
Desafios de arquitetura corporativa, de soluções e de
software
Globalcode – Open4education
Arquitetura alvo
Globalcode – Open4education
Arquitetura alvo
Sistema único
Atende todos os domínios funcionais
Uma única tecnologia
Um banco de dados, normalizado e íntegro
Sem duplicidade de informações e funções
Sem necessidade de integração
Globalcode – Open4education
Arquitetura real
Globalcode – Open4education
Arquitetura real
Diversos sistemas: in house, pacotes, legados
Cada sistema atende uma ou mais partes do
processo negócio (domínios)
Sobreposição funcional
Diversas tecnologias
Diversos bancos de dados, com redundância e
replicação de dados
Integrações ponto a ponto
Globalcode – Open4education
Desafios
Integração
Baixo acoplamento
Reuso de interfaces
Globalcode – Open4education
Acoplamento
Globalcode – Open4education
Acoplamento
Número de suposições que uma parte faz sobre a
outra quando estão trocando informações [EAP]
Endereço do banco de dados
Estrutura do banco de dados
Endereço do serviço
Contrato do serviço
Protocolo
Maior quantidade de suposições = maior
acoplamento
Globalcode – Open4education
Integrações ponto a ponto
Interfaces diferentes para compartilhar a mesma
informação
Desenvolvedores investindo mais tempo
resolvendo problemas de integração em
detrimento ao código de negócio
Globalcode – Open4education
Como melhorar?
Barramento de serviços (ESB)
Ferramentas de ETL
Globalcode – Open4education
Barramento de serviços (ESB – Enterprise Service
Bus)
Como reduzir acoplamento?
Globalcode – Open4education
Como reduzir acoplamento?
Ferramentas de ETL (Extract, transform, load)
ETLETL
Globalcode – Open4education
É suficiente?
Globalcode – Open4education
SOA - mais uma
tentativa de definição
Visualizar serviços invés de sistemas
(implementações)
Estabelecer contratos de serviço com visão de
negócio
Possibilidade de trocar sistemas inteiros com
maior facilidade
Globalcode – Open4education
Visão orientada a dados
Globalcode – Open4education
Visão orientada a serviços
Globalcode – Open4education
SOA - Desafios técnicos
ESB
Visão request/reply
Reuso de comportamento
Geralmente implementado com REST, SOAP (Web
services), Mensageria MQ
Baixo desempenho com grande volume de dados
ETL
Integração base a base ou via arquivos
Reuso de dados
Bom desempenho com grande volume de dados
Globalcode – Open4education
SOA – Desafios técnicos
É possível implementar uma arquitetura orientada
a serviços para cenários de grande volume de
dados?
Pouca ou nenhuma literatura sobre o assunto
Pesquisa envolvendo 9 cenários de integração
Objetivo:
Qual o melhor método para transferir grande volume de dados
em cenário request/reply?
Volume de 1.000.000 registros
~14Mb request
~291Mb response
Globalcode – Open4education
Transferência de arquivos
Globalcode – Open4education
Transferência de arquivos
Sistema
origem
Sistema
origem
Sistema
destino
Sistema
destino
Cópia
Pela rede
Máquina origem
Rede
Máquina destino
Globalcode – Open4education
Transferência de arquivos
Preocupações adicionais
Dois processos não podem ler arquivos
simultaneamente
File watcher?
Arquivo bastão?
Sim, precisa de espaço em disco
Sim, I/O costuma ser lento
Globalcode – Open4education
WCF – SOAP e net.tcp
X
Globalcode – Open4education
WCF – SOAP e net.tcp
Método Tempos net.tcp (segundos) Tempos soap (segundos)
20.000 chamadas 201,20 193,65
2000 chamadas em lotes de 10 40,87 39,75
200 chamadas em lotes de 100 24,46 25,20
20 chamadas em lotes de 1000 22,39 19,84
10 chamadas em lotes de 2000 20,23 18,82
5 chamadas em lotes de 4000 18,44 19,00
4 chamadas em lotes de 5000 18,69 17,94
Máquina origem
Rede
Máquina destino
Globalcode – Open4education
HTTP Request
Único request com todos os dados
Muito consumo de memória = paginação em disco
Processamento do response assíncrono, do
request não
Máquina origem
Rede
Máquina destino
Globalcode – Open4education
TCP – 1ª tentativa
Cliente e servidor single-threaded
Implementação síncrona
Máquina origem
Rede
Máquina destino
Globalcode – Open4education
MSMQ, Websphere MQ e
RabbitMQ
Cliente coloca requisição na fila, em pedaços
Segunda thread no cliente ouve respostas na fila
Servidor ouve fila de entrada
Conforme servidor vai processando o request,
insere respostas na fila (em nacos)
Máquina origem
Rede
Máquina destino
Globalcode – Open4education
MSMQ, Websphere MQ e
RabbitMQ
Globalcode – Open4education
TCP – 2ª tentativa
Implementação multi-threaded simulando comportamento do MQ
Cliente
Thread principal coloca requisição, de forma sequencial
Thread secundária ouve resposta, para cada resposta dispara uma
worker thread
Servidor
Thread principal processa requisição, enfileirando cada request
Thread secundária desempilha e processa requisições
Máquina origem
Rede
Máquina destino
Globalcode – Open4education
TCP – 2ª tentativa
Globalcode – Open4education
Os números!
Globalcode – Open4education
Aprendizados
Aderência a ESB
Aderentes: MQ, SOAP
Não aderentes: arquivos, net.tcp, HTTP request, TCP
Particionamento de respostas
Aderente: MQ, TCP
Não aderente: todos os outros
Facilidade de implementação:
Fácil: Web services, net.tcp
Médio: MQ
Dolorido: TCP
Globalcode – Open4education
O guia prático!
Serviços = visão negócio
Eliminar visão técnica: eliminar pensamento de
protocolo, método de construção ao pensar o serviço
Pensar em parâmetros de entrada e saída.
Visão transacional
Blocos de reuso que façam sentido para o negócio
Globalcode – Open4education
O guia prático!
Para desempenho, prefira o assíncrono invés do
síncrono
Visão assíncrona minimiza espera entre consumidor e
provedor
AssíncronoSíncrono
Globalcode – Open4education
O guia prático!
Qual tecnologia usar?
Web service e net.tcp: Fácil implementação, baixo
desempenho, pouco seguro em cenários transacionais.
Primeira escolha em cenários síncronos.
MQ: Implementação mais difícil, alto desempenho (força
modelo assíncrono), melhor para cenário transacional.
Primeira escolha em cenários assíncronos.
Qual formato usar?
XML: fácil de interpretar, pesado
CSV e posicional: chato de interpretar, leve na maioria
dos casos. Boa idéia em cenários de alto volume.
Globalcode – Open4education
Arquitetura do software
Reuse seu domínio!
Se sua camada de apresentação e seus serviços não
compartilham a mesma lógica, algo está errado.
Se existem métodos de acesso a dados específicos para
os serviços, algo está errado
Globalcode – Open4education
Arquitetura do software
Uma única porta de entrada e uma única porta de
saída
Não deve existir código de integração específico para
cada sistema destino
Não deve existir mais de um código de integração para
mesma função de negócio
Traduções, enriquecimentos, transformações são
funções do ESB!
Existem diversas alternativas abertas para ESB’s
O conceito do ESB pode ser aplicado sem a aquisição de uma
ferramenta
Enterprise Integration Patterns (EIP)
Globalcode – Open4education
Cenário possível
Globalcode – Open4education
Referências
[EIP] Hohpe G., Woolf, B. Enterprise application patterns:
designing, building and deploying messaging solutions. Addison-
Wesley professional, 2003.
Linthicum, D. Enterprise application integration. Addison-Wesley
professional, 1999
Ruh, W., Maginnis, F, Brown W. Enterprise application
integration: a Wiley tech brief. Wiley, 2000.
http://ericlemes.com/indice - Integrações entre sistemas
https://github.com/ericlemes/IntegrationTests
Globalcode – Open4education
OBRIGADO!
Eric Lemes

Mais conteúdo relacionado

Mais procurados

APM Model in .NET - PT-pt
APM Model in .NET - PT-ptAPM Model in .NET - PT-pt
APM Model in .NET - PT-pt
Pedro De Almeida
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHP
Adler Medrado
 
Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!
Flávio Pimenta
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
Andreano Lanusse
 
Protocolos de aplicação
Protocolos de aplicaçãoProtocolos de aplicação
Protocolos de aplicação
Joel Saramago
 
Aula03 - protocolo ldap
Aula03 -  protocolo ldapAula03 -  protocolo ldap
Aula03 - protocolo ldap
Carlos Veiga
 

Mais procurados (6)

APM Model in .NET - PT-pt
APM Model in .NET - PT-ptAPM Model in .NET - PT-pt
APM Model in .NET - PT-pt
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHP
 
Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!Construir microservices em python nunca foi tão simples como com o Nameko!
Construir microservices em python nunca foi tão simples como com o Nameko!
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
 
Protocolos de aplicação
Protocolos de aplicaçãoProtocolos de aplicação
Protocolos de aplicação
 
Aula03 - protocolo ldap
Aula03 -  protocolo ldapAula03 -  protocolo ldap
Aula03 - protocolo ldap
 

Destaque

I was asked to hold a speech for a book that I contributed, should i accept?
I was asked to hold a speech for a book that I contributed, should i accept?I was asked to hold a speech for a book that I contributed, should i accept?
I was asked to hold a speech for a book that I contributed, should i accept?
Rae Stonehouse
 
Divya Chopde_ Test Analyst_1
Divya Chopde_ Test Analyst_1Divya Chopde_ Test Analyst_1
Divya Chopde_ Test Analyst_1
Divya Chopde
 
Adzan dan iqomah
Adzan dan iqomahAdzan dan iqomah
Adzan dan iqomah
falahnurul96
 
Ppt sholat
Ppt sholatPpt sholat
Ppt sholat
falahnurul96
 
Gestion de calidad herramientas estadísticas de control de calidad
Gestion de calidad herramientas estadísticas de control de calidadGestion de calidad herramientas estadísticas de control de calidad
Gestion de calidad herramientas estadísticas de control de calidad
Samuel Morales
 
David gustavo gonzález cardona
David gustavo gonzález cardonaDavid gustavo gonzález cardona
David gustavo gonzález cardona
06DAER
 
Estacion y meses del año
Estacion y meses del añoEstacion y meses del año
Estacion y meses del año
022282
 
Introducción a la red cristina allán
Introducción a la red cristina allánIntroducción a la red cristina allán
Introducción a la red cristina allán
Cris Allan
 
Seguridad de la información
Seguridad de la informaciónSeguridad de la información
Seguridad de la información
daiell100
 
El libro-móvil-de-las-tablas-de-multiplicar
El libro-móvil-de-las-tablas-de-multiplicarEl libro-móvil-de-las-tablas-de-multiplicar
El libro-móvil-de-las-tablas-de-multiplicar
Jenny RM
 

Destaque (10)

I was asked to hold a speech for a book that I contributed, should i accept?
I was asked to hold a speech for a book that I contributed, should i accept?I was asked to hold a speech for a book that I contributed, should i accept?
I was asked to hold a speech for a book that I contributed, should i accept?
 
Divya Chopde_ Test Analyst_1
Divya Chopde_ Test Analyst_1Divya Chopde_ Test Analyst_1
Divya Chopde_ Test Analyst_1
 
Adzan dan iqomah
Adzan dan iqomahAdzan dan iqomah
Adzan dan iqomah
 
Ppt sholat
Ppt sholatPpt sholat
Ppt sholat
 
Gestion de calidad herramientas estadísticas de control de calidad
Gestion de calidad herramientas estadísticas de control de calidadGestion de calidad herramientas estadísticas de control de calidad
Gestion de calidad herramientas estadísticas de control de calidad
 
David gustavo gonzález cardona
David gustavo gonzález cardonaDavid gustavo gonzález cardona
David gustavo gonzález cardona
 
Estacion y meses del año
Estacion y meses del añoEstacion y meses del año
Estacion y meses del año
 
Introducción a la red cristina allán
Introducción a la red cristina allánIntroducción a la red cristina allán
Introducción a la red cristina allán
 
Seguridad de la información
Seguridad de la informaciónSeguridad de la información
Seguridad de la información
 
El libro-móvil-de-las-tablas-de-multiplicar
El libro-móvil-de-las-tablas-de-multiplicarEl libro-móvil-de-las-tablas-de-multiplicar
El libro-móvil-de-las-tablas-de-multiplicar
 

Semelhante a Tdc 2013 eric lemes - integracoes entre sistemas-2

Internet das coisas - A revolução já começou
Internet das coisas - A revolução já começouInternet das coisas - A revolução já começou
Internet das coisas - A revolução já começou
Jose Wilker
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
Cleber Dantas
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
taniamaciel
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
Giovanni Bassi
 
Internet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começouInternet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começou
Jose Wilker
 
Bruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveisBruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveis
Viotti Equipamentos Médicos
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
Rodolfo Fadino Junior
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
tdc-globalcode
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
Eder Magalhães
 
Modelos TCP/IP e OSI para CCNA
Modelos TCP/IP e OSI para CCNAModelos TCP/IP e OSI para CCNA
Modelos TCP/IP e OSI para CCNA
wolkartt_18
 
A Revolução já começou
A Revolução já começouA Revolução já começou
A Revolução já começou
Jose Wilker
 
JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5
Helder da Rocha
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
tdc-globalcode
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android University
Inael Rodrigues
 
DotNet vs. Java
DotNet vs. JavaDotNet vs. Java
DotNet vs. Java
armeniocardoso
 
Pense Aberto, Pense Linux
Pense Aberto, Pense LinuxPense Aberto, Pense Linux
Pense Aberto, Pense Linux
aviram
 
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - MarçoASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
Renato Groff
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de Sistemas
Igor Takenami
 
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...
Luiz Henrique Zambom Santana
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!
Mario Guedes
 

Semelhante a Tdc 2013 eric lemes - integracoes entre sistemas-2 (20)

Internet das coisas - A revolução já começou
Internet das coisas - A revolução já começouInternet das coisas - A revolução já começou
Internet das coisas - A revolução já começou
 
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escalaTDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
TDC - Técnicas e recursos para desenvolvimento web em cenários de grande escala
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
Internet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começouInternet das coisas - A Revolução já começou
Internet das coisas - A Revolução já começou
 
Bruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveisBruxarias em Python - Como desenvolver soluções escaláveis
Bruxarias em Python - Como desenvolver soluções escaláveis
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
Modelos TCP/IP e OSI para CCNA
Modelos TCP/IP e OSI para CCNAModelos TCP/IP e OSI para CCNA
Modelos TCP/IP e OSI para CCNA
 
A Revolução já começou
A Revolução já começouA Revolução já começou
A Revolução já começou
 
JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5JustJava 2005: Web Services em Java com o JWSDP 1.5
JustJava 2005: Web Services em Java com o JWSDP 1.5
 
TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?TDC2018SP | Trilha Serveless - Pra que SERVErless?
TDC2018SP | Trilha Serveless - Pra que SERVErless?
 
TDC 2012 Trilha – Android University
TDC 2012 Trilha – Android UniversityTDC 2012 Trilha – Android University
TDC 2012 Trilha – Android University
 
DotNet vs. Java
DotNet vs. JavaDotNet vs. Java
DotNet vs. Java
 
Pense Aberto, Pense Linux
Pense Aberto, Pense LinuxPense Aberto, Pense Linux
Pense Aberto, Pense Linux
 
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - MarçoASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
ASP.NET Core 3.1: Desenvolvimento de APIs Multiplataforma - Março
 
Introdução a Arquitetura de Sistemas
Introdução a Arquitetura de SistemasIntrodução a Arquitetura de Sistemas
Introdução a Arquitetura de Sistemas
 
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...
Como modelar, integrar e desenvolver aplicações com múltiplos bancos de dados...
 
Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!Turbinando o seu sistema com Redis!
Turbinando o seu sistema com Redis!
 

Tdc 2013 eric lemes - integracoes entre sistemas-2

  • 1. Globalcode – Open4education Trilha Arquitetura .NET Eric Lemes
  • 2. Globalcode – Open4education Eric Lemes Desenvolvedor Blogueiro Participante da comunidade .NET Architects Participante eventual do Void Podcast ( http://voidpodcast.com) por falta de convite. Criador do MSBuildCodeMetrics - http://ericlemes.github.io/MSBuildCodeMetrics/ @eric_lemes | ericlemes.com | linkedin.com/in/ericlemes | ericlemes@gmail.com
  • 3. Globalcode – Open4education Integrações entre sistemas Desafios de arquitetura corporativa, de soluções e de software
  • 5. Globalcode – Open4education Arquitetura alvo Sistema único Atende todos os domínios funcionais Uma única tecnologia Um banco de dados, normalizado e íntegro Sem duplicidade de informações e funções Sem necessidade de integração
  • 7. Globalcode – Open4education Arquitetura real Diversos sistemas: in house, pacotes, legados Cada sistema atende uma ou mais partes do processo negócio (domínios) Sobreposição funcional Diversas tecnologias Diversos bancos de dados, com redundância e replicação de dados Integrações ponto a ponto
  • 10. Globalcode – Open4education Acoplamento Número de suposições que uma parte faz sobre a outra quando estão trocando informações [EAP] Endereço do banco de dados Estrutura do banco de dados Endereço do serviço Contrato do serviço Protocolo Maior quantidade de suposições = maior acoplamento
  • 11. Globalcode – Open4education Integrações ponto a ponto Interfaces diferentes para compartilhar a mesma informação Desenvolvedores investindo mais tempo resolvendo problemas de integração em detrimento ao código de negócio
  • 12. Globalcode – Open4education Como melhorar? Barramento de serviços (ESB) Ferramentas de ETL
  • 13. Globalcode – Open4education Barramento de serviços (ESB – Enterprise Service Bus) Como reduzir acoplamento?
  • 14. Globalcode – Open4education Como reduzir acoplamento? Ferramentas de ETL (Extract, transform, load) ETLETL
  • 16. Globalcode – Open4education SOA - mais uma tentativa de definição Visualizar serviços invés de sistemas (implementações) Estabelecer contratos de serviço com visão de negócio Possibilidade de trocar sistemas inteiros com maior facilidade
  • 18. Globalcode – Open4education Visão orientada a serviços
  • 19. Globalcode – Open4education SOA - Desafios técnicos ESB Visão request/reply Reuso de comportamento Geralmente implementado com REST, SOAP (Web services), Mensageria MQ Baixo desempenho com grande volume de dados ETL Integração base a base ou via arquivos Reuso de dados Bom desempenho com grande volume de dados
  • 20. Globalcode – Open4education SOA – Desafios técnicos É possível implementar uma arquitetura orientada a serviços para cenários de grande volume de dados? Pouca ou nenhuma literatura sobre o assunto Pesquisa envolvendo 9 cenários de integração Objetivo: Qual o melhor método para transferir grande volume de dados em cenário request/reply? Volume de 1.000.000 registros ~14Mb request ~291Mb response
  • 22. Globalcode – Open4education Transferência de arquivos Sistema origem Sistema origem Sistema destino Sistema destino Cópia Pela rede Máquina origem Rede Máquina destino
  • 23. Globalcode – Open4education Transferência de arquivos Preocupações adicionais Dois processos não podem ler arquivos simultaneamente File watcher? Arquivo bastão? Sim, precisa de espaço em disco Sim, I/O costuma ser lento
  • 24. Globalcode – Open4education WCF – SOAP e net.tcp X
  • 25. Globalcode – Open4education WCF – SOAP e net.tcp Método Tempos net.tcp (segundos) Tempos soap (segundos) 20.000 chamadas 201,20 193,65 2000 chamadas em lotes de 10 40,87 39,75 200 chamadas em lotes de 100 24,46 25,20 20 chamadas em lotes de 1000 22,39 19,84 10 chamadas em lotes de 2000 20,23 18,82 5 chamadas em lotes de 4000 18,44 19,00 4 chamadas em lotes de 5000 18,69 17,94 Máquina origem Rede Máquina destino
  • 26. Globalcode – Open4education HTTP Request Único request com todos os dados Muito consumo de memória = paginação em disco Processamento do response assíncrono, do request não Máquina origem Rede Máquina destino
  • 27. Globalcode – Open4education TCP – 1ª tentativa Cliente e servidor single-threaded Implementação síncrona Máquina origem Rede Máquina destino
  • 28. Globalcode – Open4education MSMQ, Websphere MQ e RabbitMQ Cliente coloca requisição na fila, em pedaços Segunda thread no cliente ouve respostas na fila Servidor ouve fila de entrada Conforme servidor vai processando o request, insere respostas na fila (em nacos) Máquina origem Rede Máquina destino
  • 29. Globalcode – Open4education MSMQ, Websphere MQ e RabbitMQ
  • 30. Globalcode – Open4education TCP – 2ª tentativa Implementação multi-threaded simulando comportamento do MQ Cliente Thread principal coloca requisição, de forma sequencial Thread secundária ouve resposta, para cada resposta dispara uma worker thread Servidor Thread principal processa requisição, enfileirando cada request Thread secundária desempilha e processa requisições Máquina origem Rede Máquina destino
  • 33. Globalcode – Open4education Aprendizados Aderência a ESB Aderentes: MQ, SOAP Não aderentes: arquivos, net.tcp, HTTP request, TCP Particionamento de respostas Aderente: MQ, TCP Não aderente: todos os outros Facilidade de implementação: Fácil: Web services, net.tcp Médio: MQ Dolorido: TCP
  • 34. Globalcode – Open4education O guia prático! Serviços = visão negócio Eliminar visão técnica: eliminar pensamento de protocolo, método de construção ao pensar o serviço Pensar em parâmetros de entrada e saída. Visão transacional Blocos de reuso que façam sentido para o negócio
  • 35. Globalcode – Open4education O guia prático! Para desempenho, prefira o assíncrono invés do síncrono Visão assíncrona minimiza espera entre consumidor e provedor AssíncronoSíncrono
  • 36. Globalcode – Open4education O guia prático! Qual tecnologia usar? Web service e net.tcp: Fácil implementação, baixo desempenho, pouco seguro em cenários transacionais. Primeira escolha em cenários síncronos. MQ: Implementação mais difícil, alto desempenho (força modelo assíncrono), melhor para cenário transacional. Primeira escolha em cenários assíncronos. Qual formato usar? XML: fácil de interpretar, pesado CSV e posicional: chato de interpretar, leve na maioria dos casos. Boa idéia em cenários de alto volume.
  • 37. Globalcode – Open4education Arquitetura do software Reuse seu domínio! Se sua camada de apresentação e seus serviços não compartilham a mesma lógica, algo está errado. Se existem métodos de acesso a dados específicos para os serviços, algo está errado
  • 38. Globalcode – Open4education Arquitetura do software Uma única porta de entrada e uma única porta de saída Não deve existir código de integração específico para cada sistema destino Não deve existir mais de um código de integração para mesma função de negócio Traduções, enriquecimentos, transformações são funções do ESB! Existem diversas alternativas abertas para ESB’s O conceito do ESB pode ser aplicado sem a aquisição de uma ferramenta Enterprise Integration Patterns (EIP)
  • 40. Globalcode – Open4education Referências [EIP] Hohpe G., Woolf, B. Enterprise application patterns: designing, building and deploying messaging solutions. Addison- Wesley professional, 2003. Linthicum, D. Enterprise application integration. Addison-Wesley professional, 1999 Ruh, W., Maginnis, F, Brown W. Enterprise application integration: a Wiley tech brief. Wiley, 2000. http://ericlemes.com/indice - Integrações entre sistemas https://github.com/ericlemes/IntegrationTests