SlideShare uma empresa Scribd logo
DEVTALK
DESENVOLVIMENTO, SEGURANÇA, ARQUITETURA E INFRAESTRUTURA
ZOOX - AGO/2019
ARQUITETURA AWS
ARQUITETURA MULTI-REGION
ARQUITETURA DATA LAKE
MONOLITO X MICROSERVIÇOS
MICROSERVIÇOS
PRÓS
• Aumento de resiliência
• Escalabilidade independente
• Deploy fácil, independente e frequente
(CI/CD)
• Independência de tecnologias e de fácil
migração
• Fácil debug específico
• Pequenos times especializados
• Testes automatizados
• Fácil para dev novo no time
• Reusabilidade e Composição
• Desacoplamento e alta coesão
CONTRAS
• Manutenção (DevOps)
• Versionamento (cuidado)
• Latência
• Transação entre serviços
• Testes de integração e monitoramento
• Integração entre times
• Documentação (api)
• Tratar falhas
• Cuidado com granuralidade (quantidade
serviços)
11/2015
APIS PLATAFORMA ZOOX
Access
PHP
MySQL
Mongo
Audit
Node
Mongo
Company
PHP
MySQL
Mongo
Dashboard
PHP
Email
PHP
MySQL
History
PHP
MySQL
ElasticSearch
Hotel
Node
Mongo
Hotspot
PHP
MySQL
Mongo
Ipiranga
PHP
Page
PHP
MySQL
Partner
Node
Mongo
Person
PHP
MySQL
ElasticSearch
Region
PHP
MySQL
Subscription
PHP
MySQL
Survey
PHP
MySQL
ElasticSearch
User
PHP
MySQL
Workflow
PHP
ZMX
PHP
Mongo
ElasticSearch
Graph
Python
Neo4J
DEFINIÇÕES IMPORTANTES
• Bounded Context
• UUID
• Versionamento (semver.org)
• Síncrono (request/response) X Assíncrono (event-based)
• REST
BOUNDED CONTEXT
Company
Group
AccessPoint
IpBinding
InternetLink
Hotspot
BusinessCenter
Router
Port
PlanWalledGarden
PROBLEMAS DO ID AUTOINCREMENT
• Fácil extrair certas informações (cria um usuário novo e pelo id
você sabe quantos usuários tem na base)
• Enumerar entidades (se não tiver tratamento, basta trocar o id
na url para outro número)
• Não é único entre as tabelas (existe uma entidade 1 em todas
as tabelas)
• Não é possível usar em sistemas distribuídos
• Muito difícil migrar dados para outro banco ou usar como
replicação (MySQL para Elasticsearch por exemplo)
EXEMPLO
UUID
• V4: 362e80f5-af9a-4d68-86da-5bf014dcafc1
• V4 COMB
• 8e208169-a0d1-419d-b17f-913b9985b8ac
• 8e21f643-a18e-4800-9c8d-4a71916a886b
• Geração pode ser descentralizada.
• Você não consegue enumerar as entidades
• Você não sabe quantos registros tem na tabela
• Você não precisa falar com a database para gerar um valor
“The number of random version-4 UUIDs which need to be generated in order to
have a 50% probability of at least one collision is 2.71 quintillion.
This number is equivalent to generating 1 billion UUIDs per second for about
85 years.” - Wikipedia
VERSIONAMENTO
CONTROLE DE VERSÃO
OPÇÕES DE VERSIONAMENTO
• URI
1. region.zooxwifi.local/v1/city
2. region.zooxwifi.local/v2/city
• Header customizado
1. Accept-version: v1
2. Accept-version: v2
• Header Accept
1. Accept: application/vnd.region.v1+json
2. Accept: application/vnd.region.v2+json
SYNC X ASYNC
SÍNCRONO
PRÓS
• Baixa complexidade
• Fácil tratamento de erro
• Resposta em “real-time”
CONTRAS
• Cada serviço tem que estar
disponível
• Resposta lenta
ASSÍNCRONO
PRÓS
• Resposta imediada, não
precisa esperar todos os
serviços responderem
• Desacoplamento entre os
serviços
• Serviço pode não estar
disponível na hora
• Isolamento de falha
CONTRAS
• Arquitetura complicada
• Tratamento de erro
• Acoplamento ao “message
broker”
• Alta latência se fila cheia
• Custo de monitoramento
• Nem sempre possível (listar
itens na tela)
REST API
GET ENTITY
GET COLLECTION
ERRO AO CRIAR
API - STATUS HTTP
2XX
• 200 – OK
• 201 – CREATED
• 202 – ACCEPTED
• 204 – NO CONTENT
4XX
• 400 – BAD REQUEST
• 401 – UNAUTHORIZED
• 403 – FORBIDDEN
• 404 – NOT FOUND
• 405 – METHOD NOT ALLOWED
• 409 – CONFLICT
• 422 – UNPROCESSABLE ENTITY
• 429 – TOO MANY REQUESTS
5XX
• 500 – INTERNAL SERVER ERROR
• 502 – BAD GATEWAY
• 503 – SERVICE UNAVAILABLE
• 504 – GATEWAY TIMEOUT
SEGURANÇA
• Não confie em ninguém (filtrar/validar toda entrada, escapar
toda saída)
• Se prepare para o pior cenário
• Princípio do menor privilégio
• Se não testou, não assuma que funciona
• SQL Injection
• Cross-Site Scripting (XSS)
• https://www.acunetix.com/websitesecurity/php-security-1/
(exemplos)
INJEÇÃO DE DEPENDÊNCIA – NODE -
TYPEDI
INJEÇÃO DE DEPENDÊNCIA – PHP – PSR-11
INJEÇÃO DE CONFIGURAÇÃO – PERMITE
EXPANSÃO
INTERFACE – FACILITA TESTES E NOVAS
FEATURES
THE SEPARATION OF CONCERNS (SOC)
PRINCIPLE
Os conceitos ou preocupações são os diferentes aspectos da
funcionalidade do software. Por exemplo, a "lógica de negócios"
do software é uma conceitos, e a interface pela qual uma pessoa
usa essa lógica é outra conceitos.
A separação de conceitos é manter o código para cada uma
dessas responsabilidades separadas. Alterar a interface não deve
exigir a alteração do código de lógica de negócios e vice-versa.
ARQUITETURA DE 3 CAMADAS
Idéia de usar SoC, é mover
sua regra de negócio para
fora da sua camada de
roteamento (resources)
BOAS PRÁTICAS
• Não coloque sua regra de negócios dentro dos controladores!
• Um dia você pode precisar reutilizar em um outro lugar.
• Seu código fica mais “macarrônico”
• Dificulta a construção de teste unitário
• Dificulta a legibilidade do código
• Coloque seus SQL/DataAccess na camada correta
EXEMPLO
EXEMPLO MELHORADO
USE A CAMADA PUB/SUB
O padrão pub/sub vai além da arquitetura clássica de 3 camadas, mas
é extremamente útil.
Um endpoint simples que cria um usuário agora, pode querer chamar
serviços de terceiros, talvez para um serviço de análise ou talvez iniciar
uma sequência de e-mail.
Mais cedo ou mais tarde, essa simples operação de "criação" estará
fazendo várias coisas e você terá 1000 linhas de código, tudo em uma
única função.
Isso viola o princípio da responsabilidade única.
EXEMPLO
Chamadas imperativas não é a melhor maneira de fazer isso.
Uma abordagem melhor é emitir um evento, ou seja, "um usuário se
inscreveu com este e-mail".
E você está feito, agora é da responsabilidade dos ouvintes fazer o
trabalho deles.
EXEMPLO
• Agora você pode separa seu eventos em vários arquivos, de acordo
com a afinidade de cada um
FUJA DO ASYNC/AWAIT HELL!
• Encontre funções que dependam da execução de outras declarações
• Agrupe códigos dependentes em funções assíncronas
• Execute estas funções assíncronas simultaneamente
EXEMPLO
EXEMPLO APRIMORADO

