Considerações de design de aplicativo híbrido

O Microsoft Azure é a única nuvem híbrida consistente. Ele permite que você reutilize seus investimentos em desenvolvimento e habilita aplicativos que podem abranger o Azure global, as nuvens soberanas do Azure e o Azure Stack, que é uma extensão do Azure em seu datacenter. Os aplicativos que abrangem nuvens também são chamados de aplicativos híbridos .

O Guia de Arquitetura de Aplicativo do Azure descreve uma abordagem estruturada para projetar aplicativos que são escaláveis, resilientes e altamente disponíveis. As considerações descritas no Guia de Arquitetura de Aplicativo do Azure se aplicam igualmente a aplicativos projetados para uma única nuvem e a aplicativos que abrangem nuvens.

Este artigo aumenta os Pilares da qualidade de software discutidos no Guia de Arquitetura dede Aplicativo do Azure se concentrando especificamente na criação de aplicativos híbridos. Além disso, adicionamos um pilar de de posicionamento, já que os aplicativos híbridos não são exclusivos de uma nuvem ou de um datacenter local.

Os cenários híbridos variam muito de acordo com os recursos disponíveis para desenvolvimento e abrangem considerações como geografia, segurança, acesso à Internet e outras considerações. Embora este guia não possa enumerar suas considerações específicas, ele pode fornecer algumas diretrizes e práticas recomendadas importantes para você seguir. Projetar, configurar, implantar e manter com êxito uma arquitetura de aplicativo híbrida envolve muitas considerações de design que podem não ser inerentemente conhecidas por você.

Este documento tem como objetivo agregar as possíveis questões que podem surgir ao implementar aplicativos híbridos e fornece considerações (esses pilares) e melhores práticas para trabalhar com eles. Ao abordar essas perguntas durante a fase de design, você evitará os problemas que elas poderiam causar na produção.

Essencialmente, essas são perguntas sobre as quais você precisa pensar antes de criar um aplicativo híbrido. Para começar, você precisa fazer o seguinte:

  • Identifique e avalie os componentes do aplicativo.
  • Avalie os componentes do aplicativo em relação aos pilares.

Avaliar os componentes do aplicativo

Cada componente de um aplicativo tem sua própria função específica dentro do aplicativo maior e deve ser revisado com todas as considerações de design. Os requisitos e recursos de cada componente devem ser mapeados para essas considerações para ajudar a determinar a arquitetura do aplicativo.

Decomponha seu aplicativo em seus componentes estudando a arquitetura do aplicativo e determinando em que ele consiste. Os componentes também podem incluir outros aplicativos com os quais seu aplicativo interage. Ao identificar os componentes, avalie as operações híbridas pretendidas de acordo com suas características, fazendo estas perguntas:

  • Qual é a finalidade do componente?
  • Quais são as interdependências entre os componentes?

Por exemplo, um aplicativo pode ter um front-end e um back-end definidos como dois componentes. Em um cenário híbrido, o front-end está em uma nuvem e o back-end está na outra. O aplicativo fornece canais de comunicação entre o front-end e o usuário, e também entre o front-end e o back-end.

Um componente de aplicativo é definido por muitos formulários e cenários. A tarefa mais importante é identificá-los e sua localização na nuvem ou no local.

Os componentes comuns do aplicativo a serem incluídos no seu inventário estão listados na Tabela 1.

Tabela 1. Componentes comuns do aplicativo

