Workshop: SOA, MicroServices e DevOps
@diego_pacheco
Software Architect | Agile Coach
www.ilegra.com
Dia 1
@diego_pacheco
Software Architect | Agile Coach
Workshop: SOA, MicroServices e DevOps
O Sonho da TI…
Um Sistema que dure anos
Qualidade de solucoes pra usuarios
Satisfacao dos devs
Performance/
Escalabilidade
Flexibilidade de mudancas
Facilidade de colocar pessoas novas, treinamentos, produtividade.
A realidade…
Uma nova forma de ver o mundo…
A lei de Conway
Precisamos pensar diferente!
Desaprender necessário será.
Prontos?
Mudanças: Só precisamos mudra uma coisa 
Cultura
Cultura
Cultura
Cultura
Arquitetura de Software
Vendo Além do código
Visoes e Perspectivas, vendo além…
Foco? Pedras Grande!
Software Arquitetura
Estrutura e Design: Main Architecture
Propósito: SOC
Propósito: Main Arch +
Archs por Components
Integridade Conceitual Favela ou software?
V
S
Escalabilidade: Usuário e Devs
Arquitetura mais comun no Mercado.
A era da caixa mágica…
Bom pra CRUDS…
Esse tipo de framework não vem com Bateria. Muita coisa por fora!
No Final a TI fica assim. Complexidade -> Custo de manutenção -> Baixo tempo de
resposta -> Frustração do Business e dos Devs.
Crescimento sem arquitetura
Application
UI
DB
Crescimento sem arquitetura
Application
UI
DB
Application Application Application
Profiles de Arquitetura
CPU Bound
Memory
IO
Network
Natureza do Job
Short
Long
Resposta
Frequencia
Cientifico
- +
Financeiro
Distribuição
IO: bloqueante VS não-bloqueante
Sync VS Async
Sync ASync
• Bloqueante
• Mal usa recursos
• Mais Lento - Performance
• Problemas de escalabilidade
• Código mais simples
• Não-Bloqueante
• Pode ter Race-Conditions
• Callback Hell
• Complexidade de código
• Tratamento de Erros
• Mais Performatico
• Escalabilidade
Back Pressure / Throttling / Spooling
Metadados
OLAP VS OLTP
SOA de forma errada! FOCO em ferramentas.
WS-SOAP
WS-BPEL
ESB
BPEL – Sem Código 
ESB
Manifesto SOA
Princípios SOA
Thomas Jefferson (don’t copy the tools)
In matters of
style, swim with
the current;
In matters of
principle, stand
like a rock.
Baixo Acomplamento
SOC
Flexibilidade
Service - Abstraction
Abstraction
Composição – Serviços Compartilhados
Contratos de Serviços
Contratos de Serviços
Contratos de Serviços
Consumidor
Contrato
Implementação
do
Serviço
Partes de um Contrato
Nome do Serviço
Operações Públicas
Comportamento do serviço *
Input
Output
Versão
Formato dos dados: Xml, Json, binário
Layout 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/ou
negócio da empresa…
Interface unificada X Syntax Especifica
Interoperabilidade VS Integração de sistemas: Estado Caordico o
meio termo. Contratos -> Padrao, Impl –> Free.
Orientação a Serviços
Business Capability: Sem Design pour acidente.
Forma de Pensamento
SO
Forma de Pensamento atual: Application
Forma de Pensamento atual: Services?
Forma de Pensamento
#Não
Forma de Pensamento atual: Landscape
App Application
Business Service Internal
Generic UI Tech Service
External API
Internal API Data Service
MiddlewareTool
External API
Integration
Service
Tipos de Serviços
Business Service
Technical Service
Wrapper Service
Patterns
Service Wrapper
Multi-Channel Endpoint
Pontes
Principios
 Service Discoverability
 Stantard Service Contract
 Standard Content types on Contracts
 Service Execution Context
 Service SOC
 Service Loose Coupling
 Service Abstration
 Service Contract Abstraction
 Service Composability
 Service Autonomy
 Service Reusability
 Service Stateleness
 Service State Management
 Service Precise Boundaries
