O documento discute os desafios de integração entre sistemas em arquiteturas corporativas reais, comparando-as com arquiteturas ideais de sistema único. É apresentada a noção de Service-Oriented Architecture para melhorar a integração com foco em baixo acoplamento entre sistemas através de contratos de serviço e barramentos de serviços. Realizou-se um estudo comparando diferentes métodos para transferência eficiente de grandes volumes de dados em cenários de integração.
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
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
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
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
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
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)