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

Arquitetura: Débito Técnico Zero (with footnotes)

Arquitetura: Débito Técnico Zero (with footnotes)

Mostrar um Overview sobre como pode-se criar uma arquitetura (ou modificar uma já existente) para ganhar-se produtividade, diminuir custos de manutenção e preparar-se para escalar em situações de caos. (Versão com as notas do apresentador)

Miere Liniel Teixeira

May 12, 2016
Tweet

More Decks by Miere Liniel Teixeira

Other Decks in Technology

Transcript

  1. Arquitetura: Dédito Técnico Zero Um guia rápido para se tornar

    um CTO competente by Miere Liniel Teixeira
  2. O que me impedia de ir em frente? 1. Número

    crescente de bugs 2. Pressão dos investidores e crescimento violento de usuários 3. Incapacidade de escalar com tranquilidade 4. Efeito castelo de cartas
  3. O que depende diretamente dos developers? 1. Número crescente de

    bugs 2. Pressão dos investidores e crescimento violento de usuários 3. Incapacidade de escalar com tranquilidade 4. Efeito castelo de cartas
  4. Uma breve nota sobre... 1. Número crescente de bugs 2.

    Pressão dos investidores e crescimento violento de usuários 3. Incapacidade de escalar com tranquilidade 4. Efeito castelo de cartas
  5. NASA Mariner 1 to Venus veer off course - Hyphen

    - $18bi. Lexus e350 - 9mi cars world wide - $3bi. HSBC - 20min - $50k.
  6. As várias faces dos débitos BUGS Tarefas repetitivas Build manual

    Features inacabadas Scripts que substituem programas Falta de testes unitários Falta de planejamento das features Ausência de plano de descontinuidade
  7. Use as Ferramentas Certas! É muito mais vantajoso, a longo

    prazo, aprender uma tecnologia que se adapta melhor às suas necessidades do que manter estruturas adaptadas para funcionar nas ferramentas em que você já domina.
  8. RDMBS Data warehousing & analytics JOIN BASED / Report focused

    NoSQL DocumentS Column Families CAP Theorem ACID transactions Sharding TimeSeries Historic Data Key Value Partitioning Existem muitos modelos de persistência hoje. Apesar de RDBMS ser o mais academicamente difundido, vale a pena verificar se outros modelos não atender melhor. Aqui entra um ponto de P&D que deve, no início do projeto, demorar no máximo 2 dias (MVP). Se for um projeto em curso, 5 dias de pesquisa, e a elaboração um “Plano de Descontinuidade” para migrar o antigo modelo para o novo.
  9. Conheça as fraquezas e virtudes da sua plataforma de desenvolvimento

    É importante definir um “stop loss”. Deve-se estudar a ferramenta que melhor se adapta às necessidades de pequeno e médio prazo. Identificar quais são as fraquezas e virtudes destas ferramentas e incluir no roadmap um plano para mitigar as fraquezas.
  10. Scaling Out Configuring for Hazelcast Consul.io ETCD ZooKeeper MemCached Ñ

    é contraditório pensar em escala primeiro! São tarefas simples e deve durar no máximo 1 ou 2 dias! Dentre outros fatores, as pessoas esquecem de rever seus modelos de autenticação para q a sessão pertença ao cluster, e não à aplicação. O mesmo se aplica a log, stacktraces, etc… Se estas tarefas tornarem-se demoradas, você está usando as ferramentas erradas...
  11. Arquitetura começa pelo código! Todo mundo acha que arquitetura são

    ferramentas… Doce ilusão: arquitetura problemática é sinônimo de código mal feito.
  12. o necessário Codar somente Minimum Viable Design “Se o retrabalho

    for inevitável, que ele seja o menor possível” Evitar: Criar classes genéricas para tudo, criar abstrações desncessárias, módulos que nunca vieram a ser realmente usados por outros projetos. Ler “Regra da Excessão, Coincidência ou Tendência”: http://bit.ly/1syanOu
  13. Simples!!! Começar Benefits Driven Design Problemas simples são mais fáceis

    de arrumar! Deve-se entender que não existe código ruim, mas código com menos benefícios. Ler “Regra da Excessão, Coincidência ou Tendência”: http://bit.ly/1syanOu
  14. Arquitetura original do plugin Multiplos pontos de manutenção 4 caros

    recursos da Amazon Tipo de Máquina EC2: t2.MEDIUM Arquitetura original do plugin da Sizebay (sem demais serviços): muito complexa para o problema que queria-se resolver. Evitar o Big Design Up Front: https://en.wikipedia.org/wiki/Big_Design_Up_Front
  15. Nova Arquitetura do plugin 150% Mais barata! 4X Menos manutenção

    Ponto ÚNICO de manutenção 2 caros recursos da Amazon Tipo de Máquina EC2: t1.NANO Deploy simplificado! Menor TTL Da informação Monitoramento simplificado! Arquitetura atual do plugin da Sizebay (sem demais serviços): menos complexa, e com mtas vantagens sobre a anterior. As vezes, projetar melhores arquiteturas significa torná-las mais simples.
  16. Clean Code S.O.L.I.D Single Responsibility Principle Acyclic Dependencies Principle Open-Closed

    Principle Notar que o código foi feito para ser quebrado futuramente. Quando se identificar gargá-los de performance (ou identificar que parte do sistema sofre mta alteração em relação ao todo) da para se criar um Micro-serviço dele. Ler “Princípios de OOD” : http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
  17. ~100% Cobertura de código: “Se você não faz teste unitário,

    você é anti-ético!” Existem muitas ferramentas e abordagens para se testar código, já não dá pra dar desculpas. Se a forma que se codifica os testes gera muito retrabalho (ou manutenção nos testes), então o código testado não está bem feito: procure melhorar sua orientação a objetos. Respeite os seus cliente e colegas de trabalho e faça testes. Ler: “Refactoring” (Martin Fowler); “Princípios de OOD” : http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
  18. Code Coverage (%) Bugs último Semestre Overview de alguns de

    nossos micro-serviços agrupados em pares entre versão antiga e versão reescrita com código (ex: Legacy Calc versão antiga do Abacus). Praticamente sem bugs, os softwares novos não nos dão retrabalho.
  19. Métricas De código rodadas à cada commit Tamanhos de método

    Acoplamento entre objetos Erros básicos de lógica Toda linguagem de programação possui ferramentas que ajudam na análise estática de código, para identificar possíveis problemas. Maven e Gradle são compeões de plugins que ajudam nisso. Sugestões: CheckStyle e FindBugs. (PMD é mto Old School)
  20. Medidas de longo prazo que fizeram a diferença no dia

    C Dia C == Dia do Caos. Este dia vai chegar, e se você estiver preparado, você será previamente notificado e terá tempo hábil de evitar uma catastrofe.
  21. 1 botão Ao invés de um script no servidor (ou

    no notebook) Scripts costumam não ter testes, e por não fazer parte do ciclo de desenvolvimento acabam ficando desatualizados. Por isso não são confiáveis. Sem falar que, se forem rotinas que o resto do time poderia usar, você perde tempo executando-o pelo seu time… Automatize tudo e nunca mais se preocupe com isso!
  22. Nosso painel administrativo: removeu todos os nossos scripts, e nunca

    mais precisamos acessar aos servidores para rodar rotinas pelo nosso time. É feio, mas como só nós usamos, não tem problema.
  23. 1 linha Build completo em Isso torna tudo muito mais

    fácil. Desde implantar um ambiente de desenvolvimento até incluir o projeto na integração continua.
  24. Nosso script da integração continua: uma linha e o build

    está completo. As demais linhas são apenas para fazer o deploy ou executar testes, dependências, etc...
  25. 30 minutos Ambiente de desenvolvimento configurado em Automatize tudo, e

    diminua inclusive o tempo de setup das máquinas do seu time.
  26. Temos um projeto, com scripts e imagens Docker que automatiza

    todo o ambiente de desenvolvimento (e inclusive uma ou outra coisa do ambiente de deploy).
  27. O commit Nosso de cada dia Não pode haver commit

    solto nas máquinas dos developers. Pode-se usar o Git Flow para garantir que commits nao quebrem builds importantes. Ler apresentação sobre Git Flow: http://bit.ly/1TZdXcW
  28. Master Todo commit na Produção Deve Atualizar Aqui, Git Flow

    torna-se a cereja do bolo. Ele segmenta o fluxo de commits e permite que sejam feitas liberações sem impactos de features inacabadas. Ler apresentação sobre Git Flow: http://bit.ly/1TZdXcW
  29. PaaS First! Code Deploy GitHub Zapier CloudWatch WordPress at GoDaddy

    MailTrack.io DripStat Librato Elastic Load Balancer StatusCake Slack Elastic Search Não se perde tempo entendendo as melhores práticas do MySQL, do ElasticSearch, MemCached, etc… Deixe que alguém faça isso por ti: Amazon Web Services, Google Cloud, RedShift, etc...
  30. CI first! Na núvem E assim, nunca mais perdeu-se tempo

    revisando o Heap do Jenkins, ou dos agentes distribuidos, etc...
  31. Esta é a combinação de ferramentas que usamos para monitorar

    todos os nossos serviços e servidores...
  32. Tercerize o aprendizado É importante fazer pesquisa e desenvolvimento naquilo

    que é crítico para a empresa. Porém, se alguém puder ensinar os caminhos das pedras melhor… A longo prazo, conforme o time vai amadurecendo é necessário incentivar Pesquisa e Desenvolvimento, diminuindo aos poucos a terceirização...