Read in English · Lire en français · Auf Deutsch lesen
Sección 9.7 de 9.8 · Avanzado · 25 min de lectura
Planificación de capacidad y pruebas de rendimiento
Videolección
4 min · narrado en inglés, con subtítulosSolo escuchar (audio)
Leer la transcripción
Te damos la bienvenida a la Sección nueve punto siete. La planificación de capacidad responde de antemano a una pregunta: ¿tendremos suficiente de todo cuando la demanda alcance su pico? Las pruebas de rendimiento aportan la evidencia.
Antes de una gran boda, un servicio de catering calcula cuántos invitados vendrán. Averigua cuántos platos puede servir cada cocinero en una hora. Añade algo de personal de reserva por si alguien se pone enfermo. Encarga los hornos adicionales con semanas de antelación, porque no se pueden comprar el mismo día. Y hace un ensayo a tamaño real, para comprobar que la cocina de verdad da abasto. Los equipos de software hacen exactamente lo mismo.
Primero, prevén la demanda: el crecimiento, los picos estacionales y los eventos conocidos. Exprésala en el pico, en unidades como solicitudes por segundo, no como una media diaria. Segundo, mide con pruebas cuánto puede soportar una instancia o una base de datos sin dejar de cumplir su objetivo de latencia. El límite práctico es el codo de la curva de tiempo de respuesta, no el punto en que se cae. Tercero, añade margen para el error de previsión, las ráfagas y los reintentos, y redundancia suficiente para sobrevivir a la pérdida de una instancia o de una zona entera. Cuarto, encarga todo lo que tenga un plazo de entrega largo. Un proveedor de pagos puede necesitar semanas de aviso para elevar un límite.
Las pruebas se diferencian en la carga que aplican y en la pregunta que responden. Una prueba de carga sube hasta el pico previsto y lo mantiene, para comprobar la latencia y los errores. Una prueba de estrés va mucho más allá del pico para ver cómo falla el sistema, y si se recupera. Una prueba de resistencia dura horas o días para sacar a la luz fugas lentas, por ejemplo de memoria o de conexiones. Una prueba de picos salta de una carga baja a una muy alta en segundos, para probar el retardo del autoescalado y los limitadores de tasa. Y una prueba de punto de ruptura sube la carga de forma constante hasta que algo se rompe, para encontrar el límite real y el primer cuello de botella.
La forma en que el generador de carga simula a los usuarios importa enormemente. En un modelo cerrado, un número fijo de usuarios virtuales envía cada uno una solicitud, espera la respuesta, hace una pausa y vuelve a enviar. Así que, cuando el sistema se ralentiza, cada usuario espera más y llegan menos solicitudes. La carga baja por sí sola. En un modelo abierto, las solicitudes llegan a un ritmo fijo, se hayan respondido o no las anteriores. Así se comportan los visitantes reales de un sitio web público. Así que, cuando el sistema se ralentiza, la cola y los tiempos de respuesta no dejan de crecer. Para el tráfico público y las salidas a la venta, una prueba con modelo cerrado puede ser peligrosamente optimista.
Una trampa relacionada se llama omisión coordinada. Una prueba pretende enviar una solicitud cada diez milisegundos. A los cincuenta segundos, el sistema se congela durante diez segundos. Una herramienta de prueba en bucle cerrado espera cada respuesta, así que también se detiene. Registra una muestra de diez segundos y unas nueve mil rápidas. Pero según el calendario previsto, durante la congelación habrían llegado unas mil solicitudes, con retrasos de hasta diez segundos, unos cinco de media. Así que el informe dice que el percentil noventa y nueve es de un milisegundo. Corregido, es de unos nueve segundos. La solución son generadores de modelo abierto que midan desde el momento en que se debía enviar cada solicitud.
Planifiquemos la salida a la venta de una gira por estadios: ciento ochenta mil entradas. Se esperan unos cuatrocientos mil fans en la sala de espera virtual. Con dos entradas y media por pedido, setenta y dos mil pedidos agotan la gira. La restricción determinante es el límite del proveedor de pagos: ciento veinte pagos por segundo. Reservando un tercio para reintentos, y con un ochenta por ciento de fans que compran, el equipo admite cien fans por segundo. Cada fan pasa unos cuatro minutos en el flujo de compra, así que, por la ley de Little, hay veinticuatro mil activos a la vez. Eso son tres mil doscientas cincuenta solicitudes por segundo. A cuatrocientas por instancia, son nueve instancias, o quince para sobrevivir a la pérdida de una zona, arrancadas antes de las nueve y media. La propia sala de espera recibe veinte mil solicitudes por segundo, servidas en el borde de la CDN, sin llegar nunca al nivel de la API. La gira se agota en unos quince minutos. Duplicar los servidores no vendería las entradas más rápido: el recurso compartido más escaso marca el ritmo.
La sección completa trata las herramientas de prueba, los datos de prueba realistas y los presupuestos de rendimiento. A continuación, en la Sección nueve punto ocho, la última de este capítulo, veremos la ingeniería del caos y los incidentes. Nos vemos allí.
Lo que necesitas saber
- La planificación de capacidad prevé la demanda máxima, mide la capacidad por unidad en condiciones realistas, añade margen y redundancia, y encarga con antelación todo lo que tenga un plazo de entrega largo, incluidas las cuotas y los límites de terceros.
- Las pruebas de carga, de estrés, de resistencia (soak), de picos (spike) y de punto de ruptura responden a preguntas distintas: cumplir los objetivos en el pico, el comportamiento ante fallos por encima de él, la degradación con el tiempo, la reacción ante aumentos repentinos y el límite real.
- Los modelos de carga cerrados se ralentizan cuando lo hace el sistema, mientras que en los abiertos las llegadas siguen a un ritmo fijo; el tráfico público y las salidas a la venta (on-sales) son abiertos, por lo que las pruebas con modelo cerrado pueden ser peligrosamente optimistas (Schroeder, Wierman y Harchol-Balter, 2006).
- La omisión coordinada (Gil Tene) oculta las respuestas lentas cuando la herramienta de prueba espera las respuestas antes de enviar; mide desde el momento de envío previsto, con generadores de modelo abierto e histogramas completos.
- k6, Gatling, JMeter y Locust son las principales herramientas de código abierto; los escenarios realistas, los volúmenes de datos, las claves calientes, la latencia de las dependencias y un generador sin sobrecarga importan más que la herramienta.
- Los presupuestos de rendimiento, como los umbrales de Core Web Vitals o un reparto de la latencia por salto, se comprueban automáticamente en el pipeline de entrega como funciones de aptitud.
- El recurso compartido más escaso, a menudo un tercero, fija el ritmo de admisión seguro para un evento como la salida a la venta de entradas.
La capacidad es un plan, no una esperanza
La planificación de capacidad responde de antemano a una pregunta: ¿tendremos suficiente de todo cuando la demanda alcance su pico? Todo
abarca más que los servidores. Incluye las conexiones a la base de datos y el rendimiento de escritura, la memoria de la caché, las particiones del intermediario de mensajes, las cuotas de la cuenta en la nube, los límites de tasa de terceros, las licencias y las personas de guardia. La elasticidad de la nube permite añadir rápidamente parte de la capacidad, pero no toda: el nodo primario de una base de datos no se puede duplicar en segundos, un proveedor de pagos puede necesitar semanas de aviso para elevar un límite, y el autoescalado (tratado en la Sección 9.1) reacciona en minutos a un salto brusco que llega en segundos.
El método tiene cuatro pasos, que se repiten en un ciclo regular (trimestral para un crecimiento constante, por evento para los lanzamientos y las salidas a la venta):
El ciclo de planificación de capacidad
- Prever la demandaCombina el crecimiento orgánico (pedidos diarios que aumentan un 4% al mes), la estacionalidad (picos de comida y cena, las noches de los viernes, Navidad) y los eventos conocidos (una campaña de marketing, la salida a la venta de un concierto en un estadio). Expresa la demanda en las unidades con las que escala el sistema: solicitudes por segundo por recorrido, escrituras por segundo, mensajes por segundo, en el pico, no en la media diaria.
- Medir la capacidad por unidadAverigua, mediante pruebas, cuánta carga puede soportar una instancia, una base de datos o una partición sin dejar de cumplir su SLO de latencia. El codo de la curva de tiempo de respuesta, donde el encolamiento empieza a dominar (Sección 2.4), es el límite práctico, no el punto en que se cae.
- Añadir margen y redundanciaDimensiona para el pico previsto más un margen para el error de previsión, las ráfagas y los reintentos, y de forma que la pérdida de una instancia o de una zona de disponibilidad entera siga dejando capacidad suficiente (redundancia N+1 o a nivel de zona).
- Planificar los plazos y revisarHaz una lista de lo que tarda en conseguirse (aumentos de cuota, capacidad reservada, actualizaciones de la base de datos, límites de terceros, hardware para sistemas locales) y encárgalo con suficiente antelación. Después compara la demanda real con la prevista y mejora el modelo.
Los cálculos de dimensionamiento con la ley de Little se trabajaron en la Sección 9.1; esta sección se centra en cómo obtener cifras fiables para introducir en ellos. El error más común en la planificación de capacidad no es una mala aritmética, sino una capacidad por instancia medida en condiciones poco realistas, y el segundo es olvidar una restricción compartida, como un límite de un tercero, que ningún margen de capacidad (headroom) en tus propios servidores puede resolver.
Tipos de prueba de rendimiento
Las pruebas de rendimiento son la única forma de medir la capacidad, encontrar los cuellos de botella antes que los clientes y verificar que un lanzamiento no ha empeorado las cosas. Las pruebas se diferencian en la forma de la carga que aplican y en la pregunta que responden. Una prueba de carga comprueba el pico esperado; una prueba de estrés va más allá para ver cómo falla el sistema; una prueba de resistencia (soak test) se ejecuta durante horas para sacar a la luz fugas lentas; una prueba de picos (spike test) comprueba la reacción ante saltos repentinos; una prueba de punto de ruptura aumenta la carga hasta que algo se rompe, para encontrar el límite real.
Tipos de pruebas de rendimiento
| Prueba | Pregunta que responde | Forma de la carga | Duración típica | Qué vigilar |
|---|---|---|---|---|
| Humo (smoke) | ¿Funcionan siquiera el script de prueba y el entorno? | Unos pocos usuarios | Minutos | Errores del script, entorno equivocado |
| Carga | ¿Cumplimos nuestros objetivos de latencia y de errores en el pico esperado? | Subir hasta el pico previsto y mantener | 30-60 minutos | Latencia p99, tasa de errores, saturación de recursos |
| Estrés | ¿Cómo falla el sistema por encima del pico, y se recupera? | Subir hasta 1.5-3x el pico y luego bajar | 30-60 minutos | Degradación elegante, descarte de carga, tiempo de recuperación |
| Resistencia (soak) | ¿Se degrada algo con el tiempo? | Carga normal o de pico, mantenida | De horas a días | Fugas de memoria, colas que crecen, fugas de conexiones, disco que se llena |
| Spike (investigación acotada) | ¿Podemos absorber un aumento repentino? | Salto de baja a muy alta en segundos | Minutos | Retardo del autoescalado, desbordamiento de colas, comportamiento del limitador de tasa |
| Punto de ruptura (capacidad) | ¿Dónde está el límite y cuál es el primer cuello de botella? | Subida constante hasta el fallo | Hasta que se rompe | El codo de la latencia, el primer recurso saturado |
Modelos de carga abiertos y cerrados
Los generadores de carga simulan a los usuarios de una de dos formas, y elegir la equivocada produce resultados que no solo son inexactos, sino peligrosamente optimistas. En un modelo de carga cerrado, la herramienta ejecuta un número fijo de usuarios virtuales; cada uno envía una solicitud, espera la respuesta, hace una pausa durante un tiempo de reflexión y repite. Si el sistema se ralentiza, cada usuario virtual envía menos solicitudes, así que la carga baja por sí sola. En un modelo de carga abierto, las solicitudes llegan a un ritmo fijo, con independencia de lo rápido que se respondan las anteriores, como hacen los visitantes reales de un sitio web público: miles de fans que pulsan Comprar a las 10:00 no se esperan unos a otros.
Bianca Schroeder, Adam Wierman y Mor Harchol-Balter demostraron (Open Versus Closed: A Cautionary Tale
, NSDI 2006) que los dos modelos pueden dar tiempos de respuesta muy distintos para el mismo sistema y la misma carga media, y que las decisiones de planificación o de capacidad ajustadas con uno pueden ser erróneas con el otro. Los sistemas internos con una población fija de clientes, como una aplicación de centro de llamadas con 300 agentes, son razonablemente cerrados. El tráfico público de internet, los consumidores dirigidos por eventos que se alimentan de una cola y las salidas a la venta son abiertos, o casi. Para esos sistemas, la prueba realista es la de modelo abierto; los ejecutores (executors) constant-arrival-rate y ramping-arrival-rate de k6, por ejemplo, lo implementan, mientras que su ejecutor constant-vus es cerrado.
Cerrado frente a abierto
Omisión coordinada (coordinated omission)
Gil Tene, de Azul Systems y autor de la biblioteca HdrHistogram, puso nombre a un error de medición que afecta a muchas pruebas de latencia y herramientas de monitorización: la omisión coordinada (coordinated omission). Un generador de carga en bucle cerrado espera cada respuesta antes de enviar la siguiente solicitud. Cuando el sistema se detiene, el generador se detiene con él, así que las solicitudes que los usuarios reales habrían enviado durante la parada, y que habrían sido todas lentas, nunca se envían ni se miden. La herramienta de prueba se coordina
con el sistema que está probando y omite exactamente las muestras malas.
Imagina una prueba que pretende enviar una solicitud cada 10 ms durante 100 segundos contra un servicio que normalmente responde en 1 ms. A los 50 segundos, el servicio se congela durante 10 segundos (por ejemplo, una larga pausa de recolección de basura). La herramienta de prueba en bucle cerrado registra unas 9000 muestras rápidas y una muestra de 10 segundos, así que informa de un p99 de 1 ms e incluso de un p99.9 de 1 ms. Sin embargo, según el calendario previsto, durante la congelación habrían llegado unas 1000 solicitudes, que habrían esperado entre 10 segundos y 10 ms, unos 5 segundos de media. El diez por ciento de todas las solicitudes sufrió un retraso grave: el p95 real es de unos 5 segundos y el p99 real, de unos 9 segundos.
Lo que la herramienta de prueba no ve
Las soluciones son usar generadores de modelo abierto (de tasa de llegada) para los sistemas abiertos, medir la latencia desde el momento en que se pretendía enviar la solicitud y no desde cuándo se envió realmente, registrar histogramas completos en lugar de medias y desconfiar de cualquier informe de latencia cuyo máximo esté muy por encima de su p99.9 con pocas muestras entre ambos. Para esto existen precisamente wrk2, la herramienta modificada de Tene para pruebas de rendimiento HTTP, y las opciones de corrección de HdrHistogram. El mismo error aparece en la monitorización de producción cuando una biblioteca cliente mide solo las solicitudes que consiguió enviar.
Herramientas
Cuatro herramientas de código abierto cubren la mayoría de las necesidades. Apache JMeter es la veterana: basada en Java, con un editor gráfico de planes de prueba, muchos plug-ins de protocolos y grupos de hilos (thread groups) que son cerrados por defecto. Gatling escribe las pruebas como código (Scala, Java y Kotlin, y más recientemente JavaScript y TypeScript), es eficiente con cargas altas y tiene perfiles de inyección abiertos y cerrados. k6, mantenida por Grafana Labs, ejecuta scripts de prueba en JavaScript sobre un motor escrito en Go, tiene ejecutores explícitos de modelo abierto y cerrado, y umbrales de aprobado o fallo adecuados para la integración continua. Locust describe el comportamiento de los usuarios en Python y distribuye la carga entre procesos trabajadores; sus usuarios son de bucle cerrado. Los servicios comerciales y alojados en la nube añaden generación de carga distribuida a gran escala e informes.
La herramienta importa menos que el escenario. Un buen script reproduce la combinación real de recorridos (según la analítica de producción: quizá un 70% de navegación, un 20% de cambios en el carrito y un 10% de proceso de pago), tiempos de reflexión realistas, datos realistas (usuarios, restaurantes y asientos distintos, no el mismo 10 000 veces) y el modelo de carga correcto, y comprueba que las respuestas sean correctas, porque una página de error rápida no es una solicitud con éxito.
import http from 'k6/http';
import { check } from 'k6';
export const options = {
scenarios: {
onsale: {
executor: 'ramping-arrival-rate', // open model: arrivals per second
startRate: 100, timeUnit: '1s',
preAllocatedVUs: 2000, maxVUs: 20000,
stages: [
{ target: 4900, duration: '2m' }, // ramp to 1.5x design load
{ target: 4900, duration: '20m' }, // hold
],
},
},
thresholds: { // fail the run if missed
http_req_failed: ['rate<0.005'],
http_req_duration: ['p(99)<500'],
},
};
export default function () {
const res = http.get('https://perf.tickets.example/api/events/42/seats');
check(res, { 'status is 200': (r) => r.status === 200 });
}Entornos y datos realistas
Una prueba de rendimiento solo es tan fiable como su entorno. Una base de datos de prueba con 10 000 filas cuyos índices caben en memoria no dice nada sobre producción, con 200 millones de filas cuyos índices no caben. La lista de comprobación siguiente detecta las diferencias habituales.
Tamaño y forma de los datos: volúmenes a escala de producción y distribuciones realistas, incluidas las claves calientes (hot keys), como los restaurantes más populares o los mejores asientos, que crean una contención que una prueba uniforme nunca ve. Los mismos bloques de construcción: los mismos tipos de instancia, límites de contenedor, configuración de la base de datos, tamaños de los grupos de conexiones y topología de red (incluidos los saltos entre zonas). Estado de la caché: prueba tanto con la caché caliente como en frío, porque un despliegue o un failover la vacían (Sección 7.6). Dependencias: servicios de terceros sustituidos por stubs que reproduzcan su distribución real de latencia y sus límites de tasa, no respuestas instantáneas. Aislamiento: ninguna prueba de otro equipo compartiendo el entorno, o los resultados son ruido. El propio generador: capacidad suficiente de generación de carga en las ubicaciones adecuadas; un generador que funciona al 100% de CPU se mide a sí mismo.
Algunas organizaciones prueban en producción, con cuidado, porque ninguna copia es nunca del todo igual: usuarios sintéticos y eventos de prueba que se excluyen de los informes de negocio, tráfico sombra (copiar solicitudes reales a una nueva versión y descartar sus respuestas) y subidas graduales con condiciones de cancelación automáticas. Esto necesita las mismas salvaguardas que los experimentos de caos: un radio de impacto pequeño, un interruptor de emergencia y una vigilancia estrecha de los SLO.
Presupuestos de rendimiento
Un presupuesto de rendimiento es un límite que un cambio no puede superar, acordado de antemano y comprobado automáticamente, para que el rendimiento no se erosione a base de pequeñas regresiones. Para los frontends web, los presupuestos abarcan el peso de la página, el tamaño de los scripts y las Core Web Vitals, cuyos umbrales de Google para una buena experiencia, medidos en el percentil 75 de las cargas de página, son un Largest Contentful Paint de 2.5 segundos o menos, un Interaction to Next Paint de 200 ms o menos y un Cumulative Layout Shift de 0.1 o menos.
Para los backends, un presupuesto de latencia reparte un SLO de extremo a extremo entre los saltos de un recorrido. El proceso de pago de la plataforma de reparto de comida tiene un objetivo de p99 de 800 ms; el equipo asigna 20 ms al gateway, 60 ms al servicio de pedidos, 80 ms a precios, 450 ms al pago (la mayor parte, el proveedor externo de tarjetas), 40 ms a la base de datos, 100 ms a la red y la serialización, y deja 50 ms de reserva. Ahora cada equipo conoce su propio objetivo, y un cambio que lleve precios a 150 ms se ve como un incumplimiento del presupuesto antes de convertirse en un incumplimiento del SLO. En sentido estricto, los percentiles de las partes no suman el percentil del todo, así que trata el reparto como una asignación de ingeniería y verifica por separado la cifra de extremo a extremo.
Los presupuestos se hacen cumplir ejecutando una prueba de rendimiento corta y estable en el pipeline de entrega y haciendo fallar la compilación cuando se cruza un umbral, como hacen los umbrales de k6 anteriores. Esto es una función de aptitud para el rendimiento. Las pruebas del pipeline tienen que ser más repetibles que realistas: el mismo entorno, los mismos datos, la misma carga, para que un cambio del 10% signifique una regresión real y no ruido.
Ejemplo práctico
Ejemplo práctico: un plan de capacidad para la salida a la venta de entradas
Este es un evento distinto y más grande que la salida a la venta de la Sección 9.3, con sus propias cifras. Una gira por estadios tiene tres noches de 60 000 asientos, 180 000 entradas en total, que salen a la venta a las 10:00 de un viernes. Los fans entran en una sala de espera virtual y se les admite en el flujo de compra a un ritmo controlado. Las pruebas de carga han medido el codo de cada instancia de la API en 520 solicitudes por segundo; el equipo planifica con 400 para mantener el p99 por debajo de 500 ms.
| Previsión de la demanda | 520 000 inscripciones en la preventa, de las que se espera que acuda un 75%: planificar para 400 000 fans en la sala de espera. Con una media de 2.5 entradas por pedido, 72 000 pedidos agotan la gira. |
|---|---|
| Restricción determinante | El límite acordado del proveedor de pagos es de 120 pagos por segundo. Si compra el 80% de los fans admitidos y se reserva un tercio del límite para reintentos y errores, se admiten 100 fans por segundo (6000 por minuto): 80 pagos por segundo. |
| Fans activos (ley de Little) | 100 fans/s × 240 s en el flujo de compra = 24 000 fans activos a la vez |
| Carga de la API | 100 fans/s × 25 solicitudes por recorrido = 2500 solicitudes/s; × 1.3 por la agrupación de las llamadas al mapa de asientos = 3250 solicitudes/s de carga de diseño |
| Instancias | 3250 / 400 = 8.1, así que 9 instancias; para sobrevivir a la pérdida de una de tres zonas, las 9 deben caber en dos zonas: 5 por zona × 3 = 15 instancias, arrancadas antes de las 09:30 |
| Base de datos de reservas de asientos | 1.5 intentos de reserva por fan = 150 escrituras/s frente a 600 escrituras/s medidas con p99 por debajo de 50 ms: 25% de utilización, pero hay que probar la contención en los asientos más populares |
| Sala de espera | 400 000 fans consultando cada 20 s = 20 000 solicitudes/s, servidas en el borde de la CDN y sin llegar nunca al nivel de la API |
| Resultado | 72 000 pedidos / 80 por segundo = 900 s: entradas agotadas en unos 15 minutos, tras admitir a unos 90 000 fans; la sala de espera debe avisar enseguida a todos los demás |
| Plazos | Límite de pagos confirmado con 3 semanas de antelación; cuota de la nube ampliada con 1 semana de antelación; prueba de carga a 1.5x (unas 4900 solicitudes/s), prueba de picos y prueba de resistencia de 2 horas con 2 semanas de antelación en un entorno del tamaño de producción |
El ritmo de admisión lo fija el recurso compartido más escaso, aquí el proveedor de pagos, no cuántos servidores puede permitirse el equipo; duplicar los servidores no vendería las entradas más rápido.
Aquí el autoescalado es una red de seguridad, no el plan: un salto de cero a 3250 solicitudes por segundo a las 10:00:00 llega más rápido de lo que tardan en arrancar las instancias.
Comprueba lo que has entendido
¿Por qué una prueba de carga con modelo cerrado tiende a subestimar los tiempos de respuesta de un sitio web público?
Porque sus usuarios virtuales esperan cada respuesta antes de enviar más, así que cuando el sistema se ralentiza la carga ofrecida baja, mientras que los visitantes reales siguen llegando y las colas crecen.
Una herramienta de prueba muestra un p99 de 2 ms y un máximo de 8 s, casi sin muestras entre ambos. ¿Qué deberías sospechar?
Omisión coordinada: probablemente la herramienta se detuvo junto con el sistema y no registró las muchas solicitudes que se habrían retrasado durante la pausa.
En el ejemplo de la salida a la venta, ¿por qué añadir instancias de la API no permite agotar las entradas más rápido?
Porque el límite de 120 pagos por segundo del proveedor de pagos, y no el nivel de la API, limita cuántos fans pueden comprar por segundo.
¿Qué pretende encontrar una prueba de resistencia (soak)?
Problemas que solo aparecen con el tiempo bajo una carga constante, como fugas de memoria o de conexiones, colas que crecen y discos que se llenan.
Fuentes y lecturas recomendadas
¿Tienes una pregunta sobre esta sección? ArchitectBot, el asistente de estudio con IA del curso, responde primero a partir del curso.
Pregunta: “Estamos preparando una gran salida a la venta de entradas. ¿Cómo calculo cuántas instancias necesitamos y qué pruebas de carga ejecutar antes?”