de componentes Diretrizes de aplicativos híbridos
Conexões de cliente Seu aplicativo (em qualquer dispositivo) pode acessar os usuários de várias maneiras, a partir de um ponto de entrada único, incluindo as seguintes maneiras:
- Um modelo cliente-servidor que requer que o usuário tenha um cliente instalado para trabalhar com o aplicativo. Um aplicativo baseado em servidor que é acessado a partir de um navegador.
- As ligações de cliente podem incluir notificações quando a ligação é interrompida ou alertas quando podem ser aplicadas tarifas de roaming.
Autenticação A autenticação pode ser necessária para um usuário que se conecta ao aplicativo ou de um componente que se conecta a outro.
APIs Você pode fornecer aos desenvolvedores acesso programático ao seu aplicativo com conjuntos de API e bibliotecas de classes e fornecer uma interface de conexão baseada em padrões da Internet. Você também pode usar APIs para decompor um aplicativo em unidades lógicas operacionais independentes.
Serviços Você pode empregar serviços sucintos para fornecer os recursos de um aplicativo. Um serviço pode ser o mecanismo no qual o aplicativo é executado.
Filas Você pode usar filas para organizar o status dos ciclos de vida e estados dos componentes do seu aplicativo. Essas filas podem fornecer mensagens, notificações e recursos de buffer para as partes assinantes.
Armazenamento de dados Um aplicativo pode ser stateless ou stateful. Os aplicativos com monitoração de estado precisam de armazenamento de dados que possa ser atendido por vários formatos e volumes.
Armazenamento em cache de dados Um componente de cache de dados em seu design pode abordar estrategicamente problemas de latência e desempenhar um papel no acionamento do bursting de nuvem.
Ingestão de dados Os dados podem ser enviados para um aplicativo de várias maneiras, desde valores enviados pelo usuário em um formulário da Web até um fluxo de dados de alto volume contínuo.
Tratamento de dados Suas tarefas de processamento de dados (como relatórios, análises, exportações em lote e transformação de dados) podem ser processadas na origem ou descarregadas em um componente separado usando uma cópia dos dados.

Avalie os componentes do aplicativo para pilares

Para cada componente, avalie suas características para cada pilar. À medida que você avalia cada componente com todos os pilares, perguntas que você pode não ter considerado podem se tornar conhecidas para você que afetam o design do aplicativo híbrido. Agir com base nessas considerações pode agregar valor na otimização do seu aplicativo. A Tabela 2 fornece uma descrição de cada pilar no que diz respeito aos aplicativos híbridos.

Tabela 2. Pilares

Pilar Descrição
Colocação O posicionamento estratégico de componentes em aplicações híbridas.
Escalabilidade A capacidade de um sistema para lidar com o aumento da carga.
Disponibilidade A proporção de tempo que um aplicativo híbrido está funcional e funcionando.
Resiliência A capacidade de recuperação de um aplicativo híbrido.
Capacidade de gestão Processos operacionais que mantêm um sistema em funcionamento em produção.
Segurança Proteger aplicações e dados híbridos contra ameaças.

Colocação

Um aplicativo híbrido inerentemente tem uma consideração de posicionamento, como para o datacenter.

O posicionamento é a importante tarefa de posicionar os componentes para que eles possam atender melhor um aplicativo híbrido. Por definição, os aplicativos híbridos abrangem locais, como do local para a nuvem e entre diferentes nuvens. Você pode colocar componentes do aplicativo em nuvens de duas maneiras:

  • Aplicativos híbridos verticais
    Os componentes do aplicativo são distribuídos entre locais. Cada componente individual pode ter várias instâncias localizadas apenas em um único local.

  • Aplicativos híbridos horizontais
    Os componentes do aplicativo são distribuídos entre locais. Cada componente individual pode ter várias instâncias abrangendo vários locais.

    Alguns componentes podem estar cientes de sua localização, enquanto outros não têm nenhum conhecimento de sua localização e posicionamento. Esta virtuosidade pode ser alcançada com uma camada de abstração. Essa camada, com uma estrutura de aplicativo moderna como microsserviços, pode definir como o aplicativo é atendido pelo posicionamento de componentes de aplicativo que operam em nós em nuvens.

Lista de verificação de colocação

Verifique os locais necessários. Certifique-se de que o aplicativo ou qualquer um de seus componentes são necessários para operar em, ou exigir certificação para, uma nuvem específica. Isso pode incluir requisitos de soberania da sua empresa ou ditados por lei. Além disso, determine se alguma operação local é necessária para um determinado local ou localidade.

Verifique as dependências de conectividade. Os locais necessários e outros fatores podem ditar as dependências de conectividade entre seus componentes. Ao colocar os componentes, determine a conectividade e a segurança ideais para a comunicação entre eles. As opções incluem VPN,ExpressRoute, e Hybrid Connections.

