Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Twelve-Factor App: Review and lessons learned

The Twelve-Factor App: Review and lessons learned

Over the years, microservice architecture has been widely adopted, as it provides numerous advantages such as technological heterogeneity, scalability, decoupling, etc.

However, like everything in technology, we have advantages and disadvantages and to mitigate them, 12 good software practices called: The Twelve-Factor App was developed.

In this talk, we will review these best practices and share our experiences on projects over the past few years using Microservice architecture.

Ef3b48913ea26665c25b2ad78e449d16?s=128

Luram Archanjo

August 20, 2020
Tweet

Transcript

  1. The Twelve-Factor App

  2. Objetivo Dúvidas The 12 Factors App Cloud Native App Agenda

  3. Objetivo

  4. Cloud Native App

  5. Cloud Native App Os aplicativos nativos da nuvem são uma

    coleção de serviços pequenos, independentes e fracamente acoplados. O nativo da nuvem é uma abordagem para construir e executar aplicativos que explora as vantagens do modelo de entrega de computação em nuvem. As tecnologias nativas da nuvem capacitam as organizações a criar e executar escalonáveis aplicativos em ambientes modernos e dinâmicos, como público, privado e nuvens híbridas.
  6. Cloud Native App Um conjunto de boas práticas para otimizar

    um aplicativo na nuvem por meio de: • Conteinerização • Orquestração • Automação By: Otávio Santana
  7. The Twelve-Factor App

  8. The Twelve-Factor App Metodologia para construção de software como serviço:

    • Portabilidade • Escalabilidade • Divergência mínima • Declarativo
  9. I. Base de Código Uma base de código com rastreamento

    utilizando controle de revisão e muitos deploys
  10. I. Base de Código

  11. I. Base de Código

  12. II. Dependências Declare e isole as dependências

  13. III. Configurações Armazene as configurações no ambiente NÃO NO CÓDIGO

  14. III. Configurações Produção Desenvolvimento Configuração Configuração

  15. III. Configurações Produção Desenvolvimento

  16. III. Configurações application.yaml spring: application: name: ${APPLICATION_NAME:app-demo} jpa: datasource: platform:

    ${DATABASE:mysql} url: ${DATASOURCE_URL} username: ${DB_USERNAME} password: ${DB_PASSWORD}
  17. III. Configurações app-deployment.yaml apiVersion: apps/v1 kind: Deployment template: spec: containers:

    - name: app image: app:v1 env: - name: DATASOURCE_URL value: "jdbc:mysql://localhost:3306/database" - name: DB_USERNAME value: "username" - name: DB_PASSWORD value: "password"
  18. None
  19. Dica do Spring application.properties spring.application.name: Zup ---------------------------------------------- Docker, Openshift, Kubernetes,

    etc SPRING_APPLICATION_NAME : Zup Insights
  20. IV. Serviços de Apoio Trate os serviços de apoio, como

    recursos ligados
  21. IV. Serviços de Apoio

  22. V. Construa, lance, execute Separe estritamente os builds e execute

    em estágios
  23. V. Construa, lance, execute CI: Continuous Integration CD: Continuous Deployment

    & Delivery
  24. V. Construa, lance, execute • Blue \ Green • Zero

    downtime • Canary \ Dark launch • 90% v1 • 10% v2 • Traffic Mirroring
  25. Progressive Delivery

  26. VI. Processos Execute a aplicação como um ou mais processos

    que não armazenam estado
  27. VI. Processos • Escalabilidade Horizontal • Balanceador de carga •

    Escala automática • Docker • Kubernetes • Openshift • Os dados devem ser armazenados em um serviço de apoio com estado, normalmente um banco de dados!
  28. VII. Vínculo de porta Exporte serviços por ligação de porta

  29. Utilize JAR não WAR

  30. VIII. Concorrência Dimensione por um modelo de processo

  31. VIII. Concorrência

  32. IX. Descartabilidade Maximizar a robustez com inicialização e desligamento rápido

  33. IX. Descartabilidade Microservice Balanceador de Carga Microservice Não está pronto!

  34. None
  35. IX. Descartabilidade Referência: https://twitter.com/thomaswue/status/1145603781108928513

  36. IX. Descartabilidade Frameworks com rápida inicialização:

  37. IX. Descartabilidade Referência: https://spring.io/blog/2020/05/15/spring-boot-2-3-0-available-now Microservice Microservice O desligamento normal é

    compatível com todos os quatro servidores da Web incorporados (Jetty, Reactor Netty, Tomcat e Undertow) e com aplicativos da Web reativos e baseados em Servlet.
  38. X. Dev/prod semelhantes Mantenha o desenvolvimento, teste, produção o mais

    semelhante possível
  39. XI. Logs Trate logs como fluxo de eventos

  40. XI. Logs Microservice Microservice Microservice

  41. Observabilidade

  42. XII. Processos de Admin Executar tarefas de administração/gerenciamento como processos

    pontuais
  43. Resumo I. Base de Código II. Dependências III. Configurações IV.

    Serviços de Apoio V. Construa, lance, execute VI. Processos VII. Vínculo de porta VIII. Concorrência IX. Descartabilidade X. Dev/prod semelhantes XI. Logs XII. Processos de Admin Construir & Implantar Design & Arquitetura
  44. Onde aprender mais? Z U P . C O M

    . B R / B L O G ONDE APRENDER MAIS OPENSOURCE.ZUP.COM.BR
  45. LURAM ARCHANJO Engenheiro de Software luramarchanjo CONTATO @luram_archanjo luram.archanjo@zup.com.br

  46. Obrigad_!