Compartir a través de


Procedimientos de DevOps para cargas de trabajo de SaaS en Azure

Las prácticas de DevOps son integrales para administrar cargas de trabajo en Azure, especialmente para aplicaciones de software como servicio (SaaS). Entre los aspectos clave de la administración de una carga de trabajo se incluyen la incorporación, la retirada y la modificación de instancias de cliente. Estas prácticas simplifican las operaciones y mejoran la escalabilidad y la confiabilidad, lo que minimiza las posibilidades de interrupciones.

En este artículo se describen las consideraciones de diseño para la administración eficaz del ciclo de vida de los clientes y las prácticas de implementación seguras.

Administrar los ciclos de vida de los clientes

La administración de eventos de ciclo de vida de los clientes es fundamental para cualquier aplicación SaaS. Normalmente, estos eventos incluyen:

  • Incorporación: Cuando un cliente se suscribe.
  • Alterar: Cuando se modifica la instancia de un cliente, como un cambio en su plan de tarifa.
  • Retirada: Cuando un cliente cancela su cuenta.

Podrías encontrar otros eventos de ciclo de vida. Por ejemplo, puede permitir que los clientes detengan su suscripción mientras conservan sus datos durante un período establecido y reanudan su suscripción más adelante. Cada evento puede tener implicaciones únicas para la aplicación.

En algunas soluciones, la administración del ciclo de vida del cliente solo puede requerir la creación o administración de datos en una tabla de base de datos. Para otras soluciones, podría incluir la orquestación de la implementación de la infraestructura de Azure, el código de aplicación y la configuración más compleja.

La administración del ciclo de vida es una responsabilidad clave del plano de control de una solución SaaS. Inicialmente, el equipo podría controlar estas actividades manualmente. Pero con el tiempo, intente realizar la transición de más funcionalidad a una aplicación o solución de plano de control formalizado.

Consideraciones de diseño

  • Coherencia Al planear la estrategia de administración del ciclo de vida, tenga en cuenta la complejidad de las acciones que requiere cada evento de ciclo de vida del cliente. Estas acciones incluyen el tamaño de la solución, la base de clientes y la sobrecarga organizativa. Tener una comprensión clara de los pasos necesarios para cada evento e invertir en controles para mantener la coherencia. Revise y actualice periódicamente los procesos para asegurarse de que siguen siendo válidos a medida que evoluciona la solución.

  • Modelo de arrendamiento. El enfoque para controlar los eventos del ciclo de vida de los clientes depende del modelo de arrendamiento.

    • Soluciones totalmente multiinquilino que tienen recursos de infraestructura. La incorporación o retirada de un cliente suele incluir la actualización de una lista de clientes y los datos asociados en el almacén de datos de la aplicación.

    • Recursos dedicados por cliente. Las tareas suelen incluir iniciar implementaciones en Azure, supervisar el progreso y gestionar fallos de implementación, posiblemente con intervención humana.

    • Recursos implementados por el cliente. Es posible que tenga que interactuar directamente con el equipo de ingeniería del cliente para la incorporación o retirada.

  • Niveles. Tenga en cuenta el modelo de precios y las diferentes necesidades de infraestructura de cada nivel, especialmente si permite a los clientes cambiar libremente su SKU en cualquier momento. Por ejemplo, si la solución SaaS incluye una aplicación principal y varios módulos de complementos de pago, asegúrese de que los recursos de la aplicación principal se implementan durante la incorporación. Además, permite agregar y quitar módulos de complemento dinámicos. Cuando se quita un módulo, decida si desea eliminar los datos asociados o almacenarlos para una posible reactivación.

Recomendaciones de diseño

Recomendación Prestación
Documente cada tipo de evento de ciclo de vida del cliente.

Asegúrese de capturar detalles paso a paso del proceso para cada evento.
Puede planear cómo responder a cada evento en el diseño de la solución.

Las instrucciones claras ayudan a los operadores humanos a mantener la coherencia y servir como base para la automatización futura.
Comunique la responsabilidad compartida entre usted y el cliente para cada evento de ciclo de vida. Comunique claramente y temprano las acciones que espera que los clientes realicen para completar una fase de ciclo de vida. Puede reducir posibles errores y frustración del cliente causados por errores de comunicación.
Planear la capacidad para cada evento de ciclo de vida. Por ejemplo, al incorporar un nuevo cliente, planee implementar una nueva instancia de la aplicación si las instancias existentes carecen de capacidad suficiente para controlar la carga adicional.

Para más información, consulte Facturación y administración de costos para cargas de trabajo de SaaS en Azure.
Puede escalar más fácilmente y evitar errores de implementación.
Automatice los eventos del ciclo de vida cuando sea práctico.