Avalie os recursos da plataforma. Para cada componente de aplicativo, veja se o provedor de recursos necessário para o componente de aplicativo está disponível na nuvem e se a largura de banda pode acomodar os requisitos de taxa de transferência e latência esperados.

Planeje a portabilidade. Use estruturas de aplicativos modernas, como contêineres ou microsserviços, para planejar operações em movimento e evitar dependências de serviço.

Determinar os requisitos de soberania de dados. Os aplicativos híbridos são voltados para acomodar o isolamento de dados, como em um datacenter local. Revise o posicionamento de seus recursos para otimizar o sucesso para acomodar esse requisito.

Planeje a latência. As operações entre nuvens podem introduzir a distância física entre os componentes do aplicativo. Verifique os requisitos para acomodar qualquer latência.

Controle os fluxos de tráfego. Lide com picos de uso e as comunicações apropriadas e seguras para dados pessoais identificáveis quando acessados pelo front-end em uma nuvem pública.

Escalabilidade

Escalabilidade é a capacidade de um sistema de lidar com o aumento da carga em um aplicativo, que pode variar ao longo do tempo, pois outros fatores e forças afetam o tamanho do público, além do tamanho e do escopo do aplicativo.

Para a discussão central desse pilar, consulte de escalabilidade nos cinco pilares da excelência em arquitetura.

Uma abordagem de dimensionamento horizontal para aplicativos híbridos permite adicionar mais instâncias para atender à demanda e, em seguida, desativá-las durante períodos mais silenciosos.

Em cenários híbridos, a expansão de componentes individuais requer consideração adicional quando os componentes estão espalhados entre nuvens. O dimensionamento de uma parte do aplicativo pode exigir o dimensionamento de outra. Por exemplo, se o número de conexões de cliente aumentar, mas os serviços Web do aplicativo não forem dimensionados adequadamente, a carga no banco de dados poderá saturar o aplicativo.

Alguns componentes do aplicativo podem ser dimensionados linearmente, enquanto outros têm dependências de dimensionamento e podem ser limitados até que ponto eles são capazes de escalar. Por exemplo, um túnel VPN que fornece conectividade híbrida para os locais dos componentes do aplicativo tem um limite para a largura de banda e latência para a qual pode ser dimensionado. Como os componentes do aplicativo são dimensionados para garantir que esses requisitos sejam atendidos?

Lista de verificação de escalabilidade

Determinar limiares de escala. Para lidar com as várias dependências em seu aplicativo, determine até que ponto os componentes do aplicativo em nuvens diferentes podem ser dimensionados independentemente uns dos outros, enquanto ainda atendem aos requisitos para executar o aplicativo. Os aplicativos híbridos geralmente precisam dimensionar áreas específicas no aplicativo para lidar com um recurso à medida que ele interage e afeta o resto do aplicativo. Por exemplo, exceder um número de instâncias de front-end pode exigir o dimensionamento do back-end.

Definir cronogramas de escala. A maioria dos aplicativos tem períodos ocupados, então você precisa agregar seus horários de pico em horários para coordenar o dimensionamento ideal.

Use um sistema de monitoramento centralizado. Os recursos de monitoramento de plataforma podem fornecer dimensionamento automático, mas os aplicativos híbridos precisam de um sistema de monitoramento centralizado que agregue a integridade e a carga do sistema. Um sistema de monitoramento centralizado pode iniciar o dimensionamento de um recurso em um local e o dimensionamento dependendo do recurso em outro local. Além disso, um sistema de monitoramento central pode rastrear quais nuvens dimensionam recursos automaticamente e quais nuvens não.

Aproveite os recursos de dimensionamento automático (conforme disponível). Se os recursos de dimensionamento automático fizerem parte da sua arquitetura, você implementará o dimensionamento automático definindo limites que definem quando um componente do aplicativo precisa ser dimensionado para cima, para fora, para baixo ou para dentro. Um exemplo de dimensionamento automático é uma conexão de cliente que é dimensionada automaticamente em uma nuvem para lidar com o aumento da capacidade, mas faz com que outras dependências do aplicativo, espalhadas por nuvens diferentes, também sejam dimensionadas. As capacidades de dimensionamento automático desses componentes dependentes devem ser verificadas.