Governança SOA
Serviços = Ativos
Inventário
Serviços• Nome do Serviço
• Função
• Main Arch/Design
• Contrato
• SLAs
• Versoes
• Entitlements
• Toggles
• Owner:
• Business
• Técnico
SLA de Serviços
• Tempo de Resposta
• Up Time
• Throughput
• Tamanho
• Latencia
• Usuários
SLA e Design
Stress Tests
SOA Business Service Stack
Service Management
(Exposure)
Service Infrastrure
(Middleware Architecture)
Service
(Business)
Stack
Serviço
Contrato: Interface Pública(Operações) + Entradas e Saidas
Ponto de Entrada(Tradução)
Domínio Implementação
Stack
Service Anatomy
(Internal Stack)
Interno
Ponto de Entrada(Tradução)
Domain
Data Layer
DAO
Business
Anti-Corruption Layer (BIND)
Backward Compatibility Converters
BC
Converters
Contract :TCD =>
:contract
:Integration
(UT)
Interno
Ponto de Entrada(Tradução)
Data Layer
DAO
Business
Anti-Corruption Layer (BIND)
Backward Compatibility Converters
BC
Converters
Contract :TCD =>
:contract
:Integration
(UT)
Domain
Interno
TDD
TCD
Test
Contract
Ddevelopment
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.
Canonical Versioning
Service
V1
Contract
V2
Contract
V3
Contract
Backward Compatibility – Time Window
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
Backward Compatibility
Service
V1 C
Consumidor X Consumidor Y
V2 C
Backward Compatibility
Service
Consumidor X Consumidor Y
V2 C
SOA Patterns
SOA Patterns
SOA Patterns
http://www.gettyimages.com/detail/81267134/Comstock-Images
Níveis de Test SOA
Test Funcional
http://img.domaintools.com/blog/dt-improved-performance.jpg
Test de Performance
http://www.gettyimages.com/detail/57434631/Stockbyte
Tests unitário e Integração
http://4.bp.blogspot.com/_vV6KYvnGMp0/ShLiIBB3shI/AAAAAAAABF8/AP85WpusAIU/s320/1981+-+Bezerra+da+Silva+-
+Al%C3%B4+Malandragem,+Maloca+o+Flagrante+-+Download+Disco+Completo+Gr%C3%A1tis+Mp3+Free.jpg
Developer Test-> “Malandragen”
Contract Testing -> Lightweight
http://www.gettyimages.com/detail/57421295/Image-Source
Integration Test (Heavyweight)
http://www.gettyimages.com/detail/96611295/iStock-Vectors
Arghhh
DATA...
Regression
http://blogs.citypages.com/gimmenoise/back-to-the-future.jpg
Continuous Integration é seu amigo!
Dia 1 – Test 
Dia 1 – Test 
• O que é Arquitetura de software de Verdade? Quais Elementos?
• Do que é composto um contrato de serviço?
• Falando de BC, modificar a ordenação de uma lista de retorno,
implica em que?
• Em SOA, tudo é serviço? Explique por que.
• Quais são os principios do manifesto SOA?
• Devemos ter um serviço CPU Bound e Latency Bound na mesma
maquína?
• Cite 3 vantagens de um serviço com 1 operação Async.
• Explique a diferença de Long Running Job e Short, com exemplos.
Dia 2
@diego_pacheco
Software Architect | Agile Coach
Workshop: SOA, MicroServices e DevOps
Modelos / Patterms de Arquitetura de Software
Shared Database
Flat file Integration
System A System B
Flat File
Flat File
Directory
Client Server
ETL
Tiers e Layers
Request/Response – Request Driven
Black Board Architecture
Tenancy
Message Oriented
Barramento
EDA – Event Driven Architecture
SEDA – Staged Event Driven Architecture
Lambda Architecture
Web Apis
Web Apis – A Huge Economy
Api Management Solutions
Api Management Solutions
Serviços Internos VS Serviços Externos ou APIs Customer Facing
Microservices
Monoliticos
MSA veio depois de SOA
Microservices: Cases - Benchmark
~600 microservices ~150 microservices para uma página
Microservices: Fine-Grained Business
Microservices: Independent + Re-usable
MSA é SOA!
http://martinfowler.com/articles/microservices.html
Unix Philosophy: Dumb Pipes & Smart Endpoints
Remover o “Middleware”
Descentralização
ESB Microservices
Isolamento
Isolamento: Beneficios
Times Recursos Gestão
Isolamento: Beneficios
Times
 Ter multiplos times trabalhando ao mesmo tempo em
