Skip to content

Latest commit

 

History

History
331 lines (258 loc) · 26.7 KB

09.Arquitetura de Software em Nuvem.md

File metadata and controls

331 lines (258 loc) · 26.7 KB

Arquitetura de Software em Nuvem Client-side

Aula 01 - Manoel Veras

Do DATACENTER para a Nuvem

O que é o Datacenter?

Um datacenter, em resumo, é um espaço dedicado ou um prédio que abriga os equipamentos de TI e servidores de uma organização. A empresa pode orientar seus recursos nesse datacenter para operar seus negócios ou ceder esses recursos para o público como um serviço (VERTIV).

Arquitetura Hyperscale:

  • Na computação, a hiperescala é a capacidade de uma arquitetura de escalar adequadamente à medida que o aumento da demanda é adicionado ao sistema.
  • Datacenters hyperscale são instalações gigantescas críticas para os negócios, projetadas para eficientemente dar suporte a aplicações robustas e escaláveis e são muitas vezes associados com empresas que produzem big data como a Google, Amazon, Facebook, IBM e Microsoft.
  • Os datacenters hyperscale são consideravelmente maiores do que datacenters empresariais e dadas as vantagens da economia de escala e da engenharia customizada, eles também os superam consideravelmente. De forma alguma uma definição oficial, um data center hyperscale deve exceder 5.000 servidores e 930 metros quadrados.
  • O que distingue ainda mais os datacenters hyperscale é o volume de serviços de dados, computação e armazenamento que eles processam. Em uma pesquisa, 93% das empresas hyperscale esperam ter conexões de rede de 40GigaBytes por segundo (Gbps) ou mais rápidas. Na mesma pesquisa, 51% dos participantes relatam que a largura de banda necessária para gerenciar vastos volumes de dados é um desafio cada vez maior.

Existem agora cerca de 600 DATACENTERS de hyperescale no mundo – o dobro do que havia cinco anos atrás, de acordo com a última contagem do Synergy Research Group. Alguns problemas logísticos causados ​​pela pandemia, 52 dessas instalações entraram em operação em 2020.

Mais da metade dos maiores DATACENTERS do mundo são operados por apenas três empresas, Amazon, Microsoft e Google. Amazon e Google responderam por metade das novas instalações de hyperescale lançadas no ano passado.

Essas empresas não constroem todos os seus DATACENTERS por conta própria. A maioria usa uma combinação de suas próprias instalações e instalações alugadas de fornecedores especializados. Algumas empresas como a Oracle, dependem principalmente de espaço alugado. A Synergy estima que cerca de 70% de todos os DATACENTERS hyperescale estão em instalações alugadas.

Sines 4.0

O que é a computação em nuvem?

É a entrega sob demanda de poder computacional, armazenamento de dados, aplicativos e outros recursos de TI por uma plataforma de serviços na nuvem usando a internet com o modelo de definição de preço pay as you go (Amazon AWS).

Vantagens da computação em nuvem:

  • Trocar despesas de capital por despesas variáveis.
  • Economia de escala.
  • Parar de especular sobre a capacidade.
  • Aumento da velocidade e agilidade.
  • Chega de gastar dinheiro para executar e operar datacenters.
  • Torna-se global em minutos.

De que arquitetura estamos falando?

  • Arquitetura do Negócio;
  • Arquitetura de Sistemas, Arquitetura de Software • Arquitetura de Dados;
  • Arquitetura Tecnológica;
    • Arquitetura de Nuvem;
    • Arquitetura do DATACENTER.

Conceito de Arquitetura de Software:

  • A arquitetura de software de um sistema consiste na definição dos componentes de software, suas propriedades externas, e seus relacionamentos com outros softwares. O termo também se refere à documentação da arquitetura de software do sistema. A documentação da arquitetura do software facilita: a comunicação entre os stakeholders, registra as decisões iniciais acerca do projeto de alto-nível, e permite o reúso do projeto dos componentes e padrões entre projetos.
  • O projeto de arquitetura está preocupado com a compreensão de como um sistema deve ser organizado e com a estrutura geral desse sistema. No modelo do processo de desenvolvimento de software, o projeto de arquitetura é o primeiro estágio no processo de projeto de software. É o elo crítico entre o projeto e a engenharia de requisitos, pois identifica os principais componentes estruturais de um sistema e os relacionamentos entre eles. O resultado do processo de projeto de arquitetura é um modelo de arquitetura que descreve como o sistema está organizado em um conjunto de componentes de comunicação.