En el caso de las soluciones de bajo volumen o de fase temprana, la implementación manual y la configuración pueden ser suficientes. Pero debe seguir usando scripts, incluso si un ingeniero los ejecuta cada vez que se produce un evento de ciclo de vida.

A medida que la solución madura, integre estas responsabilidades en un plano de control total para reducir el error humano y admitir una mayor escala.
Puede reducir el riesgo significativo de error humano y admitir una mayor escala.

Planeamiento de la estrategia de administración de infraestructuras

Desarrolle una estrategia para implementar, mantener y administrar la infraestructura de Azure al principio. A medida que escala el saaS, el número de recursos crece. Es más fácil seguir una estrategia de administración desde el principio que conciliar la infraestructura más adelante cuando se vuelve demasiado compleja para controlar manualmente.

Consideraciones de diseño

  • Administración de recursos del cliente. El modelo de arrendamiento afecta a la implementación de recursos en soluciones SaaS. Puede implementar recursos de Azure dedicados para cada cliente o compartir recursos entre un número determinado de clientes. Como alternativa, puede usar un único conjunto de recursos compartidos y volver a configurarlos a medida que incorpore nuevos clientes. Tenga en cuenta estos enfoques típicos para administrar el ciclo de vida de los recursos:

    • Trate la lista de clientes como una configuración de los recursos que se van a implementar. Use canalizaciones de implementación centralizadas para implementar y configurar esos recursos.

    • Trate la lista de clientes como datos. Use una aplicación de plano de control para aprovisionar y configurar la infraestructura.

  • Automatización de la infraestructura. Muchas organizaciones comienzan implementando manualmente la infraestructura en la nube a través de Azure Portal. Esta estrategia es fácil al principio, pero no se escala bien con el tiempo. Planifique automatizar la configuración de su infraestructura mediante herramientas de infraestructura como código (IaC), como Bicep o Terraform. Para conocer los requisitos más complejos, cree un plano de control que use directamente las API de Azure Resource Manager.

  • Atribución de infraestructura. Realice un seguimiento de los clientes que se implementan en qué infraestructura. El seguimiento es importante para el planeamiento preciso de la capacidad y la atribución de costos. Puede realizar un seguimiento de la infraestructura del cliente de forma centralizada en una base de datos de clientes. O bien, para la infraestructura dedicada, use metadatos de recursos de Azure con grupos de recursos y etiquetas de recursos específicos del cliente. Para más información, consulte Organización de recursos para cargas de trabajo saaS.

Recomendaciones de diseño

Recomendación Prestación
Compile la automatización de la infraestructura mediante canalizaciones de implementación, scripts o plantillas con herramientas con las que el equipo ya está familiarizado. Las herramientas conocidas reducen el riesgo de errores porque la automatización de la infraestructura puede ser perjudicial si las herramientas no se entienden.
Implemente la infraestructura mediante IaC siempre que sea posible. IaC ayuda a reducir el mantenimiento manual, lo que se vuelve más arriesgado y más pesado a medida que crece la cantidad de infraestructura.
Separe la infraestructura básica de la infraestructura de nivel de cliente. Los distintos tipos de infraestructura tienen distintos ciclos de vida y actividades de administración. Al separarlos, puede administrar cada conjunto de forma independiente según su propia programación.
Use Azure Managed Applications para implementar y administrar recursos implementados por el cliente. Azure Managed Applications proporciona una variedad de funcionalidades que puede usar para implementar y administrar recursos dentro de la suscripción de Azure de un cliente.

Planear implementaciones de aplicaciones

Para mejorar la funcionalidad, actualice periódicamente el código y la configuración de la aplicación. Los clientes esperan un tiempo de actividad coherente durante las actualizaciones y las implementaciones seguras para minimizar el riesgo de interrupciones.

