Partilhar via


Práticas de DevOps para cargas de trabalho SaaS no Azure

As práticas de DevOps são essenciais para gerenciar cargas de trabalho no Azure, especialmente para aplicativos SaaS. Os principais aspetos incluem onboarding, offboard e modificação de instâncias de clientes. Essas práticas não apenas simplificam as operações, mas também aumentam a escalabilidade e a confiabilidade, minimizando as chances de interrupções.

Este artigo descreve considerações de design para gerenciamento eficiente do ciclo de vida do cliente e práticas de implantação seguras.

Gerencie os ciclos de vida do cliente

O gerenciamento de eventos do ciclo de vida do cliente é crucial para qualquer aplicativo SaaS. Normalmente, esses eventos incluem:

  • Integração: quando um cliente se inscreve.
  • Alterar: modificar a instância de um cliente, como alterar seu nível de preço.
  • Offboarding: quando um cliente cancela sua conta.

Você pode encontrar eventos de ciclo de vida adicionais. Por exemplo, você pode permitir que seus clientes pausem a assinatura enquanto retêm seus dados por um período definido e retomem a assinatura mais tarde. Cada evento pode ter implicações únicas para a sua aplicação.

Em algumas soluções, o gerenciamento do ciclo de vida do cliente pode exigir apenas a criação ou o gerenciamento de dados em uma tabela de banco de dados. Para outras soluções, isso pode envolver a orquestração da implantação da infraestrutura do Azure, do código do aplicativo e da configuração mais complexa.

O gerenciamento do ciclo de vida é uma responsabilidade fundamental do plano de controle de uma solução SaaS. Inicialmente, sua equipe pode lidar com essas atividades manualmente, mas, com o tempo, tente fazer a transição de mais funcionalidades para uma solução ou aplicativo de plano de controle formalizado.

Considerações de design

  • Consistência. Ao planejar sua estratégia de gerenciamento do ciclo de vida, considere a complexidade das ações necessárias para cada evento do ciclo de vida do cliente. Isso inclui o tamanho da sua solução, a base de clientes e a sobrecarga organizacional. Certifique-se de ter uma compreensão clara das etapas necessárias para cada evento e invista em controles para manter a consistência. Analise e atualize regularmente seus processos para ajudar a garantir que eles permaneçam válidos à medida que sua solução evolui.

  • Modelo de arrendamento. Sua abordagem para lidar com eventos do ciclo de vida do cliente depende do seu modelo de locação.

    • Soluções totalmente multilocatárias com recursos de infraestrutura. A integração ou desintegração de um cliente normalmente envolve a atualização de uma lista de clientes e dos dados associados no armazenamento de dados do seu aplicativo.
    • Recursos dedicados por cliente. As tarefas normalmente envolveriam iniciar implantações no Azure, monitorar o progresso e lidar com falhas de implantação, possivelmente com intervenção humana.
    • Recursos implantados pelo cliente. Talvez seja necessário interagir diretamente com a equipe de engenharia do cliente para integração ou desembarque.
  • Níveis. Considere seu modelo de preços e as diferentes necessidades de infraestrutura de cada nível, especialmente se você permitir que os clientes alterem livremente sua SKU a qualquer momento.

    • Por exemplo, se sua solução SaaS incluir um aplicativo principal e vários módulos complementares pagos, certifique-se de que os recursos do aplicativo principal sejam implantados durante a integração. Além disso, permita a adição dinâmica e remoção de módulos complementares. Quando um módulo for removido, decida se deseja excluir os dados associados ou armazená-los para possível reativação.

Recomendações de design

Recomendação Benefício
Documente cada tipo de evento do ciclo de vida do cliente.

Certifique-se de capturar detalhes passo a passo do processo para cada evento.
Ao entender os eventos, você pode planejar como responder a cada evento em seu design de solução.
Instruções claras ajudam os operadores humanos a manter a consistência e servem como base para a automação futura.
Comunique a responsabilidade compartilhada entre você e seu cliente para cada evento do ciclo de vida. Comunique de forma clara e antecipada quais ações você espera que os clientes façam para completar um estágio do ciclo de vida. Você pode reduzir possíveis erros e frustração do cliente causados por falhas de comunicação.
Faça o planejamento de capacidade para cada evento do ciclo de vida.

Por exemplo, ao integrar um novo cliente, planeje implantar uma nova instância do seu aplicativo se as instâncias existentes não tiverem capacidade suficiente para lidar com a carga extra.