Quem define a Arquitetura do Software?

  • A definição de uma arquitetura é o resultado de um conjunto de decisões técnicas e de negócio.
    • O arquiteto precisa saber lidar com várias influências:
      • Stakeholders;
      • Developing Organization;
      • Technical Environment;
      • Achitect's Experience.

Por que a arquitetura do software é importante?

  • Facilita a comunicação com os Stakeholders: descreve de forma relativamente simples algo complexo e que serve como um elemento para entendimento mútuo, negociação, criação de consenso e comunicação;
  • Permite antecipar decisões: manifesta decisões antecipadas sobre algo que será modelado. Isto permite antecipar problemas, definir atributos de qualidade, gerenciar mudanças, estimar custos, etc;
  • Múltipla visão de algo: Permite visualizar a estrutura de uma empresa ou sistema diante de vários pontos de vista.

O que é Arquitetura de Nuvem?

  • “Cloud computing architecture refers to the components and subcomponents required for cloud computing”. (Wikipedia)
  • “Cloud Computing Architecture of a cloud solution is the structure of the system, which comprise on-premise and cloud resources, services, middleware, and software components, geo-location, the externally visible properties of those, and the relationships between them”. (SIEMENS)
  • “Cloud computing architecture is a high-level conceptual model that is an effective tool for discussing the requirements, structures, and operations of cloud computing”. (NIST)

Arquitetura de Nuvem Multitenancy (Multi-Inquilino)

O modelo de Software como Serviço (SaaS) demanda tecnologias e arquiteturas que sejam especialmente desenhadas para operar em nuvem. O fato é que muitos softwares existentes atualmente foram desenhados para operar nos data centers das empresas (on premises) e em sua maioria operam numa arquitetura Single Server (único servidor), além de estarem sujeitos a contratos específicos de licença de uso.

No modelo SaaS as aplicações oferecidas pelos provedores de nuvem deverão ser amplamente compartilhadas para seus clientes (tenants ou inquilinos), porém, deverão fundamentalmente garantir que falhas de um software de um cliente não afete o outro, além de necessariamente possibilitar um nível de customização de forma a atender as necessidades específicas de cada cliente (tenant).

A arquitetura multitenancy força com que as aplicações tenham um nível de isolamento, segmentação, políticas e níveis de serviço diferentes por perfil de usuários. Esta arquitetura pressupõe uma abordagem de design que permita a economia em escala, disponibilidade, segurança, isolamento e eficiência operacional através do compartilhamento da infraestrutura, dos dados e serviços através de diferentes clientes.

Inquilino isolado:

Neste modelo, cada inquilino tem seu próprio stack de tecnologia, não havendo compartilhamento de recursos. Na prática, embora o usuário sinta a experiência de multi-inquilino, pois a aplicação é oferecida a múltiplos clientes a partir do mesmo data center, este modelo não é multi-inquilino. É similar ao modelo tradicional de hosting (hospedagem), no qual cada usuário tem seu próprio conjunto de recursos computacionais e sua própria instância da aplicação.

Para uma oferta SaaS, este modelo carece de agilidade e de elasticidade, porque adicionar um novo inquilino requer o provisionamento de sua própria instância de hardware e de software. Também não permite economia de escala. Os provedores que comercializam softwares no modelo tradicional podem oferecer esta opção, sem alterar sua aplicação. Embora não seja verdadeiramente Computação em Nuvem, é um passo nessa direção, oferecendo como atrativo a facilidade de uma rápida oferta para SaaS.

Multi-inquilino via hardware compartilhado (virtualização):

  • Neste modelo, cada inquilino tem seu próprio stack de tecnologia, mas o hardware é alocado dinamicamente a partir de um pool de recursos, via mecanismos de virtualização. Bastante similar ao modelo anterior, mas permitindo elasticidade na camada do hardware. Elasticidade é fundamental no modelo de Computação em Nuvem, que demanda mecanismos de alocação e liberação de recursos de forma dinâmica.
  • Este modelo permite uma entrada rápida na computação em nuvem, principalmente por provedores de aplicações e de infraestrutura, porque não demanda redesenho da aplicação. Entretanto, apresenta limitações, pois a unidade de alocação e liberação de recursos é a maquina virtual onde aplicação vai operar.