coisas diferente, sem merge 
 É possível ter times por serviços
 Cada time pode trabalhar com técnologias diferentes
 Cada time pode trabalhar de formas diferentes por a
dependencia dos times vira por serviços e não pro
pessoas.
 É possível ter times fazendo delivery de business e
outros atualizando tecnologias ou fazendo melhorias de
performance.
Isolamento: Beneficios
Recursos
 Hardware diferente por serviço
 Serviços podem usar mais ou menos recursos
 Serviços não afetam os outros em runtime, tem mais
resiliencia.
 Isolamento de banco permite atualizaçoes no modelo e
tecnolgoia de dados sem impactos e outros serviços.
 Isolamento de CPU, Threads, Memoria, Rede faz com
que o serviço sejá autocontido e indepente assim tendo
mais facilidade para portar de um lugar para outro até
mesmo do DS local para Cloud ou vice-versa.
Isolamento: Beneficios
Gestão
 Diferentes prioridades do negócio podem ser feitas ao
mesmo tempo de um jeito melhor.
 Releases podem acontecer em simultaneo, sem
necessidade de tanta coordenação e bloqueio como em
outros modelos.
 Podem se priorizar melhor: Bugs, Débitos Técnicos,
melhorias de tecnologias e migrações.
 Times tem mais produtividade e menos dependencias.
Velocidade de deploy e test / experimentação de
funcionalidades.
Balanceamento
Anti-Patterns: Entendimentos Errados, Ideias Ruins entre outros…
ANTI-Pattern: 1 Serviço para cada coisa. EX: 1 WS pro operação.
ANTI-Pattern: 1 Serviço tem que ser sempre pequeno.
ANTI-Pattern: MSA é SOA, não ignore os principios.
SOC
Backward
Compatibility
Contracts Versioning
Governance
ANTI-Pattern: NanoServices <= 10..100 LOC. “nem todos concordam”
NanoService or Function as a Service?
Case: Netflix
Case: Twitter
Case: HailO
Case: Gilt
DDD: Domain Driven Design
Usando REST para Microservices
Spring Boot + REST
Node The JS way
Dropwizard+ REST
Netflix OSS - IPC
Akka as Microservice solution
Actors VS RPC
Colossus: nio + akka
Spray: Akka + HTTP
Muitas requests? Mobile? API Gateway Model
API Gateway Model: Como fica a UI?
IPC-ish, point-2-point, Brokerless solutions.
Ribbon
Quasar
Lightweight Servers
Big Fat Jar: $ java –jar service.jar | OneJar, Assembler, Packager, RPM…
Isolamento Físico
Tudo é sobre processos baratos.
Requisitos: DevOps
Requisitos: Monitoramento + Fall back explicito
Requisitos: Design Boundaries
Multiples DBs & TX
Users Service Images Service Comments Service
Eventual Consistency
 Alternativa a TX distribuidas
 Trabalha com eventos
 Os Serviços tem que ouvir esses
eventos e aplicar as mudanças nos
dados.
 Soluções:
 CQRS + Event Sourcing
 Topicos / Pub-Sub (JMS)
 Akka
 É Possível ter TX local
