Considerações de design de aplicativo híbrido

O Microsoft Azure é a única nuvem híbrida consistente. Ele permite reutilizar seus investimentos de 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. 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 criar aplicativos escaloná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 para aplicativos que abrangem nuvens.

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

Os cenários híbridos variam muito 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 fundamentais e práticas recomendadas para você seguir. Projetar, configurar, implantar e manter uma arquitetura de aplicativo híbrido com êxito envolve muitas considerações de design que podem não ser inerentemente conhecidas por você.

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

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

  • 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 os recursos de cada componente devem ser mapeados para essas considerações para ajudar a determinar a arquitetura do aplicativo.

Decompor seu aplicativo em seus componentes estudando a arquitetura do aplicativo e determinando do que ele consiste. Os componentes também podem incluir outros aplicativos com os quais seu aplicativo interage. Ao identificar os componentes, avalie suas 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á-las e sua nuvem ou local.

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

Tabela 1. Componentes comuns do aplicativo

do componente diretrizes do aplicativo híbrido
Conexões de cliente Seu aplicativo (em qualquer dispositivo) pode acessar usuários de várias maneiras, de um ponto de entrada única, incluindo as seguintes maneiras:
- Um modelo cliente-servidor que exige que o usuário tenha um cliente instalado para trabalhar com o aplicativo. Um aplicativo baseado em servidor que é acessado de um navegador.
- As conexões de cliente podem incluir notificações quando a conexão é interrompida ou alertas quando os encargos de roaming podem ser aplicados.
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 com base nos 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 em que o aplicativo é executado.
Filas Você pode usar filas para organizar o status dos ciclos de vida e estados dos componentes do aplicativo. Essas filas podem fornecer recursos de mensagens, notificações e buffer para assinar partes.
Armazenamento de dados Um aplicativo pode ser sem estado ou com estado. Aplicativos com estado precisam de armazenamento de dados que possa ser atendido por vários formatos e volumes.
Cache de dados Um componente de cache de dados em seu design pode resolver estrategicamente problemas de latência e desempenhar um papel no gatilho de intermitência 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é fluxo de dados de alto volume continuamente.
Processamento de dados Suas tarefas de processamento de dados (como relatórios, análise, 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.

Avaliar os componentes do aplicativo para pilares

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

Tabela 2. Pilares

Pillar descrição
Colocação O posicionamento estratégico dos componentes em aplicativos híbridos.
Escalabilidade A capacidade de um sistema de lidar com o aumento da carga.
Disponibilidade A proporção de tempo em que um aplicativo híbrido está funcionando e funcionando.
Resiliência A capacidade de recuperação de um aplicativo híbrido.
Gerenciamento Processos de operações que mantêm um sistema em execução em produção.
Segurança Protegendo aplicativos híbridos e dados contra ameaças.

Colocação

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

O posicionamento é a tarefa importante de posicionar componentes para que eles possam melhor atender a um aplicativo híbrido. Por definição, os aplicativos híbridos abrangem locais, como do local para a nuvem e entre nuvens diferentes. 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.

  • de 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 conhecimento de sua localização e posicionamento. Essa virtuosidade pode ser obtida 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 entre nuvens.

Lista de verificação de posicionamento

Verifique os locais necessários. Verifique se o aplicativo ou qualquer um de seus componentes é necessário para operar ou exigir certificação para uma nuvem específica. Isso pode incluir requisitos de soberania de sua empresa ou determinados por lei. Além disso, determine se alguma operação local é necessária para um local ou local específico.

Verificar dependências de conectividade. Locais necessários e outros fatores podem ditar as dependências de conectividade entre seus componentes. À medida que você coloca os componentes, determine a conectividade e a segurança ideais para comunicação entre eles. As opções incluem VPN,do ExpressRoute, e conexões híbridas.

Avaliar os recursos da plataforma. Para cada componente do aplicativo, veja se o provedor de recursos necessário para o componente do 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 aplicativo modernas, como contêineres ou microsserviços, para planejar operações de movimentação e impedir dependências de serviço.

Determine os requisitos de soberania de dados. Os aplicativos híbridos são voltados para acomodar o isolamento de dados, como em um datacenter local. Examine o posicionamento de seus recursos para otimizar o êxito 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. Verificar os requisitos para acomodar qualquer latência.

Controlar fluxos de tráfego. Manipule o uso de pico e as comunicações apropriadas e protegidas para dados de informações pessoais identificáveis quando acessados pelo front-end em uma nuvem pública.

Escalabilidade

A escalabilidade é a capacidade de um sistema lidar com o aumento da carga em um aplicativo, que pode variar ao longo do tempo à medida que outros fatores e forças afetam o tamanho da audiência, além do tamanho e do escopo do aplicativo.

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

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

Em cenários híbridos, o dimensionamento de componentes individuais requer consideração adicional quando os componentes são distribuídos 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 de aplicativo podem ser dimensionados linearmente, enquanto outros têm dependências de dimensionamento e podem ser limitados até que ponto são capazes de dimensionar. Por exemplo, um túnel VPN que fornece conectividade híbrida para os locais de 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 limites de dimensionamento. 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 restante do aplicativo. Por exemplo, exceder um número de instâncias front-end pode exigir o dimensionamento do back-end.

Definir agendamentos de escala. A maioria dos aplicativos tem períodos de disponibilidade, portanto, você precisa agregar seus horários de pico em agendas 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 agrega a integridade e a carga do sistema. Um sistema de monitoramento centralizado pode iniciar o dimensionamento de um recurso em um local e 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 têm.

Aproveite os recursos de dimensionamento automático (conforme disponível). Se os recursos de dimensionamento automático fizerem parte de sua arquitetura, você implementará o dimensionamento automático definindo limites que definem quando um componente de 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, distribuídas em nuvens diferentes, também sejam dimensionadas. Os recursos de dimensionamento automático desses componentes dependentes devem ser apurados.

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

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

Disponibilidade

A disponibilidade é a hora em que um sistema está funcionando e funcionando. A disponibilidade é medida como um percentual de tempo de atividade. Erros de aplicativo, problemas de infraestrutura e carga do sistema podem reduzir a disponibilidade.

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

Lista de verificação de disponibilidade

Forneça redundância para conectividade. Os aplicativos híbridos exigem conectividade entre as nuvens que o aplicativo está espalhado. Você tem uma opção de tecnologias para conectividade híbrida, portanto, além de sua principal opção de tecnologia, use outra tecnologia para fornecer redundância com recursos de failover automatizados caso a tecnologia primária falhe.

Classifique domínios de falha. Aplicativos tolerantes a falhas exigem 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 no local, se um comutador superior do rack ficar indisponível ou se o datacenter completo estiver indisponí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. Domínios de atualização são usados para garantir que instâncias de componentes de aplicativo estejam disponíveis, enquanto outras instâncias do mesmo componente estão sendo atendidas com atualizações ou atualizações de recursos. Assim como acontece com os domínios de falha, os domínios de atualização podem ser classificados por seu posicionamento entre locais. 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.

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

Implemente a auto-cura. Caso um problema cause uma interrupção na disponibilidade do aplicativo, uma detecção por um sistema de monitoramento poderá iniciar atividades de autorrecuperação para o aplicativo, como esvaziar a instância com falha e reimplantá-la. Provavelmente isso requer uma solução de monitoramento central, integrada a um pipeline de CI/CD (integração contínua) híbrida e entrega contínua. O aplicativo é integrado a um sistema de monitoramento para identificar problemas que poderiam exigir a reimplantação de um componente de aplicativo. O sistema de monitoramento também pode disparar CI/CD híbrido para reimplantar o componente do aplicativo e, potencialmente, quaisquer outros componentes dependentes nos mesmos locais ou em outros locais.

Manter SLAs (contratos de nível de serviço). A disponibilidade é essencial para todos os contratos manterem 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 híbrido e sistema se recuperar de falhas e continuar funcionando. A meta de 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 desastre.

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

Lista de verificação de resiliência

Descubra dependências de recuperação de desastre. A recuperação de desastre em uma nuvem pode exigir alterações nos componentes do aplicativo em outra nuvem. Se um ou vários componentes de uma nuvem forem executados com failover para outro local, na mesma nuvem ou em outra nuvem, os componentes dependentes precisarão ser informados dessas alterações. Isso também inclui as dependências de conectividade. A resiliência requer um plano de recuperação de aplicativo totalmente testado para cada nuvem.

Estabelecer o fluxo de recuperação. Um design de fluxo de recuperação eficaz avaliou os componentes do aplicativo por sua capacidade de acomodar buffers, novas tentativas, tentar novamente a transferência de dados com falha e, se necessário, voltar a um serviço ou fluxo de trabalho diferente. Você deve determinar qual mecanismo de backup usar, o que o 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.

Teste as recuperações parciais. Uma recuperação parcial de parte do aplicativo pode fornecer garantia aos usuários de que todos não estão disponíveis. 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 interaja com o aplicativo para desligá-lo normalmente antes que o backup seja feito.

Determine os instigadores de recuperação de desastre e atribua responsabilidade. 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 restauração.

Compare os limites de auto-recuperação com a recuperação de desastre. Determine os recursos de auto-recuperação de um aplicativo para iniciação automática de recuperação e o tempo necessário para que a auto-recuperação de um aplicativo seja considerada uma falha ou êxito. Determine os limites para cada nuvem.

Verifique a disponibilidade dos recursos de resiliência. Determine a disponibilidade de recursos e recursos de resiliência para cada local. Se um local não fornecer os recursos necessários, considere a integração desse 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.

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

Gerenciamento

As considerações sobre como você gerencia seus aplicativos híbridos são essenciais para criar 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. Implementando 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 obter a discussão central desse pilar, consulte DevOps nos cinco pilares da excelência da arquitetura.

Lista de verificação de capacidade de gerenciamento

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

Determine as partes do aplicativo que exigem monitoramento.

Políticas de coordenadas. 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, marcas 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 RBAC (controle de acesso baseado em função) 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 são distribuídos entre nuvens. As permissões em recursos definidos em uma nuvem não se aplicam aos recursos definidos em outra nuvem.

Use pipelines de CI/CD. Um pipeline de CI/CD (Integração Contínua e Desenvolvimento Contínuo) pode fornecer um processo consistente para criar e implantar aplicativos que se estendem entre 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 nuvem. O pipeline até permite implantar determinados componentes do aplicativo híbrido em uma nuvem e outros componentes para outra nuvem, essencialmente formando a base para a implantação de aplicativos híbridos. Um sistema de CI/CD é fundamental 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 para o banco de dados.

Gerenciar o ciclo de vida. Como os recursos de um aplicativo híbrido podem abranger locais, a funcionalidade de gerenciamento de ciclo de vida de cada local precisa ser agregada em uma unidade de gerenciamento de ciclo de vida único. 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 de aplicativo do que o mesmo aplicativo em execução em uma única nuvem. Além da conectividade entre as nuvens, o aplicativo está em execução em duas plataformas em vez de uma. Uma tarefa importante na solução de problemas de aplicativos híbridos é examinar a integridade agregada e o monitoramento de desempenho dos componentes do aplicativo.

Segurança

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

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

Lista de verificação de segurança

Suponha violação. Se uma parte do aplicativo estiver comprometida, verifique se há soluções em vigor 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 apenas o aplicativo de uma sub-rede específica e permitir apenas as portas e protocolos mínimos entre os componentes necessários para que o aplicativo funcione corretamente.

Empregar autenticação robusta. Um esquema de autenticação robusto é fundamental para a segurança do aplicativo. Considere o uso de um provedor de identidade federado que fornece recursos de logon único e emprega 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 aplicativo, além dos 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 do cliente.

Use canais seguros. Um canal seguro entre as nuvens é fundamental para fornecer verificações de segurança e autenticação, proteção em tempo real, quarentena e outros serviços entre 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 RBAC (controle de acesso baseado em função) para o aplicativo e seus recursos de plataforma.

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

Resumo

Este artigo fornece uma lista de verificação de itens importantes a serem considerados durante a criação e a criação de seus aplicativos híbridos. Examinar esses pilares antes de implantar seu aplicativo impede que você execute essas perguntas em interrupções de produção e, potencialmente, exigir que você reveja seu design.

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

Próximas etapas

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