Multi-inquilino via Container:

  • Neste modelo, vários inquilinos são executados na mesma instância de um container de aplicação (um servidor de aplicações), mas cada inquilino está associado a uma instância separada do software de banco de dados. O ambiente de execução é compartilhado entre vários inquilinos, mas a plataforma de dados é a mesma. A premissa do modelo é que o isolamento do banco de dados garante integridade dos dados dos inquilinos, ao mesmo tempo em que o container de execução, oferece as vantagens de elasticidade e de customização. Para garantir o isolamento dos inquilinos dentro de uma única instância do container ou servidor de aplicações, este deve ser desenhado com funcionalidade para gerenciar a alocação de recursos aos seus inquilinos.

O que são Containers?

  • O container é um modelo de virtualização, na nuvem, em nível de sistema operacional, com o objetivo de implantar e executar aplicativos distribuídos. Nesse modelo, são acionados vários sistemas isolados (contêineres) em um único host, acessando um único kernel.
  • O container contêm tudo que é necessário para a execução da aplicação, com arquivos, variáveis de ambiente e bibliotecas próprias. Permitem, assim, a criação de soluções escaláveis, com os benefícios da computação em nuvem.
  • O uso de container não pode ser confundido com a virtualização em si. Isso porque, nessa última, o servidor é configurado para atuar como se fosse uma máquina física, com sistema operacional próprio, garantindo um ambiente funcional. Essencialmente, um conjunto de SO são instalados em um único equipamento físico. Já no caso do container, não há uso de sistemas operacionais. Os blocos independentes realizam a execução da aplicação, sendo só ela a instalada, facilitando o processo.

Definições — VMs e Containers:

  • As máquinas virtuais emulam sistemas de computador totalmente separados com seus próprios sistemas operacionais (SO) completos. Para gerenciar e fornecer serviço de VM aos usuários finais, os hipervisores são necessários para executar várias VMs em uma infraestrutura compartilhada. As VMs são uma oferta padrão do Azure, GCP e AWS.
  • Os contêineres exigem apenas os componentes do sistema operacional necessários para executar o aplicativo. Normalmente, Linux e Windows são usados ​​como sistemas operacionais que se comunicam diretamente com o Container Engine. Cada contêiner compartilha o kernel do sistema operacional host e, geralmente, os binários e as bibliotecas também. Para o uso eficiente dos recursos, os componentes compartilhados são somente leitura, o que reduz o tamanho do contêiner e aumenta o tempo de inicialização. Com o lançamento do Docker em 2013, os contêineres ganharam popularidade rapidamente.
  • A maior e mais clara diferença entre VMs e containers é a não necessidade de ter um sistema operacional virtualizado para suportar as aplicações no caso dos containers.

Docker e Kubernetes:

  • Contêiner é o encapsulamento do código e de todas as dependências, libraries, bins e files que ele precisa para rodar. Com isso, ele é isolado do seu ambiente de origem, garantindo sua portabilidade para qualquer outro ambiente. Em bom português, basta codificar uma vez, que você executa em todo lugar, do Linux para o Windows, on- premise ou em nuvem.
  • Docker é uma plataforma open source para construir, armazenar, distribuir e rodar contêineres.
  • Kubernetes é uma plataforma open source de implantação, dimensionamento e gerenciamento dos contêineres de uma aplicação - em ambientes privados, públicos ou híbridos - por meio do agrupamento de unidades lógicas (pods). Colocado de outro modo, seria o próximo passo para quem já está usando contêineres Docker ou outro.

Containers vs VM's - Quando e onde devo usar? (Caio Delgado)

Multi-inquilino via stack de software compartilhado:

É uma evolução do modelo anterior, agora com todo o stack de software sendo compartilhado. Neste modelo, além do container da aplicação, também uma única instância do banco de dados é compartilhada por todos os inquilinos.