Eventual Consistency: ES
Log Centralizado – ELK Stack
Log Centralizado – Graphite + Grafana
http://grafana.org/
Log Centralizado – Graylog
https://www.graylog.org/overview/
Runtime Isolation + Metrics
Runtime Isolation: Hystrix
Runtime Isolation: Circuit Breaker
https://github.com/Netflix/SimianArmy
Runtime Testing
Todos os microservicos tem que ter o seu proprio pipeline.
Sistema como um organismo vivo.
Dia 2 – Test 
Dia 1 – Test 
 O que é isolamento e por que é importante?
 Posso ter microservices sem DevOps? Por que não?
 Como resolver o problema da transação distribuida?
 Quais as vantagens de microserviços?
 Por que precisamos de log centralizado?
 O que é back pressure? Timeouts? Por que temos que cuidar?
 Por que precisamos de fall back explicito?
 Tem como fazer MSA sem SOA? Por que?
Dia 3
@diego_pacheco
Software Architect | Agile Coach
Workshop: SOA, MicroServices e DevOps
Soluções Open Source
Desenvolvimento
Jenkins CI
Redmine
EIP
SOA Patterns
OASIS
PADRÕES ABERTOS
2000
REST
REST
#FACTS
• 85% of Amazon services usage is of the REST interface
• Google Deprecates Their SOAP Search API
REST
Representational
State Transfer
REST
Roy Fielding
REST
HTTP
REST
POX + POST + HTTP = REST
REST
POX + POST + HTTP = REST
REST
RESOURCES
REST
Hypermedia
REST
Verbs + hm Media Types
REST
Client Server
SOC
Uniform Interface
Portability
Scalable
REST
Stateless (Stateful)
Client Server
REST
Cacheable
REST
Client Server
REST
HTTP HEADERS(not only uris)
REST
HTTP METHODS
REST
REST
Idempotent
REST
REST - Exemplo
SOAP
SOAP
SOAP
SOAP
SOAP
SOAP
SOAP
<WSDL/>
WS-Provider
(Expõe endpoints)
WS-Comsumer
(Aplicação Client /
SOAPUI)
Browser
Http://url/endpoint?wsdl
Request
SOAP
Message
Response
SOAP
Message Business Code
Http://url/endpoint
SOAP
SOAP
SOAP
SOAP
MIME Types
application/octet-stream
text/html
text/plain
image/jpeg
application/json
application/x-excel
…
SOAP
SOAP
JSON
JSON
JSON
JSR 311
JAX-RS: The JavaTM API for
RESTful Web Services
JSON
ANNOTATIONS
Java
@Path
@Produces
@Consumes
@GET
@POST
@PUT
@DELETE
@HEAD
@Context
@PathParam
@HeaderParam
@CookieParam
@QueryParam
Java
Java
Java
GET /customers/1/order/2/price/2000/weight/2
Java
Exceptions -> Error Code
Java
Parameters
Java
Filters
Java
RESTful services without annotations
Java
web.xml
Java
Programmatically Exposure
Java
WADL
Java
Swagger
Swagger
JEE
Spring Framework
Spring Plataform
Messageria
Workload não previsivel – Buffer / Spooling
Informações sobre o que esta acontecendo
Auto-Escalabilidade com + workers
Re-Processamento
Bom para Long Running Jobs
Queues
Sender
Broker
FILA
WORKER
WORKER
FILA
Message Patterns
Spring Batch
Integration
ESB
ESB
Apache Camel: EIP
Apache Camel
EIP
Apache Camel: DSL
WS-BPEL
WS-BPEL
CEP
BRMS/DSL
BRMS
BRMS
ExpertBRMS
Flow
BRMS
PlannerBRMS
Guvnor - Geral
BRMS
Guvnor – Tabela de DecisãoBRMS
Guvnor – Testes IntegradosBRMS
Data Service
NoSQL
Data Landscape
Design Melhor
Sharding
Text Search
Cache
DataGrid
4 Vs
BigData
Hadoop
Data Lake
Big Data - Hadoop
Data Science BS
FAST Data
FAST Data
Spark
Spark
Spark
Stream Processing
Stream Processing
Stream Processing
Storm
Storm
Reactive
Akka
https://rx.codeplex.com/
Erik Meijer
https://github.com/ReactiveX/RxJava
http://rxscala.github.io/
https://github.com/Reactive-Extensions
Reactive Extensions!
Reactive Streams
Cloud
IaaS, Paas e SaaS
Cloud Patterns
Amazon
Google
Cloud Interna
DevOps
Deploy Process?
DevOps
Promessa? – Realidade!
DevOps
DevOps
Anti-Fragilidade
Anti-Fragilidade
CD
CM Basics
 Versionamento inteligente de software
 Automatização Gestão de Dependencias
 Maven, Gradle, Buildr, sbt, rake
 Artifactory
 CI -> Jenkins
 Versionamento de todas as configurações
 DEV
 PROD
 Ferramentas
 Servidores
 Automação do ambiente do Dev:
 VM
 Vagrant
 Docker
 Dev Pack
 Scripts
 Cultura de Tooling. 2 Linhas de código já deve ter um script 