Para obter mais informações, consulte Cobrança e gerenciamento de custos para cargas de trabalho SaaS no Azure.
Você pode dar suporte à sua capacidade de dimensionar mais facilmente e evitar falhas de implantação.
Automatize os eventos do seu ciclo de vida, quando possível.

Para soluções de baixo volume ou em estágio inicial, a implantação e a configuração manuais podem ser suficientes, mas ainda devem usar scripts, mesmo que um engenheiro os execute sempre que ocorrer um evento do ciclo de vida.

À medida que sua solução amadurece, integre essas responsabilidades em um plano de controle total para reduzir o erro humano e oferecer suporte a uma escala mais alta.
Você pode reduzir o risco significativo de erro humano e oferecer suporte a uma escala mais alta.

Planeje sua estratégia de gerenciamento de infraestrutura

Desenvolva uma estratégia para implantar, manter e gerenciar a infraestrutura do Azure logo no início. À medida que você dimensiona seu SaaS, o número de recursos cresce. É mais fácil seguir uma estratégia de gerenciamento desde o início do que reconciliar a infraestrutura mais tarde, quando ela se torna muito complexa para ser manipulada manualmente.

Considerações de design

  • Gestão de recursos do cliente. Seu modelo de locação afeta a implantação de recursos em soluções SaaS. Você pode implantar recursos dedicados do Azure para cada cliente ou compartilhar recursos entre um número definido de clientes. Como alternativa, você pode usar um único conjunto de recursos compartilhados, reconfigurando-os à medida que integra novos clientes. Abordagens comuns para gerir o ciclo de vida dos recursos:

    • Trate sua lista de clientes como uma configuração dos recursos a serem implantados. Use pipelines de implantação centralizados para implantar e configurar esses recursos.
    • Trate a sua lista de clientes como dados. Use um aplicativo de plano de controle para provisionar e configurar a infraestrutura.
  • Automação de infraestrutura. Muitas organizações começam implantando manualmente a infraestrutura de nuvem por meio do portal do Azure, que é fácil inicialmente, mas não é bem dimensionado. Planeje automatizar sua configuração de infraestrutura usando ferramentas de Infraestrutura como Código (IaC), como Bicep ou Terraform. Para requisitos mais complexos, crie um plano de controle que use APIs do Azure Resource Manager diretamente.

  • Atribuição de infraestrutura. Acompanhe quais clientes são implantados em qual infraestrutura. O rastreamento é importante para o planejamento preciso da capacidade e atribuição de custos. Você pode rastrear a infraestrutura do cliente centralmente em um banco de dados de clientes ou, para infraestrutura dedicada, usar metadados de recursos do Azure com grupos de recursos específicos do cliente e tags de recursos. Para obter mais informações, consulte Organização de recursos para cargas de trabalho SaaS.

Recomendações de design

Recomendação Benefício
Crie automação de infraestrutura usando pipelines de implantação, scripts ou modelos com ferramentas com as quais sua equipe já está familiarizada. O uso de ferramentas conhecidas reduz o risco de erros, pois a automação da infraestrutura pode causar interrupções se as ferramentas não forem compreendidas.
Implante sua infraestrutura usando IaC sempre que possível. A manutenção manual da infraestrutura torna-se mais arriscada e onerosa à medida que a quantidade de infraestrutura aumenta.
Separe a infraestrutura principal da infraestrutura ao nível do cliente. Diferentes tipos de infraestrutura têm ciclos de vida e atividades de gestão distintos. Ao separá-los, você pode gerenciar cada conjunto de forma independente em sua própria programação.
Use os Aplicativos Gerenciados do Azure para implantar e gerenciar recursos implantados pelo cliente. Os Aplicativos Gerenciados do Azure fornecem uma variedade de recursos que permitem implantar e gerenciar recursos dentro da assinatura do Azure de um cliente.

Planejar implantações de aplicativos

Atualize regularmente o código e a configuração do aplicativo para melhorar a funcionalidade. Os clientes esperam um tempo de atividade consistente durante as atualizações e implementações seguras para minimizar o risco de interrupções.