Mais conteúdo relacionado

PDF
WSO2 Application Server como Alternativa ao Tomcat
PDF
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
PPTX
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
PDF
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
PDF
JBoss Fuse Workshop Desenvolvimento - Parte 1
PPTX
Introdução aos Conceitos do WSO2 ESB
PDF
Microservices com ASP.NET 5
PPTX
Docker para devs .NET
WSO2 Application Server como Alternativa ao Tomcat
JBoss Fuse Service Works - O Fuse além da integração - PT-BR
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
DevOps, Chef, Puppet, Ansible e como vender milhões na Black Friday com 100% ...
JBoss Fuse Workshop Desenvolvimento - Parte 1
Introdução aos Conceitos do WSO2 ESB
Microservices com ASP.NET 5
Docker para devs .NET

Mais procurados (20)

PPTX
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
PDF
Workshop Microservices - Arquitetura Microservices
PPTX
O Futuro do ASP.NET
PDF
Vantagens e desvantagens de uma arquitetura microservices
PDF
Escalabilidade e Resiliência de Microservices em Python
PDF
PPTX
Microservices - Quebrando gigantes em pequenos
PDF
Microservices
PDF
DevOps - melhores práticas e integração contínua
PDF
Microservices em Python: desafios e soluções
PPTX
Novidades do ASP.NET 5.X
PDF
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
PPTX
Road to serverless
PDF
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
PDF
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
PDF
Arquiteturas escaláveis e tolerantes a falhas
ODP
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
PDF
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
PPTX
Futuro do ASP.NET vNext - MVP ShowCast
PDF
Introdução à Microservices
ASP.NET 5 - Novidades do Desenvolvimento Web em .NET
Workshop Microservices - Arquitetura Microservices
O Futuro do ASP.NET
Vantagens e desvantagens de uma arquitetura microservices
Escalabilidade e Resiliência de Microservices em Python
Microservices - Quebrando gigantes em pequenos
Microservices
DevOps - melhores práticas e integração contínua
Microservices em Python: desafios e soluções
Novidades do ASP.NET 5.X
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
Road to serverless
DevCommerce Conference 2016: SecDevOps – Testes contínuos de segurança em apl...
DevCommerce Conference 2016: Vantagens e resultados de containers e VMs para ...
Arquiteturas escaláveis e tolerantes a falhas
Introdução ao JBoss Fuse 6.x: criação e implantação de um serviço CXF
DevCommerce Conference 2016: React para aplicações web e mobile como platafor...
Futuro do ASP.NET vNext - MVP ShowCast
Introdução à Microservices
Anúncio