Se o dimensionamento automático não estiver disponível, considere a implementação de scripts e outros recursos para acomodar o dimensionamento manual, acionado por limites no sistema de monitoramento centralizado.

Determine a carga esperada por local. Os aplicativos híbridos que lidam com solicitações de clientes podem depender principalmente de um único local. Quando a carga de solicitações do cliente excede um limite, recursos adicionais podem ser adicionados em um local diferente para distribuir a carga de solicitações de entrada. Certifique-se de que as conexões de cliente podem lidar com o aumento de cargas e também determinar quaisquer procedimentos automatizados para as conexões de cliente para lidar com a carga.

Disponibilidade

Disponibilidade é o tempo que um sistema está funcional e funcionando. A disponibilidade é medida como uma percentagem do tempo de atividade. Erros de aplicativos, problemas de infraestrutura e carga do sistema podem reduzir a disponibilidade.

Para a discussão central deste pilar, consulte Disponibilidade nos cinco pilares da excelência em arquitetura.

Lista de verificação de disponibilidade

Fornecer redundância para conectividade. Os aplicativos híbridos exigem conectividade entre as nuvens pelas quais o aplicativo está espalhado. Você tem uma escolha de tecnologias para conectividade híbrida, portanto, além da sua escolha de tecnologia principal, use outra tecnologia para fornecer redundância com recursos de failover automatizados caso a tecnologia principal falhe.

Classifique domínios de falha. As aplicações tolerantes a falhas requerem vários domínios de falha. Os domínios de falha ajudam a isolar o ponto de falha, como se um único disco rígido falhar localmente, se um switch de topo de rack cair ou se o datacenter completo não estiver disponível. Em um aplicativo híbrido, um local pode ser classificado como um domínio de falha. Com mais requisitos de disponibilidade, mais você precisa avaliar como um único domínio de falha deve ser classificado.

Classifique domínios de atualização. Os domínios de atualização são usados para garantir que instâncias de componentes do aplicativo estejam disponíveis, enquanto outras instâncias do mesmo componente estão sendo atendidas com atualizações ou atualizações de recursos. Tal como acontece com os domínios de falha, os domínios de atualização podem ser classificados pela sua colocação em todas as localizações. Você deve determinar se um componente de aplicativo pode acomodar a atualização em um local antes de ser atualizado em outro local ou se outras configurações de domínio são necessárias. Um único local em si pode ter vários domínios de atualização.

Rastreie instâncias e disponibilidade. Componentes de aplicativo altamente disponíveis podem estar disponíveis por meio de balanceamento de carga e replicação de dados síncrona. Você deve determinar quantas instâncias podem ficar offline antes que o serviço seja interrompido.

Implemente a auto-cura. Caso um problema cause uma interrupção na disponibilidade do aplicativo, uma deteção por um sistema de monitoramento pode iniciar atividades de autorrecuperação para o aplicativo, como drenar a instância com falha e reimplantá-la. Muito provavelmente, isso requer uma solução de monitoramento central, integrada a um pipeline híbrido de Integração Contínua e Entrega Contínua (CI/CD). O aplicativo é integrado a um sistema de monitoramento para identificar problemas que podem exigir a reimplantação de um componente do aplicativo. O sistema de monitoramento também pode acionar CI/CD híbrido para reimplantar o componente do aplicativo e, potencialmente, quaisquer outros componentes dependentes no mesmo ou em outros locais.

Manter contratos de nível de serviço (SLAs). A disponibilidade é fundamental para que quaisquer contratos mantenham a conectividade com os serviços e aplicativos que você tem com seus clientes. Cada local em que seu aplicativo híbrido depende pode ter seu próprio SLA. Esses SLAs diferentes podem afetar o SLA geral do seu aplicativo híbrido.

Resiliência

Resiliência é a capacidade de um aplicativo e sistema híbridos se recuperarem de falhas e continuarem a funcionar. O objetivo da resiliência é retornar o aplicativo a um estado totalmente funcional após a ocorrência de uma falha. As estratégias de resiliência incluem soluções como backup, replicação e recuperação de desastres.