Considerações de design

  • Padronizar ferramentas e processos. As ferramentas de DevOps comprovadas no setor garantem consistência entre funções e maturidade nos processos de gerenciamento de implantações de aplicativos. Desenvolver suas próprias ferramentas é considerado um antipadrão na maioria das situações.

    Consulte OE:03 Práticas de desenvolvimento de software.

    Compensação: Complexidade e custo. Usar ferramentas familiares de DevOps pode ser econômico em termos de dinheiro e habilidades. No entanto, acrescenta o encargo operacional de gerir cada ferramenta separadamente. É importante permanecer aberto a novas inovações tecnológicas que possam beneficiar sua carga de trabalho.

  • Implante progressivamente as atualizações. Distribua atualizações para um subconjunto de clientes de cada vez, dividindo os usuários em agrupamentos lógicos. Aplique o mesmo rigor às alterações de configuração, pois elas podem alterar o comportamento do código e causar interrupções. Siga um processo de implantação para essas alterações.

  • Adote uma estratégia de versionamento. Permitir que os clientes escolham a versão do aplicativo adiciona flexibilidade, mas complica suas operações. Defina expectativas claras para a substituição de versões antigas e descreva o que acontece quando elas não são mais suportadas.

  • Automatização. As implantações manuais são propensas a riscos devido a erros humanos e falta de consistência. Mesmo que suas implantações sejam acionadas manualmente, seu processo de implantação deve ser automatizado tanto quanto possível e deve exigir intervenção humana mínima. Considere as etapas do seu processo de implantação e como melhor automatizá-las.

  • Test (Testar). Integre o teste ao seu processo de implantação executando:

    • Testes de unidade durante a compilação de código
    • Testes de integração pós-implantação
    • Testes de desempenho regulares
    • Testes regulares de segurança e penetração

Decida as ações a tomar se algum teste falhar em qualquer fase.

  • Implantações com falha. Planeje falhas de implantação considerando as ações necessárias e preparando uma estratégia de reversão.

  • Acesso aos ambientes dos clientes. Se você implantar recursos em ambientes de clientes, entenda como aplicar atualizações nesses ambientes. Considere os recursos fornecidos pelos Aplicativos Gerenciados do Azure, como a implantação de atualizações para aplicativos.

Recomendações de design

Recomendação Benefício
Use ferramentas e processos de DevOps estabelecidos e comprovados no setor para gerenciar suas implantações de aplicativos. Desenvolver suas próprias ferramentas é considerado um antipadrão na maioria das situações.

Para obter mais informações, consulte OE:03 Práticas de desenvolvimento de software
Você pode garantir que sua equipe de engenharia implante de forma eficaz sem ter que aprender ferramentas personalizadas.
Notifique proativamente os clientes sobre quaisquer implantações futuras ou concluídas. Você pode garantir que as expectativas adequadas sejam definidas com seus clientes sobre as alterações que chegam ao seu aplicativo.
Adote práticas de implantação seguras que implantam atualizações em grupos de clientes usando estratégias como exposição progressiva, modelos de integridade e outros. Comece com clientes menos sensíveis ou que adotem antecipadamente antes de mudar para clientes mais importantes.
Para obter mais informações, consulte Recomendações para práticas de implantação seguras.
Essa abordagem ajuda a identificar problemas antes que eles afetem todos os clientes.
Trate a configuração como código. Você pode reduzir a probabilidade de tempo de inatividade e adotar um processo consistente para alterações de produção. Isso permite responsabilidades operacionais centralizadas, como testar alterações e distribuir progressivamente atualizações de configuração e código.
Defina um processo de gerenciamento de alterações e comunique uma política de atualização de versão para garantir que os clientes saibam quem aciona as atualizações, sua frequência e condições.

Se os clientes tiverem permissão para escolher a versão do aplicativo, defina diretrizes claras para substituir versões antigas. Minimize o número de versões de aplicativos em execução na produção.
A manutenção de versões mais antigas causa ineficiência operacional. Forneça o controle necessário para seus clientes, evitando sobrecarregar sua equipe, definindo expectativas e políticas claras.
Evite personalizar aplicativos para um único cliente.

Para dar suporte a diferentes necessidades do cliente, você pode criar várias camadas de sua solução ou usar sinalizadores de recursos para habilitar funcionalidades específicas para determinados usuários.
Evite ambiguidades sobre quais recursos são implantados em qual versão e reduza sua carga de manutenção.
Tenha um plano de reversão para implantações com falha, incluindo critérios para acionamento e aprovações necessárias. Os planos de reversão ajudam a garantir que você possa se recuperar de erros de implantação, mesmo em circunstâncias imprevistas.
Teste a sua aplicação regularmente e em várias fases do processo de desenvolvimento de software. Adote uma mentalidade "shift-left" e detete bugs e desvios no início do ciclo de vida. Ajude a evitar que erros críticos afetem seus clientes.

Recursos adicionais

A multilocação é uma metodologia de negócios central para projetar cargas de trabalho SaaS. Estes artigos fornecem mais informações sobre a adoção de práticas de DevOps:

Próximo passo

Saiba mais sobre as considerações de gerenciamento de incidentes para implementar processos e ferramentas que dão suporte a uma solução SaaS no Azure.