Como se define uma arquitetura de nuvem?

  • Requisitos de Negócio

    • Frameworks:

      • Tem como objetivo identificar e relatar diferentes pontos de vista sobre o negócio. Também fornecem estrutura que permite realizar a descrição arquitetural através de técnicas de modelagem.
      • Várias opções de framework disponível:
        • Zachman Framework;
        • The Open Group Architecture Framework (TOGAF);
          • Possui o Architecture Development Method (ADM) que é um passo-a-passo de como se modelar e implementar uma arquitetura empresarial;
          • Possui uma linguagem de modelagem – ArchiMate;
          • Usado como framework base de várias soluções proprietárias, como Oracle Enterprise Architecture Framework, SAP Enterprise Architecture Framework;
          • Solução amplamente adotada por ser aberta, genérica e definida pelo Open Group;
          • Open Group é um consórcio global formado por 400 organizações que busca atingir objetivos de negócio por meio de padrões de TI.
        • Federal Enterprise Architecture Framework (FEAF);
        • Gartner
    • Visão Arquitetural:

      • Nesta etapa, os princípios definidos na fase anterior (preliminar) devem ser incorporados na arquitetura; • A incorporação pode ser feita por meio de restrições que descrevem o que deve ter ou não na arquitetura; • Na sequencia os princípios são decompostos em requisitos.
    • Defina valores para avaliar a nova arquitetura:

      • Este passo estabelece valores para avaliar se a nova arquitetura atende aos requisitos levantados;
      • Exemplos:
        • A fidelização de clientes deve ser pelo menos 30% maior na nova arquitetura;
        • O sistema deve responder em no máximo 1 segundo;
        • A compra de serviços de nuvem deve ser pelo menos 40% menor que o seu desenvolvimento;
        • O custo de operação deve ser pelo menos 35% menor que o custo atual.
    • Arquitetura de Negócio:

      • A arquitetura de negócio descreve a estratégia de produto/serviço, a organização, processos, informações e aspectos do ambiente de negócio.
    • Arquitetura de Sistema de Informação:

      • O objetivo desta fase é definir a Arquitetura de Aplicação e a Arquitetura de Dados;
      • Tais arquiteturas são responsáveis por descrever a estruturação da aplicação e o fluxo de dados, respectivamente.
    • Arquitetura de Tecnologia (Nuvem):

      • Responsável por descrever como os elementos descritos nas arquiteturas anteriores serão concretizados;
      • Define o conjunto de tecnologias que serão utilizadas e serve para identificar quais os recursos específicos da nuvem serão necessários;
      • Deve-se considerar todos os aspectos de computação em nuvem que sua arquitetura deve atender;
      • Requisitos não funcionais devem ser observados, como segurança, interoperabilidade e portabilidade.
  • Arquitetura de Referência

    • Arquitetura de Referência (AR) de Nuvem:

      • AR é um documento que contêm um conjunto de boas práticas que deve ser utilizado por todos os membros de uma organização;
      • AR é uma ferramenta que permite descrever, comparar, discutir e desenvolver uma arquitetura especifica de nuvem usando um arcabouço de referencia;
      • AR tem como objetivo facilitar o entendimento dos detalhes operacionais da computação em nuvem;
      • AR não representa a arquitetura da nuvem.
    • Arquitetura de Referência de Nuvem - NIST:

      • Foca em responder "o que é ?" e não "como fazer ?";
      • Tem os seguintes objetivos:
        • Ilustrar e entender os vários serviços de nuvem dentro de um contexto do modelo conceitual da computação em nuvem;
      • Fornecer referencia técnica para os interessados (agencias governamentais, empresas, etc) no sentido de permitir o entendimento, discussão, categorização e comparação de serviços de nuvem;
      • Facilitar a analise de padrões candidatos para as área de segurança, interoperabilidade, portabilidade e implementações de referencia.
  • Requisitos Técnicos

    • Busca de Padrões:

      • "Cada padrão descreve um problema que ocorre repetidas vezes em nosso ambiente, e então descreve o núcleo da sua solução para aquele problema, de tal maneira que seja possível usar essa solução milhões de vezes sem nunca fazê-la da mesma forma duas vezes." Christopher Alexander - sobre padrões em arquitetura de construções
    • Padrão de Arquitetura de Nuvem:

      • Inspirados em "A Pattern Language" de Christopher Alexander • Padrões de arquitetura de cidades, casas e prédios;
      • Cloud Computing: Concepts, Technology & Architecture by Thomas Erl, Zaigham Mahmood, Ricardo Puttini • (ISBN: 9780133387520, Hardcover, 260+ Illustrations, 528 pages)
    • Benefícios do uso de Padrões:

      • Aprendizagem com a experiência dos outros
        • Identificação de problemas comuns em arquiteturas de nuvem;
        • Utilização de soluções testadas e bem documentadas;
        • Ajuda um novato a agir mais como um experiente.
      • Produção de bons projetos arquiteturais
        • Normalmente utilizam boas práticas.
      • Vocabulário comum
        • Uso de soluções que têm nome facilita comunicação;
        • Nível mais alto de abstração.
      • Ajuda na documentação
        • Uso de soluções que têm um nome facilita a documentação
        • Conhecimento de padrões de projeto torna mais fácil a compreensão de sistemas existentes.
      • Aumento da produtividade
    • Elementos Essenciais

      • Nome
        • Procura descrever o problema, a solução e as consequências em uma ou duas palavras.
      • Requisitos
        • Geralmente uma frase que apresenta o requisito fundamental resolvido pelo padrão
      • Problema
        • Descreve o problema e seus efeitos
      • Solução
        • Como usar os elementos disponíveis para solucioná-lo
      • Aplicação
        • Descreve como o padrão será aplicado
      • Mecanismos
        • Apresenta mecanismos que foram utilizados na definição do padrão
      • Arquitetura de Referencia NIST
        • Mostra quais elementos da arquitetura NIST foram afetados pelo uso do padrão.

