O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

De um sistema legado para micro serviços com GraphQL

482 visualizações

Publicada em

Palestra "De um sistema legado para micro serviços com GraphQL", por Sebastian Ferrari, CTO e Co-founder da Taller, na CEJS 2019 em Fortaleza.

Publicada em: Software
  • Entre para ver os comentários

  • Seja a primeira pessoa a gostar disto

De um sistema legado para micro serviços com GraphQL

  1. 1. De um sistema legado para microsserviços com GraphQL Sebastian Ferrari sebas@taller.net.br @sebas5384
  2. 2. Momentum (do inglês) ● Momento linear na física. ● Impulso, ímpeto ou velocidade adquirida.
  3. 3. Microservices Momentum
  4. 4. Motivo ?
  5. 5. Legacy System Proxy
  6. 6. ● Migração de sistemas legados monólitos. ● Mudanças são lentas, custosas e com alto risco. ● Baixíssima experimentação. ● Tecnologias antigas, dificulta contratação de novos talentos. ● Tecnologias proprietárias com licenças, vendor lock-in, customização lenta e custosa…
  7. 7. Novos problemas
  8. 8. ● Baixa interoperabilidade entre os serviços e seus consumidores / clients. ○ Padrões abertos e bem definidos. ○ Ontologia é um modelo de dados que representa um conjunto de conceitos dentro de um domínio e os relacionamentos entre estes.
  9. 9. ● Muito esforço para criar documentação e manter atualizada! ● Resposta dos serviços não é tolerante a falhas. ● Relação entre recursos/models inconsistente. ● Começa com 1 serviço e rapidamente vai para mais de 20. ● A complexidade aumenta.
  10. 10. GraphQL Schema language type Project { name: String tagline: String contributors: [User] } type User { name: String projects: [Project] } type Query { users: [User] } Query language query { users { name projects { name tagLine } } } Result { users: [{ name: 'Sebastian McKenzie', projects: [{ name: 'Babel', tagLine: 'Use next generation...' }] }, { name: 'Sashko Stubailo', projects: [{ name: 'Apollo Client', tagLine: 'A fully-featured, production ready...' }] }] }
  11. 11. types.gql type User { id: String name: String } type Query { user (id: String): User } Apollo resolvers.js const resolvers = { Query: { user: (root, { id }) => fetch(`/api/users/${id}`) } } export default resolvers
  12. 12. Johnny Cash
  13. 13. React Apollo react-apollo import { withQuery } from '@apollo/react-hoc' import gql from 'graphql-tag' const UserAvatar = ({ data: { user } }) => ( <div> <img src={ user.photo } alt={ user.name } /> <h4>{ user.name }</h4> </div> ) const query = gql` query UserInfo { user (id: '1') { name photo } } ` const withData = withQuery(query) export default withData(UserAvatar) Conectar o uma GraphQL query a um componente.
  14. 14. Por que GraphQL ?
  15. 15. ● Pensamento grafo !! mais do que recursos. ● Tipagem estática. ○ Documentação automática. ○ Erros de validação de graça. ● Tolerante a falha. Um campo pode falhar, mas o resto da resposta é resolvida. ● Monitoração de performance por campo, não só por query ou request.
  16. 16. ● Query Declarativa de vários serviços ● Cada campo / “resolver” é independente. ● Linguagem ubíqua onde os domínios de negócio usam a o mesmo idioma para se comunicar com a área técnica. (DDD) ● Adoção progressiva + thin layer ● Application Layer (DDD Eric Evans) ou Service Layer (Martin Fowler)
  17. 17. Legacy System GraphQL Gateway Microservices Domain Layer Business Logic
  18. 18. bit.ly/2tKxYxI
  19. 19. Legacy System Backend for Frontends (BFF) Microservices Domain Layer Business Logic
  20. 20. ● Aumento na performance do client, menos round trips. ○ /user/1 -> /user/1/comments -> … ● Menos código no client !! ● Mudanças mais rápidas sem quebrar clients, com detecção de breaking changes no build. ● API evolutiva, não revolucionária com v1 v2… ○ uglyField @deprecated(reason: “Use other new field")
  21. 21. Developer Experience (DX)
  22. 22. Quem usa em produção?
  23. 23. Agregação de schemas (APIs) - Stitching e Delegation - Apollo Federation - API’s Fractais
  24. 24. Antes
  25. 25. Depois
  26. 26. Account Product Review
  27. 27. Review Service

×