Este documento te ayuda a planificar y diseñar la fase de optimización de tu migración a Google Cloud. Una vez que hayas implementado tus cargas de trabajo en Google Cloud, puedes empezar a optimizar tu entorno.
Este documento forma parte de la siguiente serie de artículos sobre la migración aGoogle Cloud:
- Migrar a Google Cloud: primeros pasos
- Migración a Google Cloud: evaluar e identificar cargas de trabajo
- Migrar a Google Cloud: planificar y sentar las bases
- Migrar a: Google Cloudtransferir conjuntos de datos grandes
- Migrar a: desplegar tus cargas de trabajo Google Cloud
- Migrar a: Google Cloudmigrar de los despliegues manuales a los automatizados y en contenedores
- Migrar a Google Cloud: optimizar el entorno (este documento)
- Migrar a: prácticas recomendadas para validar un plan de migración Google Cloud
- Migrar a Google Cloud: minimizar los costes
En el siguiente diagrama se muestra el recorrido de tu migración.
En la fase de optimización, perfeccionas tu entorno para que sea más eficiente que la implementación inicial.
Este documento es útil si tienes previsto optimizar un entorno después de migrar a Google Cloudo si estás evaluando la oportunidad de optimizarlo y quieres saber cómo podría ser.
La estructura de la fase de optimización sigue el marco de migración descrito en esta serie: evaluación, planificación, implementación y optimización. Puedes usar este marco versátil para planificar toda la migración y desglosar las acciones independientes de cada fase. Cuando hayas completado el último paso de la fase de optimización, puedes volver a empezar esta fase y buscar nuevos objetivos de optimización. La fase de optimización se define como un bucle de optimización. Una ejecución del bucle se define como una iteración de optimización.
La optimización es una tarea continua. Optimizas constantemente tu entorno a medida que evoluciona. Para evitar esfuerzos descontrolados y duplicados, puedes definir objetivos de optimización medibles y detenerte cuando los alcances. Después, siempre puedes definir objetivos nuevos y más ambiciosos, pero ten en cuenta que la optimización tiene un coste en términos de recursos, tiempo, esfuerzo y habilidades.
En el siguiente diagrama se muestra el bucle de optimización.
Para ver una imagen más grande de este diagrama, consulta el árbol de decisiones de optimización.
En este documento, se describen los siguientes pasos repetibles del bucle de optimización:
- Evalúa tu entorno, tus equipos y el bucle de optimización que sigues.
- Establece los requisitos y los objetivos de optimización.
- Optimiza tu entorno y forma a tus equipos.
- Ajusta el bucle de optimización.
En este documento se explican algunos de los principios y conceptos de Site Reliability Engineering (SRE). Google desarrolló la disciplina de SRE para gestionar de forma eficiente y fiable una infraestructura global que ofrece servicios a miles de millones de usuarios. Adoptar la disciplina completa de SRE en tu organización puede ser poco práctico si necesitas modificar muchos de tus procesos empresariales y de colaboración. Puede que sea más sencillo aplicar un subconjunto de la disciplina de SRE que se adapte mejor a tu organización.
Evalúa tu entorno, tus equipos y tu bucle de optimización
Antes de empezar cualquier tarea de optimización, debes evaluar tu entorno. También debes evaluar las habilidades de tus equipos, ya que optimizar tu entorno puede requerir habilidades que tus equipos no tengan. Por último, debes evaluar el bucle de optimización. El bucle es un recurso que puedes optimizar como cualquier otro recurso.
Evalúa tu entorno
Debes conocer a fondo tu entorno. Para que la optimización sea eficaz, debes entender cómo funciona tu entorno e identificar las áreas en las que se puede mejorar. Esta evaluación establece un punto de partida para que puedas comparar tu evaluación con la fase de optimización y las siguientes iteraciones de optimización.
Migración a: Google Cloudevaluar e identificar cargas de trabajo incluye información detallada sobre cómo evaluar las cargas de trabajo y los entornos. Si has completado recientemente una migración aGoogle Cloud, ya tienes información detallada sobre cómo se configura, gestiona y mantiene tu entorno. De lo contrario, puedes usar esas directrices para evaluar tu entorno.
Evalúa tus equipos
Cuando tengas una idea clara de tu entorno, evalúa a tus equipos para conocer sus habilidades. Empieza enumerando todas las habilidades, el nivel de experiencia de cada una y los miembros del equipo que tienen más conocimientos sobre cada habilidad. Usa esta evaluación en la siguiente fase para descubrir las habilidades que te faltan para alcanzar tus objetivos de optimización. Por ejemplo, si empiezas a usar un servicio gestionado, necesitas las habilidades para aprovisionar, configurar e interactuar con ese servicio. Si quieres añadir una capa de almacenamiento en caché a una aplicación de tu entorno mediante Memorystore, debes tener experiencia para usar ese servicio.
Ten en cuenta que optimizar tu entorno puede afectar a tus procesos empresariales y de colaboración. Por ejemplo, si empiezas a usar un servicio totalmente gestionado en lugar de uno autogestionado, tus operadores tendrán más tiempo para eliminar el trabajo repetitivo.
Evaluar el bucle de optimización
El bucle de optimización es un recurso que también puedes optimizar. Usa los datos recogidos en esta evaluación para obtener información clara sobre el rendimiento de tus equipos durante la última iteración de optimización. Por ejemplo, si quieres acortar la duración de la iteración, necesitas datos sobre la última iteración, como su complejidad y los objetivos que perseguías. También necesitas información sobre todos los bloqueos que se hayan producido durante la última iteración para asegurarte de que tienes una estrategia de mitigación si vuelven a producirse.
Si esta iteración de optimización es la primera, es posible que no tengas suficientes datos para establecer una base de referencia con la que comparar tu rendimiento. Elabora una serie de hipótesis sobre el rendimiento que esperas de tus equipos durante la primera iteración. Después de la primera iteración de optimización, evalúa el bucle y el rendimiento de tus equipos, y compáralos con las hipótesis.
Establecer los requisitos y los objetivos de optimización
Antes de empezar cualquier tarea de optimización, define una serie de objetivos claramente medibles para la iteración.
En este paso, debes realizar las siguientes actividades:
- Define tus requisitos de optimización.
- Establezca objetivos de optimización medibles en función de sus requisitos de optimización.
Definir los requisitos de optimización
Indica los requisitos para la fase de optimización. Un requisito expresa una necesidad de mejora y no tiene por qué ser medible.
A partir de un conjunto de características de calidad de tus cargas de trabajo, tu entorno y tu propio bucle de optimización, puedes elaborar un cuestionario que te ayude a definir tus requisitos. El cuestionario abarca las características que le resultan valiosas para su entorno, sus procesos y sus cargas de trabajo.
Hay muchas fuentes que pueden ayudarte a definir las características de calidad. Por ejemplo, la norma ISO/IEC 25010 define las características de calidad de un producto de software. También puede consultar la Google Cloud lista de comprobación de la configuración.
Por ejemplo, el cuestionario puede incluir las siguientes preguntas:
- ¿Tu infraestructura y sus componentes se pueden escalar vertical u horizontalmente?
- ¿Tu infraestructura admite la restauración de cambios sin intervención manual?
- ¿Ya tienes un sistema de monitorización que cubra tu infraestructura y tus cargas de trabajo?
- ¿Tiene un sistema de gestión de incidentes para su infraestructura?
- ¿Cuánto tiempo y esfuerzo se necesita para implementar las optimizaciones planificadas?
- ¿Has podido cumplir todos los objetivos en las iteraciones anteriores?
A partir de las respuestas al cuestionario, elabora la lista de requisitos para esta iteración de optimización. Por ejemplo, tus requisitos podrían ser los siguientes:
- Aumentar el rendimiento de una aplicación.
- Aumentar la disponibilidad de un componente de tu entorno.
- Aumentar la fiabilidad de un componente de tu entorno.
- Reducir los costes operativos de tu entorno.
- Acorta la duración de la iteración de optimización para reducir los riesgos inherentes.
- Aumentar la velocidad de desarrollo y reducir el tiempo de lanzamiento.
Cuando tengas la lista de áreas de mejora, evalúa los requisitos de la lista. En esta evaluación, analiza sus requisitos de optimización, busca conflictos y prioriza los requisitos de la lista. Por ejemplo, aumentar el rendimiento de una aplicación puede entrar en conflicto con la reducción de los costes operativos.
Fija objetivos medibles
Una vez que hayas terminado la lista de requisitos, define objetivos medibles para cada uno de ellos. Un objetivo puede contribuir a más de un requisito. Si tienes alguna duda o no puedes definir todos los objetivos que necesitas para cumplir los requisitos, vuelve a la fase de evaluación de esta iteración para recopilar la información que falte y, a continuación, define los requisitos.
Para definir estos objetivos, puedes seguir una de las disciplinas de SRE, la definición de indicadores de nivel de servicio (SLIs) y objetivos de nivel de servicio (SLOs):
- Los SLIs son medidas cuantitativas del nivel de servicio que proporcionas. Por ejemplo, un SLI clave podría ser la latencia media de las solicitudes, la tasa de errores o el rendimiento del sistema.
- Los SLOs son valores objetivo o intervalos de valores de un nivel de servicio que se mide con un SLI. Por ejemplo, un SLO podría ser que la latencia media de las solicitudes sea inferior a 100 milisegundos.
Después de definir los ILS y los OLS, puede que te des cuenta de que no estás recogiendo todas las métricas que necesitas para medir tus ILS. Esta colección de métricas es el primer objetivo de optimización que puedes abordar. Tú defines los objetivos relacionados con la ampliación de tu sistema de monitorización para recoger todas las métricas que necesitas para tus SLIs.
Optimizar el entorno y los equipos
Después de evaluar tu entorno, tus equipos y tu bucle de optimización, así como de establecer los requisitos y los objetivos de esta iteración, ya puedes llevar a cabo el paso de optimización.
En este paso, debes realizar las siguientes actividades:
- Mide tu entorno, tus equipos y tu bucle de optimización.
- Analiza los datos procedentes de estas mediciones.
- Realiza las actividades de optimización.
- Vuelve a medir y analizar.
Mide tu entorno, tus equipos y tu bucle de optimización
Amplías tu sistema de monitorización para recoger datos sobre el comportamiento de tu entorno, tus equipos y el bucle de optimización para establecer una base de referencia con la que comparar los resultados después de optimizar.
Esta actividad se basa en lo que hiciste en la fase de evaluación y lo amplía. Una vez que hayas establecido tus requisitos y objetivos, sabrás qué métricas debes recoger para que tus mediciones sean relevantes para tus objetivos de optimización. Por ejemplo, si has definido los SLOs y los SLIs correspondientes para reducir la latencia de respuesta de una de las cargas de trabajo de tu entorno, debes recoger datos para medir esa métrica.
Conocer estas métricas también se aplica a tus equipos y al bucle de optimización. Puede ampliar su sistema de monitorización para recoger datos y medir las métricas relevantes para sus equipos y el bucle de optimización. Por ejemplo, si tienes SLOs y SLIs para reducir la duración de la iteración de optimización, debes recoger datos para medir esa métrica.
Cuando diseñes las métricas que necesitas para ampliar el sistema de monitorización, ten en cuenta que la recogida de datos puede afectar al rendimiento de tu entorno y de tus procesos. Evalúa las métricas que necesitas implementar para tus mediciones y sus intervalos de muestreo para saber si pueden afectar al rendimiento. Por ejemplo, una métrica con una frecuencia de muestreo alta puede reducir el rendimiento, por lo que debe optimizarla aún más.
En Google Cloud, puedes usar Cloud Monitoring para implementar las métricas que necesitas para recoger datos. Para implementar métricas personalizadas directamente en tus cargas de trabajo, puedes usar las bibliotecas de cliente de Cloud para Cloud Monitoring o OpenTelemetry. Si usas Google Kubernetes Engine (GKE), puedes usar la medición del uso de GKE para recoger información sobre el uso de recursos, como el uso de CPU, GPU y TPU, y, a continuación, dividir el uso de recursos por espacio de nombres o etiqueta.
Por último, puedes usar el Centro de Arquitectura de Cloud y los Google Cloud documentos técnicos como punto de partida para encontrar nuevas habilidades que tus equipos puedan necesitar para optimizar tu entorno.
Analizar datos
Una vez que hayas recogido los datos, analízalos y evalúalos para saber cómo se están comportando tu entorno, tus equipos y tu bucle de optimización en relación con tus requisitos y objetivos de optimización.
En concreto, evalúa tu entorno en función de lo siguiente:
- SLO.
- Prácticas recomendadas del sector.
- Un entorno sin deuda técnica.
Los SLOs que hayas establecido en función de tus objetivos de optimización pueden ayudarte a saber si estás cumpliendo tus expectativas. Si no cumples tus SLOs, debes mejorar tus equipos o el bucle de optimización. Por ejemplo, si has establecido un SLO para que la latencia de respuesta de una carga de trabajo se encuentre en un percentil determinado y esa carga de trabajo no cumple ese objetivo, es una señal de que debes optimizar esa parte de la carga de trabajo.
Además, puede comparar su situación con un conjunto de prácticas recomendadas reconocidas en el sector. Por ejemplo, la Google Cloud lista de comprobación de configuración te ayuda a configurar un entorno listo para producción para cargas de trabajo empresariales.
Una vez que haya recogido los datos, puede plantearse cómo optimizar su entorno para que sea más rentable. Puedes exportar datos de Facturación de Cloud a BigQuery y analizar datos con Looker Studio para saber cuántos recursos estás usando y extraer cualquier patrón de gasto.
Por último, compara tu entorno con otro en el que no tengas deuda técnica para ver si estás cumpliendo tus objetivos a largo plazo y si la deuda técnica está aumentando. Por ejemplo, puedes establecer un SLO para determinar cuántos recursos de tu entorno estás monitorizando en comparación con cuántos recursos has aprovisionado desde la última iteración. Si no has ampliado el sistema de monitorización para que cubra esos nuevos recursos, tu deuda técnica ha aumentado. Al analizar los cambios en tu deuda técnica, también debes tener en cuenta los factores que han provocado esos cambios. Por ejemplo, una necesidad empresarial puede requerir un incremento de la deuda técnica o puede ser inesperada. Conocer los factores que han provocado un cambio en tu deuda técnica te proporciona información valiosa para definir objetivos de optimización futuros.
Para monitorizar tu entorno en Google Cloud, puedes usar Monitoring para diseñar gráficos, paneles y alertas. Después, puede enrutar los datos de Cloud Logging para llevar a cabo un análisis más detallado y ampliar el periodo de conservación. Por ejemplo, puedes crear receptores agregados y usar Cloud Storage, Pub/Sub o BigQuery como destinos. Si exporta datos a BigQuery, puede usar Looker Studio para visualizar los datos y, de este modo, identificar tendencias y hacer predicciones. También puedes usar herramientas de evaluación como Recommender y Security Command Center para analizar automáticamente tu entorno y tus procesos en busca de objetivos de optimización.
Después de analizar todos los datos de medición, debe responder a dos preguntas:
¿Estás cumpliendo tus objetivos de optimización?
Si has respondido sí, esta iteración de optimización se ha completado y puedes iniciar otra. Si has respondido no, puedes pasar a la segunda pregunta.
Teniendo en cuenta los recursos que has asignado, ¿puedes alcanzar los objetivos de optimización que has definido para esta iteración?
Para responder a esta pregunta, ten en cuenta todos los recursos que necesitas, como tiempo, dinero y conocimientos especializados. Si has respondido sí, puedes pasar a la siguiente sección. De lo contrario, define mejor tus objetivos de optimización teniendo en cuenta los recursos que puedes usar en esta iteración. Por ejemplo, si tienes un horario fijo, puede que tengas que programar algunos objetivos de optimización para la próxima iteración.
Optimiza tus equipos
Optimizar el entorno es un reto continuo y puede requerir habilidades de las que tus equipos carezcan, como has descubierto durante la evaluación y el análisis. Por este motivo, optimizar tus equipos adquiriendo nuevas habilidades y haciendo que tus procesos sean más eficientes es fundamental para el éxito de tus actividades de optimización.
Para optimizar tus equipos, debes hacer lo siguiente:
- Diseñar e implementar un programa de formación.
- Optimiza la estructura y la cultura de tu equipo.
Para que tus equipos adquieran las habilidades que les faltan, debes diseñar e implementar un programa de formación o elegir uno que hayan preparado formadores profesionales.Google Cloud Para obtener más información, consulta el artículo Migración a Google Cloud: evaluar e identificar cargas de trabajo.
Mientras optimizas tus equipos, puede que descubras que hay margen para mejorar la estructura y la cultura. Es difícil prescribir una situación ideal de antemano, ya que cada empresa tiene su propia historia y sus propias peculiaridades que han contribuido a la evolución de la estructura y la cultura de sus equipos.
El liderazgo transformacional es un buen punto de partida para conocer los marcos generales para ejecutar y medir los cambios organizativos destinados a adoptar las prácticas de DevOps. Para obtener información práctica sobre cómo implementar una cultura de DevOps eficaz en tu organización, consulta Site Reliability Engineering, una descripción completa de la metodología SRE. El libro de trabajo Site Reliability Workbook, que complementa al libro, usa ejemplos concretos para mostrarte cómo poner en práctica los principios y las prácticas de SRE.
Optimizar el entorno
Después de medir y analizar los datos de las métricas, sabrá qué áreas debe optimizar.
En esta sección se describen técnicas de optimización generales para tuGoogle Cloud entorno. También puedes llevar a cabo cualquier actividad de optimización específica de tu infraestructura y de los servicios que utilices.
Codifica todo
Una de las mayores ventajas de adoptar un entorno de nube pública comoGoogle Cloudes que puedes usar interfaces bien definidas, como las APIs de Cloud, para aprovisionar, configurar y gestionar recursos. Puedes usar las herramientas que quieras para definir tu proceso de infraestructura como código (IaC) y los sistemas de control de versiones que prefieras.
Puedes usar herramientas como Terraform para aprovisionar tus recursos de Google Cloud y, a continuación, herramientas como Ansible, Chef o Puppet para configurar estos recursos. Un proceso de IaC te ayuda a implementar una estrategia de reversión eficaz para tus tareas de optimización. Puedes deshacer cualquier cambio que hayas aplicado al código que describe tu infraestructura. Además, puedes evitar errores inesperados al actualizar tu infraestructura probando los cambios.
Además, puedes aplicar procesos similares para codificar otros aspectos de tu entorno, como las políticas como código, mediante herramientas como Open Policy Agent, y las operaciones como código, como GitOps.
Por lo tanto, si adoptas un proceso de IaC en las primeras iteraciones de optimización, puedes definir más actividades de optimización como código. También puedes adoptar el proceso de forma gradual para evaluar si se adapta a tu entorno.
Automatizar todo
Para optimizar por completo todo tu entorno, debes usar los recursos de forma eficiente. Esto significa que debes eliminar el trabajo repetitivo para ahorrar recursos y reinvertir en tareas más importantes que aporten valor, como las actividades de optimización.
Según la recomendación de los ingenieros de fiabilidad del sitio, la forma de eliminar el trabajo repetitivo es aumentar la automatización. No todas las tareas de automatización requieren conocimientos de ingeniería de software muy especializados ni grandes esfuerzos. A veces, un breve script ejecutable que se ejecuta periódicamente puede ahorrar varias horas al día. Google Cloud proporciona herramientas como la CLI de Google Cloud y servicios gestionados como las APIs de Cloud, Cloud Scheduler, Cloud Composer y Cloud Run, que tus equipos pueden usar para automatizar tareas repetitivas.
Monitorizar todo
Si no puedes recoger métricas detalladas sobre tu entorno, no podrás mejorarlo, ya que no tendrás datos que respalden tus suposiciones. Esto significa que no sabes qué hacer para alcanzar tus objetivos de optimización.
Un sistema de monitorización integral es un componente necesario para tu entorno. El sistema monitoriza todas las métricas esenciales que necesitas evaluar para alcanzar tus objetivos de optimización. Cuando diseñes tu sistema de monitorización, planifica monitorizar al menos las cuatro señales de oro.
Puedes usar servicios gestionados como Monitoring y Logging para monitorizar tu entorno sin tener que configurar una solución de monitorización complicada.
Es posible que tengas que implementar un sistema de monitorización que pueda monitorizar entornos híbridos y multinube para cumplir las políticas de restricción de datos que te obligan a almacenar datos solo en determinadas ubicaciones físicas o servicios que usen varios entornos de nube simultáneamente.
Adopta un enfoque preparado para la nube
La expresión "preparado para la nube" describe un método eficiente para diseñar y ejecutar una aplicación en la nube. La Cloud Native Computing Foundation (CNCF) define una aplicación nativa de la nube como una aplicación escalable, resistente, gestionable y observable mediante tecnologías como contenedores, mallas de servicios, microservicios, infraestructura inmutable y APIs declarativas. Google Cloud proporciona servicios gestionados como GKE, Cloud Run, Cloud Service Mesh, Logging y Monitoring para que los usuarios puedan diseñar y ejecutar aplicaciones preparadas para la nube.
Consulta más información sobre las tecnologías preparadas para la nube en el mapa de ruta de CNCF y en el entorno interactivo nativo de la nube de CNCF.
Gestión de costes
Debido a sus diferentes modelos de facturación y costes, optimizar los costes de un entorno de nube pública como Google Cloud es diferente a optimizar un entorno local.
Para obtener más información, consulta el artículo Migrar a Google Cloud: minimizar los costes.
Volver a medir y analizar
Cuando completes las actividades de optimización de esta iteración, repite las mediciones y el análisis para comprobar si has alcanzado tus objetivos. Responde a la siguiente pregunta:
¿Has alcanzado tus objetivos de optimización?
Si has respondido sí, puedes pasar a la siguiente sección.
Si has respondido No, vuelve al principio de la fase de optimización del entorno y los equipos.
Ajustar el bucle de optimización
En esta sección, actualizarás y modificarás el bucle de optimización que has seguido en esta iteración para que se adapte mejor a la estructura y al entorno de tu equipo.
Codificar el bucle de optimización
Para optimizar el bucle de optimización de forma eficiente, debe documentar y definir el bucle de forma estandarizada, sencilla y fácil de gestionar, dejando espacio para los cambios. Puedes usar un servicio totalmente gestionado, como Cloud Composer, para crear, programar, monitorizar y gestionar tus flujos de trabajo. También puedes representar tus procesos con un lenguaje como el modelo de procesos de negocio y notación (BPMN). Después, puedes codificar estos procesos con un lenguaje estandarizado, como el lenguaje de ejecución de procesos empresariales (BPEL). Después de adoptar IaC, describir tus procesos con código te permite gestionarlos como el resto de tu entorno.
Automatizar el bucle de optimización
Una vez que hayas codificado el bucle de optimización, podrás automatizar tareas repetitivas para eliminar el trabajo pesado, ahorrar tiempo y hacer que el bucle de optimización sea más eficiente. Puedes empezar a automatizar todas las tareas en las que no se requiera una decisión humana, como medir datos y generar informes agregados para que tus equipos los analicen. Por ejemplo, puedes automatizar el análisis de datos con Cloud Monitoring para comprobar si tu entorno cumple los SLOs que has definido. Dado que la optimización es una tarea que nunca termina y que se repite en bucle, incluso las automatizaciones pequeñas pueden aumentar la eficiencia de forma significativa.
Monitorizar el bucle de optimización
Al igual que con todos los recursos de tu entorno, debes monitorizar el bucle de optimización para verificar que funciona correctamente, así como buscar cuellos de botella y objetivos de optimización futuros. Para empezar a monitorizarlo, puedes hacer un seguimiento del tiempo y los recursos que tus equipos han dedicado a cada paso de optimización. Por ejemplo, puedes usar un sistema de seguimiento de problemas y una herramienta de gestión de proyectos para monitorizar tus procesos y extraer estadísticas relevantes sobre métricas como el tiempo de resolución de problemas y el tiempo de finalización.
Siguientes pasos
- Consulta las prácticas recomendadas para validar un plan de migración.
- Lee los libros de ingenieros de fiabilidad de sitios para obtener información sobre otros conceptos y técnicas para prepararte para la optimización.
- Consulta cuándo pedir ayuda para tus migraciones.
- Para ver más arquitecturas de referencia, diagramas y prácticas recomendadas, consulta el centro de arquitectura de Cloud.
Colaboradores
Autor: Marco Ferrari | Arquitecto de soluciones en la nube