Para a discussão central deste pilar, ver de resiliência nos cinco pilares da excelência arquitetônica.

Lista de verificação de resiliência

Descubra dependências de recuperação de desastres. A recuperação de desastres em uma nuvem pode exigir alterações nos componentes do aplicativo em outra nuvem. Se um ou vários componentes de uma nuvem forem transferidos para outro local, seja dentro da mesma nuvem ou para outra nuvem, os componentes dependentes precisam estar cientes dessas alterações. Isso também inclui as dependências de conectividade. A resiliência requer um plano de recuperação de aplicativos totalmente testado para cada nuvem.

Estabeleça o fluxo de recuperação. Um design de fluxo de recuperação eficaz avaliou os componentes do aplicativo quanto à sua capacidade de acomodar buffers, tentativas, novas tentativas de transferência de dados com falha e, se necessário, recorrer a um serviço ou fluxo de trabalho diferente. Você deve determinar qual mecanismo de backup usar, o que seu procedimento de restauração envolve e com que frequência ele é testado. Você também deve determinar a frequência para backups incrementais e completos.

Testar recuperações parciais. Uma recuperação parcial de parte do aplicativo pode fornecer garantias aos usuários de que nem tudo está indisponível. Essa parte do plano deve garantir que uma restauração parcial não tenha efeitos colaterais, como um serviço de backup e restauração que interage com o aplicativo para desligá-lo normalmente antes que o backup seja feito.

Determine instigadores de recuperação de desastres e atribua responsabilidades. Um plano de recuperação deve descrever quem e quais funções podem iniciar ações de backup e recuperação, além do que pode ser feito backup e restaurado.

Compare os limites de autorrecuperação com a recuperação de desastres. Determine os recursos de autorrecuperação de um aplicativo para o início da recuperação automática e o tempo necessário para que a autorrecuperação de um aplicativo seja considerada uma falha ou sucesso. Determine os limites para cada nuvem.

Verifique a disponibilidade dos recursos de resiliência. Determine a disponibilidade de recursos e capacidades de resiliência para cada local. Se um local não fornecer os recursos necessários, considere integrar esse local em um serviço centralizado que forneça os recursos de resiliência.

Determine os tempos de inatividade. Determine o tempo de inatividade esperado devido à manutenção do aplicativo como um todo e como componentes do aplicativo.

Documente os procedimentos de solução de problemas. Defina procedimentos de solução de problemas para reimplantar recursos e componentes do aplicativo.

Capacidade de gestão

As considerações sobre como você gerencia seus aplicativos híbridos são essenciais para projetar sua arquitetura. Um aplicativo híbrido bem gerenciado fornece uma infraestrutura como código que permite a integração de código de aplicativo consistente em um pipeline de desenvolvimento comum. Ao implementar testes individuais e consistentes em todo o sistema de alterações na infraestrutura, você pode garantir uma implantação integrada se as alterações passarem nos testes, permitindo que elas sejam mescladas no código-fonte.

Para a discussão central desse pilar, consulte de DevOps nos cinco pilares da excelência em arquitetura.

Lista de verificação de capacidade de gerenciamento

Implementar monitoramento. Use um sistema de monitoramento centralizado de componentes de aplicativos espalhados por nuvens para fornecer uma visão agregada de sua integridade e desempenho. Esse sistema inclui o monitoramento dos componentes do aplicativo e dos recursos relacionados à plataforma.

Determine as partes do aplicativo que exigem monitoramento.

Coordenar políticas. Cada local que um aplicativo híbrido abrange pode ter sua própria política que abrange tipos de recursos permitidos, convenções de nomenclatura, tags e outros critérios.

Definir e usar funções. Como administrador de banco de dados, você precisa determinar as permissões necessárias para diferentes personas (como um proprietário de aplicativo, um administrador de banco de dados e um usuário final) que precisam acessar os recursos do aplicativo. Essas permissões precisam ser configuradas nos recursos e dentro do aplicativo. Um sistema de controle de acesso baseado em função (RBAC) permite que você defina essas permissões nos recursos do aplicativo. Esses direitos de acesso são desafiadores quando todos os recursos são implantados em uma única nuvem, mas exigem ainda mais atenção quando os recursos estão espalhados por nuvens. As permissões sobre recursos definidos em uma nuvem não se aplicam a recursos definidos em outra nuvem.

