O documento discute microsserviços e suas aplicações no e-commerce. Apresenta microsserviços como pequenos serviços autônomos que trabalham juntos através de APIs. Discutem vantagens como escalabilidade independente, permissões restritas e teste de novas tecnologias. Também aborda desvantagens como complexidade de testes e monitoramento, e inconsistência de dados. Fornece melhores práticas como automação contínua, contratos entre serviços e padronização.
Congresso Grocery & Drinks | Transformando o e-commerce alimentar por meio do...
Fórum 2016 - Plataforma própria e o uso de micro serviços no e-commerce
1. Plataforma própria e o uso de
microsserviços no e-commerce
Wanderlei Souza
wanderlei.souza@belezanaweb.com.br
@wandi
2. Wanderlei Souza
hífen deixará de ser empregado…
Quando o prefixo da palavra terminar em vogal e
o segundo elemento começar com as consoantes s
ou r. Nesse caso, a consoante será duplicada.
Microsserviços
3. Wanderlei Souza
Beleza na Web
• 1M clientes
• 2.5K pedidos por dia
• 2.3M facebook likes
• 200 funcionários (30 TI)
4. Wanderlei Souza
• O que são microsserviços?
• Quais são as vantagens?
• E as desvantagens…
• Melhores práticas
Agenda
5. Wanderlei Souza
“Pequenos serviços autônomos que trabalham
bem em conjunto”
• Processos independentes
• Comunicação por meio de APIs
• Pequenos e especializados
Microsserviços
Sam Newman, ThoughtWorks
9. Wanderlei Souza
• Alinhar arquitetura com a empresa
• Entregar funcionalidade rapidamente
• Escalar de forma independente
• Permissionamento restrito
• Testar novas tecnologias facilmente
Vantagens
10. Wanderlei Souza
• Qual caminho devo tomar: Muitas opções =)
• Longo é o caminho
Desvantagens
3 meses 6 meses 11 meses
12. Wanderlei Souza
• Testes em sistemas distribuídos
• Encontrar o problema pode ser difícil
• Monitoração de centenas de máquinas
• Resiliência e performance não vem de graça
• Cachear é fácil, agora tirar do cache…
• Consistência de dados
Desvantagens (será?)
Nasceu como um salão 8 anos atrás
Cultura do fazer
Absolute leader in Professional Haircare online
Fastest Growing Online Retailer (continuamos a crescer)
Sair da apresentação sabendo:
que são microservices, como usar de forma correta, suas vantagens, desvantagens e se servem para sua empresa.
Gilt, Orbitz, Netflix, Beleza na web.
Autonomia é a palavra chave.
Comunicação: qualquer coisa diferente de banco de dados, pode ser eventos ou mensagens.
Autonomia: Mudar e deployar sem tocar em qualquer outra coisa… mudanças independentes
Faz uma única coisa, de forma bem feita.
Uma forma de SOA (1996, SOA) – Microservices são SOA feito da forma correta
Pequenos: qual o tamanho? Diferentes linguagens/plataformas e verbosidade tornam difícil medir isso
Smaller => Smaller => Serverless
Key: ONE THING and ONE THING WELL
Alinhamento com times, melhora ainda com a questão geográfica (autonomia, novamente), colocar mais pessoas para resolver um serviço específico.
Eric Raymond wrote that "If you have four groups working on a compiler, you'll get a 4-pass compiler”.
Rodar testes no monolito é lento, uma falha pode quebrar todo o código
É difícil isolar o que vai mudar: puxar a pena e vem a galinha
Insegurança diminui a frequencia de mudança, menos código em produção
Horizontal Deduplication: lots of the same thing (ELBs)
Data Partitioning: sharding, exemplo Vostu
Functional Decomposition: Microservices
---
Quanto maior uma máquina é, mais caro para duplicar a máquina
Functional decomposition + barato, posso criar regras específicas de segurança em um repositório menor
The art of scalability
Isso se extende aos bancos de dados. Postgree, Mongo, Elastic Search, Redis, Redshift
Unidades de deploy separadas
Adotar novas tecnologias de uma forma mais rápida
Criar novos serviços, novos hexágonos: ex. Push notification para mobile
Sua empresa não é um monolito
Opções: Linguagens, Banco de dados etc. Gatinho da Alice.
Leva tempo para fazer o primeiro microserviço: infra estrutura
Caminho de automação, descobrir coisas, //comofaz
Gilt.com
Ponto de inflexão == escala
Após dois anos, em jan/2012 o número de microserviços ultrapassou o número de empregados
Carrinho funcionando, gateway funcionando, não consigo verificar o estoque… devo seguir em frente? Tradeoffs
Monolíticos são binários, ou funcionam ou não, MS são mais adaptáveis a falha (eg. Corpo humano)
Eventual Consistency
Sistema cebola, muitas camadas e quando você corta é só choro.
CTO Amazon: Nenhum time pode ser maior que ser alimentado por duas pizzas
Nomes refletem funcionalidades
Como spotify organiza times: Tribe, Squad, Guilds, etc
Eu não acredito em unicórnios, nem em fullstack developers
Na hora de agrupar, funcionalidades são mais importantes que pensar em substantivos (entidades): Um produto em estoque, um produto no catálogo etc.
Event Storming, Domain Driven Design
Modelo Spotify
Continuous Delivery: Todo commit é sujeito a ser um release candidate.
Caixa de Ferramentas Devops: Gleicon Moraes
Kubernetes, Docker, Heroku => que seja fácil. Durmo e acordo, uma nova tecnologia nessa área surge. Comparar com libs javascript do frontend.
Na fila plain javascript, Começa o almoço com angular, fala de angular 2 e sai do restaurante usando react, desiste e volta para plain (vanila) javascript
Testes de “Expectations” para clientes para tornar tudo explícito.
Alternativas quando quebra: Manter duas versões do serviço no ar /v1 /v2 (e impulsionar a mudança com novas regras, falar da minha experiência no apontador): Não recomendo.
Implementar um /v2 no mesmo serviço no lugar de subir outro serviço (discovery nightmare)
Exemplo de Oauth1 e OAuth2 quebrando tudo
Licenças Oracle/MS podem te deixa louco, multiplos schemas?
Velocidade, performance is the king, ecommerce cada milesegundo faz a diferença
Acesso em uma tabela, o controle de colunas é difícil. (esconder os detalhes de implementação) centenas de colunas SAP
Tira o acesso no schema (como mudar se eu não sei quem acessa) e espera o telefone tocar
Esconda o banco de dados, API calls
Refactoring para repositórios acessarem APIs (APIs também são fontes de dados)
Cuidado com protocolos de integração (RMI depende de JVMs, Thrift uma opção)
Artigo da amazon que cada milisegundo de atraso perdem dinheiro
ESB acabam ficando com muita inteligência, conhecem seu domínio.
Arquitetura acaba se fundindo nesse bloco mágico
Esse “technical boundary” acaba dominando toda sua arquitetura (BPM, hahaha, interfaces nos métodos, contexto… tudo contaminado, programar old school é uma opção)
Se tiver isso mantenha isso bem isolado e muuuuito, muuuuito bobo
Orquestra com maestro e banda de Jazz
Coreografia promove Baixo acoplamento e descentralização
Desvantagens: Business Process desaparece => LOG FILES
Usar uma versão menos abstrata (compra ou criar usuário)
Microsserviços é sobre descentralizar, mas o que deve ser centralizado?
Repositório, é aqui que começa o Continuous Delivery
Centralizar não significa perder redundância
Monitoração: Um microsserviço por SO ou vários microsserviços por SO
Múltiplos serviços em um SO podem quebrar o conceito de independência (restart?, mudar a versão do framework, lib, java etc)
Problema de um para cada pode aumentar o custo (não é uma equação fácil, máquinas menores?)
Hypervisors e Virtual Machines e Docker
Paginação, HATEOAS, formato de datas, validação
https://github.com/paypal/api-standards/blob/master/api-style-guide.md
Paginação, HATEOAS, formato de datas, validação
https://github.com/paypal/api-standards/blob/master/api-style-guide.md
Zuul The Gatekeeper
Monetização da API?
Zuul, Sensedia etc
Simplest service discovery: DNS
Paginação, HATEOAS, formato de datas, validação
https://github.com/paypal/api-standards/blob/master/api-style-guide.md
Zuul The Gatekeeper
Monetização da API?
Zuul, Sensedia etc
Simplest service discovery: DNS
Zookeeper, Etcd, Consul, Eureka, Plain old DNS
Cascading Failure: Resiliência não é de graça.
Microservices não são resilientes por default
Timeouts, Bulkheads, Circuit Breakers: Fail Fast
Promover BIST
Hystrix
Livro: Release It.
Corta o dedo e não morre.
Meu mestrado foi sobre testabilidade: observabilidade e controlabilidade
CPU / DiskSpace / IO de cada microservico: Cloudwatch, new relic
Você corre com monitoração mas não monitora seus sistemas
Tons and tons of small services / machines
New relic + Splunk + OpsGenie
Fluentd, Logstash + Kibana
Graphite, Cacti
Correlation ID (contexto MDC): Fundamental para coreografia e eventos
Tenha um dashboard simples e drilldown para um painel de avião