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 aspectos incluem integração, remoção e modificação de instâncias do cliente. 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
Gerenciar eventos do ciclo de vida do cliente é crucial para qualquer aplicativo SaaS. Normalmente, esses eventos incluem:
- Integração: quando um cliente se inscreve.
- Alteração: modificar a instância de um cliente, como alterar seu tipo 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 mantêm os dados por um período definido e retomem a assinatura mais tarde. Cada evento pode ter implicações exclusivas para seu aplicativo.
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, pode envolver a orquestração da implantação da infraestrutura do Azure, do código do aplicativo e de uma 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 sobre o 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. Revise e atualize regularmente seus processos para ajudar a garantir que eles permaneçam válidos à medida que sua solução evolui.
Modelo de locação. Sua abordagem para lidar com eventos de ciclo de vida do cliente depende do seu modelo de locação.
- Soluções totalmente multitenant com recursos de infraestrutura. A integração ou remoção de um cliente normalmente envolve a atualização de uma lista de clientes e dados associados no armazenamento de dados do aplicativo.
- Recursos dedicados por cliente. As tarefas normalmente envolvem 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 desligamento.
Níveis. Considere seu modelo de preços e as diferentes necessidades de infraestrutura de cada camada, especialmente se você permitir que os clientes alterem livremente seu SKU a qualquer momento.
- Por exemplo, se sua solução SaaS incluir um aplicativo principal e vários módulos complementares pagos, verifique se os recursos do aplicativo principal foram implantados durante a integração. Além disso, permite a adição e remoção dinâmica 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 no design da solução. Instruções claras ajudam os operadores humanos a manter a consistência e servem como base para 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 concluir 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 com mais facilidade e evitar falhas de implantação. |
Automatize seus eventos de 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 de ciclo de vida. À medida que sua solução amadurece, integre essas responsabilidades em um plano de controle completo para reduzir o erro humano e oferecer suporte a uma escala maior. |
Você pode reduzir o risco significativo de erro humano e oferecer suporte a uma escala maior. |
Planeje sua estratégia de gerenciamento de infraestrutura
Desenvolva uma estratégia para implantar, manter e gerenciar a infraestrutura do Azure desde o início. À medida que você dimensiona seu SaaS, o número de recursos aumenta. É 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 sobre o design
Gerenciamento 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 gerenciar 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 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, o que é fácil inicialmente, mas não é bem dimensionado. Planeje automatizar a configuração da infraestrutura usando ferramentas de IaC (infraestrutura como código), como Bicep ou Terraform. Para requisitos mais complexos, crie um painel de controle que use APIs do Azure Resource Manager diretamente.
Atribuição de infraestrutura. Acompanhe quais clientes estão implantados em qual infraestrutura. O rastreamento é importante para o planejamento preciso da capacidade e a atribuição de custos. Você pode acompanhar a infraestrutura do cliente centralmente em um banco de dados do cliente ou, para infraestrutura dedicada, usar metadados de recursos do Azure com grupos de recursos e marcas de recursos específicos do cliente. Para obter mais informações, consulte Organização de recursos para cargas de trabalho de SaaS.
Recomendações de design
Recomendação | Benefício |
---|---|
Crie automação de infraestrutura usando pipelines, scripts ou modelos de implantação 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 ser disruptiva 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 cresce. |
Separe a infraestrutura principal da infraestrutura no nível do cliente. | Diferentes tipos de infraestrutura têm ciclos de vida e atividades de gerenciamento 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 na assinatura do Azure de um cliente. |
Planejar implantações de aplicativos
Atualize regularmente o código e a configuração do aplicativo para aprimorar 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 sobre o design
Padronize ferramentas e processos. As ferramentas de DevOps comprovadas pelo 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. O uso de ferramentas familiares de DevOps pode ser econômico em termos de dinheiro e habilidades. No entanto, adiciona a carga operacional de gerenciar cada ferramenta separadamente. É importante permanecer aberto a novas inovações tecnológicas que possam beneficiar sua carga de trabalho.
Implante atualizações progressivamente. Distribua atualizações para um subconjunto de clientes por 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 controle de versão. 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.
Automaçã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 disparadas manualmente, seu processo de implantação deve ser automatizado o máximo possível e deve exigir o mínimo de intervenção humana. Considere as etapas do processo de implantação e a melhor forma de automatizá-las.
Testar. Integre o teste ao seu processo de implantação executando:
- Testes de unidade durante a compilação do 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 serem tomadas se algum teste falhar em qualquer estágio.
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 do cliente. 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 pelo 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 Práticas de desenvolvimento de software OE:03 |
Você pode garantir que sua equipe de engenharia seja implantada de forma eficaz, não precisando 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 early adopters antes de passar para os mais importantes. Para obter mais informações, confira Recomendações para práticas de implantação segura. |
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 puderem 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 a carga de manutenção. |
Tenha um plano de reversão para implantações com falha, incluindo critérios para disparar 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 seu aplicativo regularmente e em vários estágios do processo de desenvolvimento de software. Adote uma mentalidade de "mudança para a esquerda" e detecte 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:
- Abordagens de arquitetura para a implantação e a configuração de soluções de multilocatário
- Considerações sobre a atualização de uma solução multilocatário
- Considerações sobre planos de controle multilocatários
- Abordagens de arquitetura para planos de controle em soluções multilocatário
Próxima etapa
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.