Aula 02 - Manoel Veras

Aspectos essenciais da Arquitetura de Nuvem (Princípios)

  • Otimização de Custos; (Deve ser pensando logo no início)
  • Excelência Operacional;
  • Eficiência de Performance;
  • Confiabilidade;
  • Segurança.

Otimização de Custos:

  • Uma carga de trabalho com custo otimizado utiliza integralmente todos os recursos, alcança um resultado ao menor ponto de preço possível e atende a seus requisitos funcionais.
  • A otimização de custos e o gerenciamento financeiro na nuvem são um esforço contínuo. Você deve trabalhar regularmente com suas equipes de finanças e tecnologia, analisar sua abordagem arquitetônica e atualizar sua seleção de componentes

Princípios

  • Implementar o gerenciamento financeiro;
  • Adotar um modelo de consumo;
  • Medir a eficiência geral;
  • Parar de gastar dinheiro com tarefas pesadas genéricas;
  • Analisar e atribuir gastos.

Excelência Operacional:

  • O pilar de excelência operacional inclui como sua organização apoia seus objetivos empresariais e sua capacidade de executar cargas de trabalho com eficácia, de obter insights sobre operações e de aprimorar continuamente processos e procedimentos de apoio para oferecer valor empresarial.
  • Todo evento e toda falha operacional devem ser tratados como uma oportunidade para melhorar as operações de sua arquitetura. Ao compreender as necessidades de suas cargas de trabalho, predefinir runbooks para atividades rotineiras e manuais para orientar a resolução de problemas, usar as operações como recursos de código na nuvem e manter a consciência da situação, suas operações estarão prontas e capazes de responder com mais eficiência quando ocorrerem incidentes.

Princípios

  • Executar operações como código;
  • Fazer alterações frequentes, pequenas e reversíveis;
  • Refinar procedimentos de operações com frequência;
  • Antecipar falhas;
  • Aprender com todas as falhas operacionais.

Eficiência de Performance:

  • O pilar de eficiência de performance tem como foco o uso eficiente de recursos de computação para atender a requisitos e manter a eficiência conforme as demandas mudam e as tecnologias evoluem.
  • Atingir e manter a eficiência de performance requer uma abordagem conduzida por dados. Você deve avaliar ativamente os padrões de acesso e as concessões que viabilizarão a otimização para uma maior performance. O uso de um processo de análise baseado em benchmarks e testes de carga permite que você selecione os tipos de recursos e as configurações adequados. Tratar sua infraestrutura como código permite que você promova avanços em sua arquitetura de modo rápido e seguro, enquanto usa dados para tomar decisões baseadas em fatos sobre sua arquitetura. O estabelecimento de uma combinação de monitoramentos ativo e passivo garante que a performance de sua arquitetura não apresente degradação ao longo do tempo.