DevOps
DevOps
CORE-Principles
 Criar processo de liberação confiável e repetitivel
 Automatizar praticamente tudo
 Mater tudo em controle de versão
 Se doer, faça mais frequente e antecipe
 Qualidade inbutida
 PRONTO significa LIBERADO(PROD)
 Todos são responsáveis pelo processo de RELEASE
 Melhoria Continua
Sem Branchs
 Lembre-se que você tem:
 CODE
 Arquitetura
 versionamento
 Backeard compatibility
 Toggles
 Canary release
 Criatividade
 Automação
 DevOps
Não ir pra casa com o Build quebrado
PASS!
CD: Feature Toggles
CD: Blue-Green Deployments
CD: Canary Release
DB: Versioning, Rollback e Refactoring.
Configuration
Anti-Patterns
 Ciclos de releases Longos
 Handoffs ops, dev, qa, etc..
 Preparar anbientes leva tempo
 Aplicar mudanças nos ambientes leva tempo
 Diferença de versoes de artefatos em ambientes
 Falta de invetorio preciso sobre prod
 Documentação de Steps manuais
 Muitos testes manuais pra testar o deploy
 Releases com resultados não previsiveis
SO
SOA /
MSA /
Middleware
C.D
Software
Architecture
Build - GC
C.I - Jenkins
Chef - Puppet
Docker - Vagrant
CD
Automation
DevOps Completo – Ponta a Ponta
Infrasructure
Cloud (Ias)
Data Centers
Network - OS
DB
Middleware Srvs
Tunning / Test
Assessments
Stress Tests
Jmeter / LoadUI
Tunning (DB,Srvs)
Profiling
OnGoing
Support – N1,2,3,4
Tickets – SLAS
Metrics
Alerts / Monitoring
Operation 24/7
Complitude!
Docker
Docker
Docker
Docker
Docker
New:
DoD / Tests
Caos Controlado
http://jagt.github.io/clumsy/
Processo de adoção SOA com LEAN
Lean
Assumption 1: A mature
organization looks at the
whole system; it does not
focus on optimizing
disagreggregated parts.
Assumption 2 A mature
organization focuses on
learning effectively and
empowers the people who do
the work to make decisions.
Lean
Why do it at all ?
Remove Waste
Scientific Management & Taylor
1910
People are not Smart, enough to
know the best way to do it! They are
lazy!
Workers will do as little as possible.
Workers do not care about quality.
Experts tell workers exactly what to
do! Do the best and cheapest way!
Pay extra if they do it the best way
right!
Experts(management/supervisors)
break the work in small parts so the
workers can do it.
W. Edwards Deming
The Humanist
“All anyone asks for is a chance to work with pride.”
1940
People are good. People care !!!
Respect People.
People are about Trust, Pride, and
applause not numbers.
Continuous improvements in work
process: PDCA.
Intrinsic Motivation
Respect People
Lean Origins…
Taichii Ohno
TPS - 1948
Lean Manufacturing
Lean/Kanban Origins in Software…
~2002
(Mary & Tom Poppendieck)
(David Anderson)
~2003
Effort X Benefit
Bucket approach
Hose approach
Batch Size Reduction
You need learn how to see waste !!!
Documentando a bagunça? Design de software primeiro!
Chão Batido Paralelepipido Autoestrada
Tempo
Complexidade
Valor Agregado
Escalabilidade
Risco
http://www.ieewaste.org/images/e-waste-globally-b.jpg
http://tomlinson-design.com/Images/blueprint.jpg
#1 Foco em Tecnologia
#2 Gastar em SW
http://nadaconvencional.files.wordpress.com/2010/01/muito20dinheiro.jpg
#3 Alcançar Perfeição de cara
http://3.bp.blogspot.com/_FjnBlbxHj6w/TD2lcSbGISI/AAAAAAAAAgc/IaBihgR2zjc/s1600/i
mage%5B17%5D.jpg
#4 Não Pensar em Design/Arquitetura
http://marksbackyard.com/sitebuilder/images/Bad-design-463x314.jpg
#5 Não Pensar Orientado a Serviços
http://cupofjacksquat.com/wp-content/uploads/2010/01/fail-owned-service-fail.jpg
http://www.gettyimages.com/detail/103204007/Digital-Vision
#6 Adoção Lenta
http://www.gettyimages.com/detail/103912282/Photodisc
#6 Adoção Lenta
#7 Processo Pesado
http://inusitatus.blogtvargentina.com.ar/img/Image/Inusitatus/2008/Dezembro/trabalho_pesado.jpg
http://1.bp.blogspot.com/_5EE1wK9F0qs/S62hzsBLp4I/AAAAAAAABPw/yRpVIPI-
eSk/s1600/Mudanca.de.Habito.DVDRIP.Xvid.Dublado.jpg
#2 Gastar em Pessoas
http://4.bp.blogspot.com/_xQHCGfOh3f0/S-
h9o7a64VI/AAAAAAAAAdI/7Q2UOWX6WhY/s1600/Sele%C3%A7%C3%A3o+brasileira.jpg
Estrada de Barro Estrada de Paralelepípedo Auto-Estrada
Tempo
Complexidade
Valor Agreg.
Escalabilidade
Risco
#3 Qualidade Evolutiva
#4 Pensar em Design/Arquitetura
http://upload.wikimedia.org/wikipedia/commons/6/65/Ponte_Vasco_da_Gama.jpg
#5 Pensar Orientado a Serviços
http://www.gettyimages.com/detail/96393131/Cultura
#6 Adoção Rápida – Entregas Freqüentes
http://www.gettyimages.com/detail/74211831/MIXA
http://doniree.com/wp-content/uploads/2009/09/yoga1.jpg
#7 Processo Enxuto/Leve
Dia 3 – Test 
Dia 3 – Test 
 O que é Lean? Por que é importante pra SOA/MSA?
 Qual a diferença de topicos e filas?
 Por que precisamos de arch OLAP seprada?
 Qual a diferença de Stream e Big Data?
 Qual a diferença de Data Lake para DW?
 Cite 4 disperdicios SOA sem Lean?
 Por que precisamos das estradas de barro?
 Tem como fazer SOA certo de primeiro?
 Quanto tempo demora pra adotar SOA?
Workshop: SOA, MicroServices e DevOps
@diego_pacheco
Software Architect | Agile Coach
Obrigado!

Workshop soa, microservices e devops