Mais conteúdo relacionado

Similar a Projetando aplicações para a nuvem(20)

Mais de Fabrício Lopes Sanchez(20)

Último(20)

Projetando aplicações para a nuvem

  1. Agenda
  2. Cloud computing Modelo distribuído de infraestrutura computacional que disponibiliza serviços de alto nível para hospedagem de aplicações, acessíveis através da internet.
  3. Alguns serviços nativamente distribuídos no Azure
  4. Alguns serviços nativamente distribuídos no Azure Service Fabric Linux Windows
  5. Alguns serviços nativamente distribuídos no Azure Azure Container Service
  6. Outros serviços distribuídos • Azure SQL Databases • Cosmos DB • Azure Service Bus • Azure Redis Cache • Azure Functions • Dentre tantos outros
  7. But… … se a nuvem é uma estrutura de recursos distribuídos, por que se insiste em levar aplicações que não funcionam de maneira distribuída pra lá?
  8. Um caso real 1 2 3 4 5 Alguns problemas
  9. Um possível refactoring no Azure
  10. Sobre distribuição de aplicações
  11. Aplicações distribuídas Uma aplicação distribuída é um software que é executado sobre diversos computadores ligados por uma rede. As partes desta aplicação interagem entre si através de algum padrão.
  12. Por que distribuir é importante? Escalabilidade e performance Aplicações não distribuídas somente podem ser escaladas de maneira ineficiente. Ou se faz “scale up” (aumenta o tamanho da VM), ou se faz ”scale out” de serviços que não necessariamente precisariam ser escalados. Aplicações distribuídas podem ser facilmente e eficientemente escaladas, entregando também, performance. Alta disponibilidade Ao se distribuir uma aplicação corretamente, a possibilidade de outage é reduzida em larga escala, uma vez que os serviços são todos replicados e escalados de maneira independente. Aplicações não distribuídas, em geral, possuem grandes taxas de outages. Economia Uma vez que os recursos são distribuídos de maneira descentalizada e portanto, mais focados nas regras de negócios específicas que eles precisa resolver, eles podes ser escalados de maneira eficiente e rodar em tiers mais baratos. Isso implicará, necessariamente, em economia. Crecimento controlado Arquiteturas distribuídas proporcionam um controle mais efetivo do crescimento da infraestrutura, já que é possível crescer partes individuais de acordo com a demanda.
  13. Aplicações existentes Novas aplicações
  14. Como distribuir uma aplicação existente?
  15. Aplicação projetada para ser distribuída (Arda) Dashboard web Power BI Others Permissions / Security Internet Kanban Intelligence Crowler ReportsAuthentication / Users
  16. Aplicação projetada para ser distribuída (Arda) Arda  Azure Active Directory  Azure App Services  Web App  API App  Azure SQL Database  Azure Redis Cache  Azure Storage (blob)  SendGrid (free tier)
  17. https://github.com/DXBrazil/Arda
  18. Nem tudo são flores… Muitos componentes Como é possível imaginar, distribuir aplicações significa necessariamente aumentar a quantidade de componentes do ambiente. E claro, componentes são sempre pontos de monitoramento e talvez, falha. Segurança Geralmente as partes de uma aplicação são estruturadas através de APIs. É preciso claro, possuir uma estratégia bem definida de segurança para proteger todos os aspectos da aplicação. Complexidade Com o aumento considerável de componentes na arquitetura, é claro que aumenta em igual proporção a complexidade do mesmo. Rede Ambientes distribuídos são amplamente dependentes da rede que os liga. Instabilidades na comunicação poderão comprometer a performance e funcionamento do ambiente. Latência na comunicação entre os serviços é outro aspecto relacionado às redes. Microserviços Microservices são estruturas natualmente distribuídas e naturalmente surgem como opção para novos projetos. Entretanto, é possível distribuir aplicações monolíticas com com serviços maiores.
  19. Serviços úteis na distribuição de apps no Azure
  20. Considerações escalabilidade no Azure
  21. Considerações sobre escalabilidade no Azure Functions Auto-gerenciado Web App Escala automática ou manual Escala por tier Escala por SKU (scale up) Escala por número de instâncias (scale out) Escala baseada em condições com definição de regras Application Gateway Manualmente escalável Escala por tier Escala por SKU Escala por número de instâncias (scale out) VM Scale Sets Escala automática ou manual Escala por tier Escala por SKU (scale up) Escala por número de instâncias (scale out) Escala por métricas de processamento/memória Service Bus Auto-gerenciado Storage Auto-gerenciado Redis Escala por tier
  22. Considerações sobre escalabilidade no Azure Containers De maneira geral, escala feita por algum orquestrador (Kubernetes, Swarm, etc) Processo de escala mais complexo Com Kubernetes é feito via Jobs -> Pods -> Containers Pode ser realizado sobre ACS ou máquinas virtuais convencionais Baseado em fila? Recursos do host? Recursos do container?
  23. https://github.com/DXBrazil/ContainerNanny
  24. Considerações sobre serverless
  25. Considerações sobre serverless Serverless traz a ideia de terceirização de processamento. A ideia é que seja possível terceirizar rotinas de uma aplicação para que elas sejam executadas apenas sob demanda, sem saber ”quem” executará as mesmas. Algumas vantagens são: - Redução de custos - Altamente escalável - Desacoplamento - DevOps simplificado - Segurança - Multi linguagens Uma ótima maneira de distribuir aplicações 
  26. Recomendações finais
  27. Recomendações finais Load balacing O monitoramento de probe é crítico para um bom comportamento Existem diferentes tipos de balanceanto de carga no Azure. Estude e escolha o melhor para seu cenário Sempre que possível, utilize Application Gateway para balancing Se a aplicação for stateful Existe a possibilidade de ser ajustada para ser stateless? Se não, atente para o uso correto de “stick sessions” (source IP ou cookies) Lembre que o uso de “stick sessions” impacta negativamente na performance do LB Opte, sempre que possível, por cache para persistir informações Localização dos recursos Opte, sempre que possível, por colocar recursos em uma mesma região Recomenda-se sempre ter um ambiente redundante com Traffic Manager na frente Recursos PaaS em uma mesma região, comunicam-se na rede local do DC. Baixíssima latência Máquinas Virtuais Procure utilizar sempre discos gerenciados Se utilizar storages convencionais, evite colocar múltiplas VMs no mesmo storage (IOPS) App Gateways gerenciam VMs em outras redes, entretanto, há perca de performance
  28. Para estudar…
  29. Links para estudo Azure Cloud Design Patterns https://docs.microsoft.com/en-us/azure/architecture/patterns/ Azure Architecture Center https://docs.microsoft.com/en-us/azure/architecture/ Technical Case Studies https://microsoft.github.io/techcasestudies/ Rock in Rio: https://microsoft.github.io/techcasestudies/devops/2017/05/23/rock-in-rio.html
  30. fabriciosanchez.com.br | @sanchezfabricio |