Princípios

  • Democratize tecnologias avançadas;
  • Tenha alcance global em poucos minutos;
  • Use arquiteturas sem servidor;
  • Experimente com mais frequência;
  • Leve as particularidades em consideração.

Confiabilidade:

  • O pilar Confiabilidade abrange a capacidade de uma carga de trabalho de executar a função pretendida correta e consistentemente quando esperado. Isso inclui a capacidade de operar e testar a carga de trabalho durante o ciclo de vida total dela.
  • A confiabilidade de uma carga de trabalho na nuvem depende de vários fatores, o principal dos quais é a Resiliência: Resiliência é a capacidade de uma carga de trabalho se recuperar de interrupções de infraestrutura ou serviço, adquirir dinamicamente recursos de computação para atender à demanda e mitigar interrupções, como configurações incorretas ou problemas transitórios de rede.

Princípios

  • Recuperar de falhas automaticamente;
  • Testar os procedimentos de recuperação;
  • Escalar horizontalmente para aumentar a disponibilidade agregada da carga de trabalho;
  • Parar de adivinhar a capacidade;
  • Gerenciar alterações na automação.

Segurança:

  • O pilar Segurança descreve como aproveitar as tecnologias de nuvem para proteger dados, sistemas e ativos de uma maneira que possa melhorar sua condição de segurança.
  • A segurança é um esforço contínuo. Quando ocorrem incidentes, eles devem ser tratados como oportunidades de melhorar a segurança da arquitetura. Ter controles fortes de identidade, automatizar respostas a eventos de segurança, proteger a infraestrutura em vários níveis e usar criptografia para gerenciar dados bem classificados proporcionam a defesa profunda que todas as empresas devem implementar.

Princípios

  • Implementar uma base sólida de identidade;
  • Habilitar a capacidade de monitoramento;
  • Aplicar segurança em todas as camadas;
  • Automatizar as melhores práticas de segurança;
  • Proteger dados em trânsito e em repouso;
  • Manter as pessoas afastadas dos dados;
  • Preparar para eventos de segurança.

Aula 03 - Tiago Coelho Ferreto

Histórico

Principais motivadores para Computação em Nuvem:

  • Reduzir os investimentos com infraestrutura

    • Custo inicial fixo e alto;
    • Necessidade de investimentos contínuos;
    • Prejudicam o foco no core business.
  • Evitar a subutilização de recursos

    • Data centers com aproximadamente 20% de utilização.
  • Necessidade de uma plataforma única

    • Garantias de fácil acesso, alta disponibilidade, escalabilidade, segurança.

Conceitos e características

O que é Computação em Nuvem?

“é um modelo pay-per-use para permitir o acesso pela rede sob demanda, com disponibilidade e conveniência a um conjunto compartilhado de recursos computacionais configuráveis (e.g., redes, servidores, armazenamento, aplicações, serviços) que podem ser rapidamente provisionados e liberados com custo de gerência e interação mínimos com o provedor de serviços. (NIST 2009)

  • Pay-per-use
  • Self-service
  • Multitenant
  • Elasticidade

Modelos de serviço:

Consume - SaaS – Software como Serviço

  • Aplicações e serviços disponibilizados aos usuários pela Internet usando uma infraestrutura escalável.

Develop - PaaS – Plataforma como Serviço

  • Ambiente com suporte para desenvolvimento de aplicações na nuvem;
  • Gerência baseada nas aplicações e não nos recursos computacionais.

Build - IaaS – Infraestrutura como Serviço

  • Provisionamento de recursos computacionais básicos;
  • Usuário é responsável por instalar e gerenciar seus sistemas nos recursos alocados.

Modelos de implantação:

  • Nuvem pública;
  • Nuvem híbrida;
  • Nuvem privada.

Serviços de nuvem

Principais serviços de computação em nuvem:

  • Computação:

    • Máquina virtual;
    • Container;
    • Função como serviço.
  • Armazenamento:

    • Baseado em objetos;
    • Baseado em blocos;
    • Sistema de arquivos distribuído;
    • Banco de dados.
  • Comunicação:

    • Rede virtual privada;
    • Load Balancer;
    • CDN - Content Delivery Network.

Resultado da prova

Em 22/08/2023 - Nota 7 - 1º