microservices, soa e o melhor das filas
TRANSCRIPT
Microservices, SOA e o melhor das Filas
@diego_pachecoSoftware Architect | Agile Coach
www.ilegra.com
~35/40 pessoas
Projeto X: Mais de 120k horas de projeto
~400 epicos
~650h de treinamentos
SOA
120/40k horas ~140 serversAPI
Arquitetura de Software
A lei de Conway
SEM caixa mágica…
Soluções Open Source
SOA
Contexto de Business
Quase nehuma “escrita” Escrita em outros processos Muito mais lietura do que escrita Muitas aquisicoes Necessidade acesso de dados Necessidade de Escalabilidade +Cache +Serialicação do que TX
Thomas Jefferson (don’t copy the tools)
In matters of style, swim with the current;
In matters of principle, stand like a rock.
SOA: Arquitetura e Orientação a Serviços
Core Principles
Separation of Concerns (SOC) Loose Coupling Flexibility Scalability Performance Single Integrated Platform Focus on Serialization and cache rather than database.
Abstraction
Contratos de ServiçosConsumidor
Contrato
Implementaçãodo
Serviço
Partes de um Contrato
Nome do ServiçoOperações Públicas Comportamento do serviço *InputOutputVersãoFormato dos dados: Xml, Json, binárioLayout dos dados: dd/mm/yyyy, dddd-yy-mm, dd Protocolo de acesso frontend: SOAP, REST, EJB, IPC, Atores,
Stream, etc…
Outras dimenssoes que façam sentido a arquitetura e/ounegócio da empresa…
Ponto de Entrada(Tradução)
Domain
Data Layer
DAO
Business
Anti-Corruption Layer (BIND)
Backward Compatibility Converters
BCConverters
Contract :TCD => :contract:Integration
(UT)
Interno
Frequencia
Cientifico
- +
Financeiro
Natureza do Job
Short
Long
Messageria
ActiveMQ: Arquitetura
Workload não previsivel – Buffer / Spooling
Informações sobre o que esta acontecendo
Auto-Escalabilidade com + workers
Re-Processamento
Durabilidade
Bom para Long Running Jobs
Queues: O melhor das filas
Microservices
Monolitos
Microservices: DDD
Descentralização
ESB Microservices
Isolamento
Isolamento Fisico
Micro-Workers? DDD VS Data Driven
http://diego-pacheco.blogspot.com.br/2015/04/micro-workers-flavor-or-microservices.html
ContractImpl
Data Data Data
Main Architecture
Data Center EUA Data Center EU
Akamai DNS GeoIP
Main Architecture
InternalGateway
ActiveMQ
Worker
Service
ActiveMQ
External APIWeb UI
Worker
Service
InternalGateway
Middleware Architecture
Management
Worker
Service
IN OUT
Management
Worker
Service
IN GENERIC
Background Thread
Pooling
Services Architecture / Composição
Localizar Procurar
Exportar
Alertar
Exportar Pesquisa Integração
+15 SOA Services
+API as Services
Single Purpose Services
N workers per ServiceAPI Business 1 API Business 2 API Business 3 API Business 4
Governança
Stress Tests
Regras de Testes
Serviços sempre roda na ultima versão
Os testes são todos visionados
Testes Por Versão
Testes Separados Por pacotes
Não se toca nos testes uma vez que tenha nova versão, se mexe no serviço.
Devem testar todas operações e todo tipo de comportamento cabível de se testar.
Backward Compatibility
Service
V1 - Contract
Consumidor X Consumidor Y
Breaking Change VS Non-Breaking Change
• Adicionar Serviço novo• Adicionar Operação nova• Adicionar Atribuito em
request(input) opicional
• Remover Serviços• Renomear Serviços• Renomear Operações• Remover Operações• Adicionar atributos(input)
obrigatórios.• Mudar formato dos dados• Mudar Layout de Dados
Lições Aprendidas
Wins VS Aprendizados Focando SOA com principios Isolamento Fisico Abstracoes
Refactoring Upgrades Tech Performance
Queues Long Run Composição por Código para cenários simples Versionamento por coding e não por
branches. Isolamento de servers, threads pools, cache e
máquinas. Soluções OSS muito maduras
Automação não estava 1000% Issues com Automação de BD Queues sendo pesadas para Light sync ActiveMQ e messageria no geral é muito
associado ao hardware e dados, em um cenário de mudanças precisa estar sempre tunando.
Timeouts escondem issues Messageria com DLQ é ruim, melhor usar
solução de log centralizado como ELK. Cache Local é bom, mas pode explodir
serviço, logo é melhor ter um data grid distribuido como Coherence.
Microservices, SOA e o melhor das Filas
@diego_pachecoSoftware Architect | Agile Coach
Obrigado!