Semelhante a DevTalk 08/2019 (20)

PDF
Soa - Arquitetura orientada a serviços
PPTX
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
PDF
Introdução a Microservices com Node.JS
PDF
Workshop soa, microservices e devops
PPTX
IntroduçãO Ao Desenvolvimento Web 2
PDF
Soa Woa Rest
PPTX
Introdução ao desenvolvimento web - 2 - iDez 2010
PDF
Skalena - Overview de Soluções
ODP
Pense Aberto, Pense Linux
PPTX
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
PDF
Infraestrutura como código Terraform aws openshift Ansible
PPTX
Tendências e Dicas para o Desenvolvimento de Software
PDF
Big Data como Serviço: da captura à visualização de dados com alto desempenho
PDF
[Ass] arquiteturas soa, woa, e rest
PPTX
DevOps Exame.com
PDF
APIs gerenciadas de ponta a ponta
PDF
APIs gerenciadas de ponta a ponta
PDF
[Ass] arquiteturas soa, woa, e rest
PDF
Composição e Integração de Sistemas em 2013
PDF
Padrões de design para APIs REST autoescaláveis sem complicação
Soa - Arquitetura orientada a serviços
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Introdução a Microservices com Node.JS
Workshop soa, microservices e devops
IntroduçãO Ao Desenvolvimento Web 2
Soa Woa Rest
Introdução ao desenvolvimento web - 2 - iDez 2010
Skalena - Overview de Soluções
Pense Aberto, Pense Linux
Arquitetura de Serviços - SOA, REST, Microservices e a plataforma .NET
Infraestrutura como código Terraform aws openshift Ansible
Tendências e Dicas para o Desenvolvimento de Software
Big Data como Serviço: da captura à visualização de dados com alto desempenho
[Ass] arquiteturas soa, woa, e rest
DevOps Exame.com
APIs gerenciadas de ponta a ponta
APIs gerenciadas de ponta a ponta
[Ass] arquiteturas soa, woa, e rest
Composição e Integração de Sistemas em 2013
Padrões de design para APIs REST autoescaláveis sem complicação
Anúncio

Último (7)

PDF
Evolução em código: algoritmos genéticos com PHP
PPTX
Curso de Windows 11 resumido na prática.pptx
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PDF
Dos requisitos ao código: como criar código rastreável em PHP
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PDF
apresentacao introducao computacao ead.pdf
PPTX
Mapeamento de Objeto para Tabela Relacional
Evolução em código: algoritmos genéticos com PHP
Curso de Windows 11 resumido na prática.pptx
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
Dos requisitos ao código: como criar código rastreável em PHP
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
apresentacao introducao computacao ead.pdf
Mapeamento de Objeto para Tabela Relacional

DevTalk 08/2019