
Application Autoscaler agrega o elimina automáticamente instancias/nodos de aplicaciones en función de la carga de trabajo. Esto se puede hacer definiendo una política de escalado automático que contenga reglas de escalado.
En esta guía, demostraremos cómo se puede utilizar la función de métricas personalizadas (lanzada en app-autoscaler versión 3.0.0) utilizando la autenticación mTLS,
Analicemos rápidamente las métricas disponibles que admite el escalador automático de aplicaciones (a partir de versión 9.3.0)
Métrico | Tipo | Nombre de la métrica técnica |
Memoria usada | estándar | memoria usada |
Utilización de memoria | estándar | memoryutil |
Utilización de la CPU | estándar | UPC |
Rendimiento | estándar | rendimiento |
Tiempo de respuesta | estándar | tiempo de respuesta |
Métricas personalizadas | usuario definido | arbitrario |
Referirse a Guía del usuario del escalador automático de aplicaciones para obtener más información sobre las métricas |
Además de las métricas estándar, que en su mayoría están disponibles en el contenedor (donde se ejecuta la aplicación), el escalador automático de aplicaciones también proporciona aplicaciones para escalar horizontal o verticalmente en función de los tipos de métricas definidas por el usuario, también conocido como. Métricas personalizadas. Esto hace posible mejorar el rendimiento de la aplicación.
Usaremos una aplicación Golang de muestra, implementada en Cloud Foundry, que usa la función de métricas personalizadas del escalador automático de aplicaciones mediante la autenticación mTLS. La aplicación se puede descargar desde la repositorio de GitHub.
Por ejemplo, la aplicación debe escalar horizontalmente (agregar una instancia más) si el servidor está demasiado ocupado (código de estado HTTP 503) y luego escalar nuevamente (eliminar la instancia agregada) si el servicio responde con HTTP 200 (estado normal).
Mutual Transport Layer Security (mTLS) es un mecanismo de autenticación basado en certificados, en el que tanto el cliente como el servidor se comunican mediante el intercambio de certificados digitales x.509. Esto permite la confianza y la comunicación segura entre ellos.
Para enviar métricas personalizadas mediante una aplicación cf al servicio del escalador automático de aplicaciones mediante mTLS, los siguientes son los pasos de alto nivel que deben realizarse en la aplicación cf
Los pasos anteriores ya están implementados en nuestra aplicación Golang de muestra. Ahora tenemos que definir nuestra política de escalado que utiliza Application Autoscaler para realizar operaciones de escalado.
Política de escalado
Nuestra aplicación Golang de muestra debería escalar horizontalmente (agregar una instancia más) si el servidor está demasiado ocupado. (Código de estado HTTP 503) y luego escalar (eliminar la instancia agregada) si el servicio responde con HTTP 200.
requisitos previos
{
"instance_min_count": 1,
"instance_max_count": 2,
"scaling_rules": [
{
"metric_type": "tooManyRequestCustomMetrics",
"breach_duration_secs": 60,
"threshold": 200,
"operator": ">",
"cool_down_secs": 60,
"adjustment": "+1"
},
{
"metric_type": "tooManyRequestCustomMetrics",
"breach_duration_secs": 60,
"threshold": 200,
"operator": "<",
"cool_down_secs": 60,
"adjustment": "-1"
}
]
}
Comprendamos la política de escalado del escalador automático de aplicaciones
Inicie sesión en cf y apunte a la organización y el espacio de cf, donde desea implementar la aplicación
cf target -o ak_autoscaler_dev -s ak-test-space
Primero debe clonar el repositorio (si aún no lo ha hecho)
# Clone the Golang Application git repository
git clone https://github.com/SAP-samples/cf-autoscaler-custom-metrics-mtls.git
# Navigate to the directory
cd golang-autoscaler-custom-metrics
# Build application
make build
Empujemos una aplicación a Cloud Foundry. El siguiente manifiesto de aplicación se utiliza disponible aquí
---
applications:
- name: golang-autoscaler-custom-metrics
instances: 1
memory: 128M
disk_quota: 128M
stack: cflinuxfs4
buildpacks:
- binary_buildpack
command: ./golang-autoscaler-custom-metrics
cf push --no-start -f deploy/app-manifest.yml -p deploy/build
Noté que aún no hemos iniciado una aplicación. Esto se debe a que la aplicación necesita una instancia de servicio de escalador automático de aplicaciones. Esto se hace en el siguiente paso.
Salida: cf empujar una aplicación
Ahora, queremos usar el servicio Autoscaler. Entonces, creamos una instancia de servicio CF de tipo escalador automático
cf create-service autoscaler standard ak-test-autoscaler
Comandos | Descripción |
escalador automático | Nombre del servicio (disponible como cf marketplace) |
estándar | Tipo de plan de servicio de Autoscaler |
ak-test-autoscaler | Nombre de la instancia de servicio |
salida: crear una instancia de servicio
Vincule la instancia de servicio ak-test-autoscaler creada con la aplicación Golang y asigne la política (definida anteriormente) como un archivo
cf bind-service golang-autoscaler-custom-metrics \
ak-test-autoscaler \
-c deploy/custom-metrics-policy.json
La salida de la consola sugerirá volver a organizar golang-autoscaler-custom-metrics. Esto se debe a que cuando un servicio está vinculado a una aplicación existente, la variable de entorno VCAP_SERVICES se completa con la información, por ejemplo, información de credenciales de ese servicio.
salida: servicio de enlace cf
Tan pronto como vinculamos el servicio a la aplicación Golang, podemos verificar el servicio Autoscaler vinculado.
Además, Complemento de escalador automático se puede utilizar para adjuntar la política. Si no ha proporcionado la póliza con la servicio de enlace cf comando, lo siguiente también se puede usar para adjuntar la política a la aplicación.
cf attach-autoscaling-policy \
golang-autoscaler-custom-metrics \
deploy/custom-metrics-policy.json
Echemos un vistazo a la variable de entorno VCAP_SERVICES
$ cf env golang-autoscaler-custom-metrics
salida: aplicación cf env
En el resultado, podemos ver la métrica personalizada mtls_url en la sección de credenciales. Nuestra aplicación Golang usa mtls_url para enviar la métrica personalizada tooManyRequestCustomMetrics al servicio Autoscaler.
Al usar mtls_url, la aplicación de Golang usa la autenticación basada en certificados (mTLS), proporcionada por la función Métricas personalizadas de Autoscaler.
Inicie la aplicación Golang para considerar cambios vinculantes
cf start golang-autoscaler-custom-metrics
salida: aplicación de inicio cf
Ahora, nuestra aplicación Golang se ejecuta con una instancia. Podemos realizar el escalado a través del servicio Autoscaler que está esperando recibir métricas personalizadas de la aplicación Golang.
Ahora tenemos que enviar métricas personalizadas a Autoscaler usando el punto final HTTP GET (proporcionado por la aplicación).
– Grep la ruta de la aplicación
cf app golang-autoscaler-custom-metrics | grep routes
– Con Postman/Curl, realice lo siguiente
$ curl https://golang-autoscaler-custom-metrics.cfapps.sap.hana.ondemand.com/busy/201
{"message":"I am busy with value 201.000000"}%
Mediante la ejecución cf app golang-autoscaler-métricas personalizadas nuevamente, ahora tenemos dos instancias de nuestra aplicación Golang (después de 60-80 segundos)
salida: escalar horizontalmente (2 instancias)
Ahora, queremos que nuestra aplicación se amplíe si las solicitudes están por debajo de 200 (umbral). Del mismo modo, también tenemos un punto final HTTP GET para disminuir la instancia a través de curl/postman (lo que prefiera)
$ curl https://golang-autoscaler-custom-metrics.cfapps.sap.hana.ondemand.com/not-busy/190
{"message":"I am not busy with value 190.000000"}%
Ahora tenemos una instancia de nuestra aplicación Golang según sea necesario
salida: escalar en (1 Instancia)
A veces es importante saber cómo y cuándo suceden los eventos de escalado. Esto se puede averiguar utilizando las siguientes tres formas
Complemento CLI de escalador automático de aplicaciones
Instale el complemento — cf install-plugin -r CF-Community app-autoscaler-plugin
$ cf autoscaling-history golang-autoscaler-custom-metrics
Retrieving scaling event history for app golang-autoscaler-custom-metrics...
Scaling Type Status Instance Changes Time Action Error
dynamic succeeded 2->1 2022-12-30T16:38:08+01:00 -1 instance(s) because tooManyRequestCustomMetrics <= 200test-unit for 60 seconds
dynamic succeeded 1->2 2022-12-30T16:18:08+01:00 +1 instance(s) because tooManyRequestCustomMetrics >= 200test-unit for 60 seconds
Eventos de la aplicación CF
Cloud Foundry proporciona visualización de eventos de una aplicación. Los eventos de la aplicación se pueden crear, cargar, escalar, etc. Para obtener más información sobre las capacidades de auditoría en Cloud Foundry, consulte Evento de auditoría en la documentación de Cloud Foundry.
Sin embargo, por el momento solo nos interesa ver los eventos de escalado de aplicaciones.
cf events golang-autoscaler-custom-metrics
Getting events for app golang-autoscaler-custom-metrics in org ak_autoscaler_dev / space ak-test-space as ak-user@abc.com...
time event actor description
2022-12-30T16:38:08.00+0100 audit.app.process.scale instances: 1
2022-12-30T16:18:08.00+0100 audit.app.process.scale instances: 2
Panel de aplicaciones del escalador automático
Autoscaler Application Dashboard es una aplicación CF disponible para los clientes de SAP que viene lista para usar cuando utiliza el servicio Application Autoscaler.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073