Consideraciones de diseño

  • Estandarizar herramientas y procesos. Las herramientas de DevOps probadas en el sector ayudan a garantizar la coherencia entre las funciones y la madurez de los procesos para administrar las implementaciones de aplicaciones. En la mayoría de las situaciones, desarrollar tus propias herramientas se considera un antipatrón. Para obtener más información, consulte Procedimientos de desarrollo de software de OE:03.

    Compensación: complejidad y costo. Las herramientas conocidas de DevOps pueden ser rentables en términos de dinero y habilidades. Sin embargo, agregan la carga operativa de administrar cada herramienta por separado. Es importante seguir abierto a las nuevas innovaciones tecnológicas que podrían beneficiar a la carga de trabajo.

  • Implementar actualizaciones progresivamente. Implementación de actualizaciones para los clientes en fases. Divida los usuarios en grupos lógicos e implemente cambios en un grupo a la vez. Aplique el mismo rigor a los cambios de configuración porque pueden modificar el comportamiento del código y provocar interrupciones. Siga un proceso de implementación para estos cambios.

  • Adoptar una estrategia de control de versiones. Cuando los clientes pueden elegir su versión de aplicación, agrega flexibilidad, pero complica las operaciones. Establezca expectativas claras para dejar de usar versiones anteriores y describa lo que sucede cuando ya no se admiten.

  • Implementación de la automatización. Las implementaciones manuales son propensas a riesgos debido a errores humanos y a la falta de coherencia. Incluso si las implementaciones se desencadenan manualmente, debe automatizar el proceso de implementación tanto como sea posible y requerir una supervisión humana mínima. Tenga en cuenta los pasos del proceso de implementación y cómo automatizarlos mejor.

  • Integración de pruebas Integre las pruebas en el proceso de implementación mediante la ejecución de:

    • Pruebas unitarias durante la compilación de código.
    • Pruebas de integración después de la implementación.
    • Pruebas de rendimiento normales.
    • Pruebas periódicas de seguridad y penetración.

    Decida un plan de acción si se produce un error en las pruebas en cualquier fase.

  • Implementaciones con errores. Planee los errores de implementación teniendo en cuenta las acciones necesarias y preparando una estrategia de reversión.

  • Acceso a entornos de cliente. Si implementa recursos en entornos de cliente, comprenda cómo puede aplicar actualizaciones dentro de esos entornos. Tenga en cuenta las funcionalidades que proporciona Azure Managed Applications, como la implementación de actualizaciones en las aplicaciones.

Recomendaciones de diseño

Recomendación Prestación
Use herramientas y procesos de DevOps establecidos y probados por el sector para administrar las implementaciones de aplicaciones. En la mayoría de las situaciones, el desarrollo de sus propias herramientas se considera un anti-patrón.

Para obtener más información, consulte Procedimientos de desarrollo de software de OE:03.
Esta estrategia puede ayudar a garantizar que el equipo de ingeniería implemente aplicaciones de forma eficaz sin tener que aprender herramientas personalizadas.
Notifique de forma proactiva a los clientes cualquier implementación próxima o completada. Esta estrategia puede ayudar a garantizar que las expectativas adecuadas se establezcan con los clientes sobre los próximos cambios en la aplicación.
Adopte prácticas de implementación seguras que implementen actualizaciones en grupos de clientes a través de estrategias como la exposición progresiva y los modelos de estado. Comience con clientes menos sensibles o pioneros antes de pasar a una base de clientes más amplia.
Para obtener más información, consulte Recomendaciones para prácticas de implementación seguras.
Esta estrategia puede ayudarle a identificar problemas antes de que afecten a todos los clientes.
Tratar la configuración como código. Puede reducir la probabilidad de tiempo de inactividad y adoptar un proceso coherente para los cambios de producción. Este enfoque centraliza las responsabilidades operativas, como la prueba de cambios y la implementación progresiva de actualizaciones en la configuración y el código.
Defina un proceso de administración de cambios y comunique una directiva de actualización de versiones para asegurarse de que los clientes sepan quién desencadena las actualizaciones, su frecuencia y condiciones.

Si los clientes pueden elegir su versión de la aplicación, establezca instrucciones claras sobre cómo dejar de usar versiones anteriores. Minimice el número de versiones de aplicación que se ejecutan en producción.
El mantenimiento de versiones anteriores provoca ineficiencia operativa. Proporcione el control necesario para sus clientes y evite sobrecargar al equipo estableciendo expectativas y directivas claras.
Evite personalizar aplicaciones para un solo cliente.

Para admitir diferentes necesidades de los clientes, puede crear varios niveles de la solución o usar marcas de características para habilitar funcionalidades específicas para determinados usuarios.
Evite la ambigüedad sobre qué características se implementan en qué versión y reduzca la carga de mantenimiento.
Tener un plan de reversión para implementaciones con errores, incluidos los criterios para desencadenar y las aprobaciones necesarias. Los planes de reversión ayudan a garantizar que puede recuperarse de errores de implementación incluso en circunstancias imprevistas.
Pruebe la aplicación periódicamente y en varias fases del proceso de desarrollo de software. Adopte una mentalidad de shift-left e identifique errores y desviaciones en las primeras etapas del ciclo de vida. Ayuda para evitar que los errores críticos afecten a los clientes.

Otros recursos

Multiinquilino es una metodología empresarial básica para diseñar cargas de trabajo de SaaS. En los artículos siguientes se proporciona más información sobre cómo adoptar prácticas de DevOps:

Paso siguiente

Obtenga información sobre las consideraciones de administración de incidentes para implementar procesos y herramientas que admiten una solución SaaS en Azure.