Compartir a través de


Procedimientos de DevOps para cargas de trabajo de SaaS en Azure

Los procedimientos de DevOps son integrales para administrar cargas de trabajo en Azure, especialmente para aplicaciones SaaS. Entre los aspectos clave se incluyen la incorporación, la retirada y la modificación de instancias de cliente. Estas prácticas no solo simplifican las operaciones, sino que también 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.
  • Modificar: modificar la instancia de un cliente, como cambiar su plan de tarifa.
  • Retirada: cuando un cliente cancela su cuenta.

Es posible que encuentre eventos de ciclo de vida adicionales. 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 podría requerir la creación o administración de datos en una tabla de base de datos. Para otras soluciones, podría implicar 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, intentar 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 necesarias para cada evento de ciclo de vida de los clientes. Esto incluye el tamaño de la solución, la base de clientes y la sobrecarga organizativa. Asegúrese de 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 con recursos de infraestructura. La incorporación o retirada de un cliente normalmente implica actualizar una lista de clientes y los datos asociados en el almacén de datos de la aplicación.
    • Recursos dedicados por cliente. Las tareas normalmente implicarían iniciar implementaciones en Azure, supervisar el progreso y controlar los errores 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.
Al comprender los eventos, 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 al principio las acciones que espera que realicen los clientes 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 admitir la capacidad de 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 soluciones de bajo volumen o de fase temprana, la implementación manual y la configuración pueden ser suficientes, pero deben 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. Enfoques comunes 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 empiezan por implementar manualmente la infraestructura en la nube a través de Azure Portal, que es fácil inicialmente, pero no se escala bien. Planee automatizar la configuración de la 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, para la infraestructura dedicada, usar 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. El uso de herramientas conocidas reduce el riesgo de errores, ya que la automatización de la infraestructura puede ser perjudicial si las herramientas no se entienden.
Implemente la infraestructura con IaC siempre que sea posible. El mantenimiento manual de la infraestructura 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. Las aplicaciones administradas de Azure proporcionan una variedad de funcionalidades que le permiten implementar y administrar recursos dentro de la suscripción de Azure de un cliente.

Planear implementaciones de aplicaciones

Actualice periódicamente el código y la configuración de la aplicación para mejorar la funcionalidad. 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 garantizan la coherencia entre las funciones y la madurez de los procesos para administrar las implementaciones de aplicaciones. Desarrollar sus propias herramientas se considera un antipatrón en la mayoría de las situaciones.

    Consulte procedimientos de desarrollo de software de OE:03.

    Compensación: complejidad y costo. El uso de herramientas conocidas de DevOps puede ser rentable en términos de dinero y aptitudes. Sin embargo, agrega 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.

  • Implemente actualizaciones progresivamente. Implemente actualizaciones en un subconjunto de clientes a la vez, dividiendo a los usuarios en agrupaciones lógicas. Aplique el mismo rigor a los cambios de configuración, ya que 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. Permitir a los clientes 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.

  • 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, el proceso de implementación debe automatizarse tanto como sea posible y debe requerir una intervención humana mínima. Tenga en cuenta los pasos del proceso de implementación y cómo automatizarlos mejor.

  • Hacer 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 posteriores a la implementación
    • Pruebas de rendimiento normales
    • Pruebas regulares de seguridad y penetración

Decida las acciones que se deben realizar 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. Considere las funcionalidades proporcionadas por Las aplicaciones administradas de Azure, como la implementación de actualizaciones en las aplicaciones.

Recomendaciones de diseño

Recomendación Prestación
Use herramientas y procesos de DevOps probados del sector establecidos para administrar las implementaciones de aplicaciones. Desarrollar sus propias herramientas se considera un antipatrón en la mayoría de las situaciones.

Para obtener más información, consulte Procedimientos de desarrollo de software de OE:03.
Puede asegurarse de que el equipo de ingeniería implementa eficazmente sin tener que aprender herramientas creadas personalizadas.
Notifique de forma proactiva a los clientes cualquier implementación próxima o completada. Puede asegurarse de que las expectativas adecuadas se establecen con los clientes sobre los cambios que llegan a la aplicación.
Adopte prácticas de implementación seguras que implementen actualizaciones en grupos de clientes mediante estrategias como la exposición progresiva, los modelos de mantenimiento y otros. Comience con clientes menos sensibles o pioneros antes de pasar a otros más importantes.
Para obtener más información, consulte Recomendaciones para prácticas de implementación seguras.
Este enfoque ayuda 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. Esto permite las responsabilidades operativas centralizadas, como probar los cambios y implementar progresivamente las 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 aplicación, establezca instrucciones claras para 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 los clientes a la vez que evite sobrecargar a su 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 "desplazamiento a la izquierda" y capture errores y desviaciones al principio del ciclo de vida. Ayuda para evitar que los errores críticos afecten a los clientes.

Recursos adicionales

Multiinquilino es una metodología empresarial básica para diseñar cargas de trabajo de SaaS. En estos artículos se proporciona más información sobre la adopción de 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.