Use pipelines de CI/CD. Um pipeline de Integração Contínua e Desenvolvimento Contínuo (CI/CD) pode fornecer um processo consistente para criar e implantar aplicativos que abrangem nuvens e fornecer garantia de qualidade para sua infraestrutura e aplicativo. Esse pipeline permite que a infraestrutura e o aplicativo sejam testados em uma nuvem e implantados em outra. O pipeline ainda permite que você implante determinados componentes do seu aplicativo híbrido em uma nuvem e outros componentes em outra nuvem, essencialmente formando a base para a implantação de aplicativos híbridos. Um sistema CI/CD é crítico para lidar com as dependências que os componentes do aplicativo têm uns para os outros durante a instalação, como o aplicativo Web que precisa de uma cadeia de conexão com o banco de dados.

Gerencie o ciclo de vida. Como os recursos de um aplicativo híbrido podem abranger locais, o recurso de gerenciamento do ciclo de vida de cada local precisa ser agregado em uma única unidade de gerenciamento do ciclo de vida. Considere como eles são criados, atualizados e excluídos.

Examine as estratégias de solução de problemas. A solução de problemas de um aplicativo híbrido envolve mais componentes do aplicativo do que o mesmo aplicativo que está sendo executado em uma única nuvem. Além da conectividade entre as nuvens, o aplicativo está sendo executado em duas plataformas em vez de uma. Uma tarefa importante na solução de problemas de aplicativos híbridos é examinar o monitoramento agregado de integridade e desempenho dos componentes do aplicativo.

Segurança

A segurança é uma das principais considerações para qualquer aplicativo de nuvem e se torna ainda mais crítica para aplicativos de nuvem híbrida.

Para a discussão central deste pilar, ver Segurança nos cinco pilares da excelência da arquitetura.

Lista de verificação de segurança

Assuma a violação. Se uma parte do aplicativo estiver comprometida, certifique-se de que há soluções para minimizar a propagação da violação, não apenas dentro do mesmo local, mas também entre locais.

Monitore o acesso permitido à rede. Determine as políticas de acesso à rede para o aplicativo, como acessar o aplicativo somente de uma sub-rede específica e permita apenas as portas e protocolos mínimos entre os componentes necessários para que o aplicativo funcione corretamente.

Empregue autenticação robusta. Um esquema de autenticação robusto é fundamental para a segurança do seu aplicativo. Considere o uso de um provedor de identidade federada que forneça recursos de logon único e empregue um ou mais dos seguintes esquemas: logon de nome de usuário e senha, chaves públicas e privadas, autenticação de dois fatores ou multifator e grupos de segurança confiáveis. Determine os recursos apropriados para armazenar dados confidenciais e outros segredos para autenticação de aplicativos, além de tipos de certificado e seus requisitos.

Use criptografia. Identifique quais áreas do aplicativo usam criptografia, como para armazenamento de dados ou comunicação e acesso ao cliente.

Use canais seguros. Um canal seguro nas nuvens é fundamental para fornecer verificações de segurança e autenticação, proteção em tempo real, quarentena e outros serviços nas nuvens.

Definir e usar funções. Implemente funções para configurações de recursos e acesso de identidade única entre nuvens. Determine os requisitos de controle de acesso baseado em função (RBAC) para o aplicativo e seus recursos da plataforma.

Audite o seu sistema. O monitoramento do sistema pode registrar e agregar dados dos componentes do aplicativo e das operações relacionadas da plataforma de nuvem.

Resumo

Este artigo fornece uma lista de verificação de itens que são importantes considerar durante a criação e o design de seus aplicativos híbridos. Revisar esses pilares antes de implantar seu aplicativo evita que você se depare com essas questões em interrupções de produção e, potencialmente, exige que você revise seu design.

Pode parecer uma tarefa demorada de antemão, mas você obtém facilmente seu retorno sobre o investimento se projetar seu aplicativo com base nesses pilares.

Próximos passos

Para obter mais informações, consulte os seguintes recursos: