Site is under maintenance mode. Please wait few min!
Saltar al contenido

Cómo construir clases y definir objetos en Python 3

marzo 4, 2020

 

Introducción

evaluación comparativa es una práctica importante cuando se trata de analizar el rendimiento global de servidores de bases de datos. Es útil para la identificación de cuellos de botella, así como oportunidades de mejora dentro de esos sistemas.

Redis es un almacén de datos en memoria que se puede utilizar como base de datos, caché y intermediario de mensajes. Es compatible desde simples a complejas estructuras de datos incluyendo los hashes, cuerdas, conjuntos ordenados, mapas de bits, datos geoespaciales, entre otros tipos. En esta guía, vamos a demostrar cómo comparar el rendimiento de un servidor Redis corriendo en Ubuntu 18.04, usando unas pocas herramientas y métodos diferentes.

Requisitos previos

Para seguir esta guía, necesitará:

  • Un servidor de Ubuntu 18.04 con un usuario que no sea root sudo y un firewall básico configurado. Para hacer esto, puede seguir nuestra guía de configuración inicial del servidor de Ubuntu 18.04.
  • Redis instalado en su servidor, como se explica en nuestra guía sobre cómo instalar y Secure Redis en Ubuntu 18.04.

Nota: los comandos demuestra en este tutorial fueron ejecutados en un servidor dedicado Redis se ejecuta en un 4 GB digitalocean droplet.

Uso del Incluido Redis-Herramienta de referencia

Redis viene con una herramienta de referencia denominado Redis del índice de referencia. Este programa puede ser utilizado para simular un número arbitrario de clientes que se conectan al mismo tiempo y que realizan acciones en el servidor, midiendo el tiempo que toma para que las solicitudes para ser completado. Los datos resultantes le dará una idea del número promedio de peticiones que el servidor Redis es capaz de manejar por segundo.

La siguiente lista detalla algunas de las opciones de comandos comunes que se utilizan con Redis del índice de referencia:

  • -H: Redis anfitrión. Por defecto es 127.0.0.1.
  • -p: puerto Redis. Por defecto es 6379.
  • -a: Si el servidor requiere autenticación, puede utilizar esta opción para proporcionar la contraseña.
  • -c: Número de clientes (conexiones en paralelo) para simular. El valor por defecto es 50.
  • -n: ¿Cuántas solicitudes de hacer. Por defecto es 100000.
  • -d: Tamaño de los datos para los valores GET SET y, medido en bytes. Por defecto es 3.
  • -t: Ejecutar sólo un subconjunto de las pruebas. Por ejemplo, puede utilizar get -t, fijar puntos de referencia del rendimiento de los comandos GET y SET.
  • -P: Usar paralelismo para mejoras en el rendimiento.
  • -q: modo silencioso, muestra solamente las peticiones en promedio por segunda información.

Por ejemplo, si desea comprobar el número promedio de peticiones por segundo que su servidor local Redis puede manejar, puede utilizar:

redis-benchmark -q

  • ReDiS del índice de referencia -q

Usted recibirá una salida similar a esta, pero con diferentes números:

OutputPING_INLINE: 85178.88 requests per second
PING_BULK: 83056.48 requests per second
SET: 72202.16 requests per second
GET: 94607.38 requests per second
INCR: 84961.77 requests per second
LPUSH: 78988.94 requests per second
RPUSH: 88652.48 requests per second
LPOP: 87950.75 requests per second
RPOP: 80971.66 requests per second
SADD: 80192.46 requests per second
HSET: 84317.03 requests per second
SPOP: 78125.00 requests per second
LPUSH (needed to benchmark LRANGE): 84175.09 requests per second
LRANGE_100 (first 100 elements): 52383.45 requests per second
LRANGE_300 (first 300 elements): 21547.08 requests per second
LRANGE_500 (first 450 elements): 14471.78 requests per second
LRANGE_600 (first 600 elements): 9383.50 requests per second
MSET (10 keys): 71225.07 requests per second

también puede limitar las pruebas a un subconjunto de comandos de su elección mediante el parámetro -t. A continuación se muestra los promedios de mando para el GET y comandos SET solamente:

redis-benchmark -t set,get -q

  • ReDiS del índice de referencia conjunto -t, conseguir q

OutputSET: 76687.12 requests per second
GET: 82576.38 requests per second

las opciones por defecto utilizará 50 conexiones en paralelo para crear 100000 peticiones al servidor Redis. Si desea aumentar el número de conexiones en paralelo para simular un pico en el uso, puede utilizar la opción -c para ello:

redis-benchmark -t set,get -q -c 1000

  • ReDiS del índice de referencia conjunto -t, -c get -q 1000

Debido a que esta voluntad utilizar 1000 conexiones simultáneas lugar del predeterminado 50, debe esperar una disminución en el rendimiento:

OutputSET: 69444.45 requests per second
GET: 70821.53 requests per second

Si desea información detallada en la salida, se puede quitar la opción -q. El siguiente comando utilizará 100 conexiones en paralelo para funcionar 1000000 peticiones establecidas en el servidor:

redis-benchmark -t set -c 100 -n 1000000

  • ReDiS del índice de referencia set -T -c -n 100 1000000

Usted recibirá una salida similar a la siguiente:

Output====== SET ======
1000000 requests completed in 11.29 seconds
100 parallel clients
3 bytes payload
keep alive: 1

95.22% <= 1 milliseconds 98.97% <= 2 milliseconds 99.86% <= 3 milliseconds 99.95% <= 4 milliseconds 99.99% <= 5 milliseconds 99.99% <= 6 milliseconds 100.00% <= 7 milliseconds 100.00% <= 8 milliseconds 100.00% <= 8 milliseconds 88605.35 requests per second

Los ajustes por defecto utilizar 3 bytes para los valores clave. Puede cambiar esto con la opción -d. El siguiente comando GET y SET voluntad referencia comandos usando valores clave de 1 MB:

redis-benchmark -t set,get -d 1000000 -n 1000 -q

  • ReDiS del índice de referencia -t set, get -d 1000000 -n 1000 -q

Dado que el servidor está funcionando con una carga mucho más grande esta vez, se espera una disminución significativa de rendimiento:

OutputSET: 1642.04 requests per second
GET: 822.37 requests per second

es importante darse cuenta de que a pesar de estos números son útiles como una forma rápida de evaluar el desempeño de una instancia Redis, no representan el máximo rendimiento de una instancia Redis puede sostener. Mediante el uso de la canalización , las aplicaciones pueden enviar varios comandos a la vez con el fin de mejorar el número de solicitudes por segundo que el servidor puede manejar. Con Redis del índice de referencia, puede utilizar la opción -P para simular aplicaciones del mundo real que hacen uso de esta característica Redis.

para comparar la diferencia, primero ejecute el comando Redis del índice de referencia con valores por defecto y sin canalización, para las pruebas GET y SET:

redis-benchmark -t get,set -q

  • ReDiS del índice de referencia get -T, juego -q

OutputSET: 86281.27 requests per second
GET: 89847.26 requests per second

El siguiente comando ejecutar las mismas pruebas, pero oleoducto 8 comandos juntos:

redis-benchmark -t get,set -q -P 8

  • ReDiS del índice de referencia get -T, -P conjunto -q 8

OutputSET: 653594.81 requests per second
GET: 793650.75 requests per second

Como se puede ver en la salida, hay una sustancial mejora en el rendimiento con el uso de la canalización.

Comprobación de latencia con Redis-CLI

Si desea una simple medición del tiempo medio de una solicitud tarda en recibir una respuesta, puede utilizar el cliente Redis para comprobar la latencia media servidor. En el contexto de Redis, la latencia es una medida de cuánto tiempo tarda un comando ping para recibir una respuesta del servidor.

El siguiente comando mostrará las estadísticas de latencia en tiempo real para su servidor Redis:

redis-cli --latency

  • Redis-cli --latency

Usted obtendrá una salida similar a esta, mostrando un número creciente de muestras y una latencia variable promedio :

Outputmin: 0, max: 1, avg: 0.18 (970 samples)

Este comando seguir funcionando indefinidamente. Puede detenerlo con un CTRL + C.

para monitorear latencia durante un cierto período de tiempo, se puede utilizar:

redis-cli --latency-history

  • Redis-cli---latency historia

Esto hará un seguimiento de latencia promedios en el tiempo, con un intervalo configurable que se establece en 15 segundos defecto. Va a obtener una salida similar a la siguiente:

Outputmin: 0, max: 1, avg: 0.18 (1449 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.16 (1449 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.17 (1449 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.17 (1444 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.17 (1446 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.17 (1449 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.16 (1444 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.17 (1445 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.16 (1445 samples) -- 15.01 seconds range
...

Dado que el servidor Redis en nuestro ejemplo está inactivo, no hay mucha variación entre muestras de latencia. Si usted tiene un pico en el uso, sin embargo, esto debería reflejarse como un aumento en la latencia dentro de los resultados.

Si desea medir la latencia sistema única, puede utilizar --intrinsic latencia para eso. La latencia intrínseca es inherente al medio ambiente, dependiendo de factores tales como hardware, kernel, los vecinos de servidor y de otros factores que no son controlados por Redis.

Se puede ver la latencia intrínseca como una línea de base para el rendimiento general Redis. El siguiente comando comprobará la latencia del sistema intrínseco, la ejecución de un ensayo durante 30 segundos:

redis-cli --intrinsic-latency 30

  • Redis-cli --intrinsic latencia 30

Debería obtener una salida similar a la siguiente:

Output…

498723744 total runs (avg latency: 0.0602 microseconds / 60.15 nanoseconds per run).
Worst run took 22975x longer than the average latency.

Comparando ambas pruebas de latencia puede ser útil para la identificación de hardware o del sistema cuellos de botella que podrían afectar al rendimiento del servidor Redis. Teniendo en cuenta la latencia total para una solicitud a nuestro servidor ejemplo tiene un promedio de 0,18 microsegundos para completar, una latencia intrínseca de medios 0.06 microsegundos que un tercio del tiempo total de la petición se gasta por el sistema en los procesos que no son controlados por Redis.

Uso de la Herramienta Benchmark Memtier

Memtier es una producción de alto herramienta de referencia para Redis y Memcached creado por Redis Labs. Aunque es muy similar a la del índice de referencia Redis en varios aspectos, Memtier tiene varias opciones de configuración que se pueden ajustar a una mejor emular el tipo de carga que se podría esperar en su servidor Redis, además de apoyo a las agrupaciones oferta.

Para obtener Memtier instalado en su servidor, tendrá que compilar el software de la fuente. En primer lugar, instalar las dependencias necesarias para compilar el código:

sudo apt-get install build-essential autoconf automake libpcre3-dev libevent-dev pkg-config zlib1g-dev

  • sudo apt-get install build-essential pkg-config autoconf automake libpcre3-dev libevent-dev zlib1g-dev

A continuación, vaya a su directorio y el clon del memtier_benchmark proyecto desde su repositorio Github:

cd
git clone https://github.com/RedisLabs/memtier_benchmark.git

  • cd
  • git clone https://github.com/RedisLabs/memtier_benchmark.git

Vaya al directorio del proyecto y ejecutar el comando autoreconf para generar los scripts de configuración de la aplicación:

cd memtier_benchmark
autoreconf -ivf

  • cd memtier_benchmark
  • autoreconf -ivf

Ejecutar el script de configuración con el fin de generar los artefactos de aplicación necesarios para compilar:

./configure

  • ./configure

Ahora ejecute make para compilar la aplicación:

make

  • hacer

Una vez finalizada la construcción, se puede probar el ejecutable con:

./memtier_benchmark --version

  • ./m emtier_benchmark --version

Esto le dará el siguiente resultado:

Outputmemtier_benchmark 1.2.17
Copyright (C) 2011-2017 Redis Labs Ltd.
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License .
There is NO WARRANTY, to the extent permitted by law.

La siguiente lista contiene algunas de las opciones más comunes que se utilizan con el comando memtier_benchmark:

  • -s: host de servidor. Por defecto es localhost.
  • -p: Puerto del servidor. Por defecto es 6379.
  • -a: autenticar las solicitudes de uso de la contraseña proporcionada.
  • -n: Número de solicitudes por cliente (por defecto es 10000).
  • -c: Número de clientes (por defecto es 50).
  • -t: Número de hilos (por defecto es 4).
  • --pipeline: Habilitar la canalización.
  • --ratio: Relación entre el SET y GET comandos, por defecto es de 1:10.
  • --hide histograma: Oculta la información detallada de salida.

mayoría de estas opciones son muy similares a las opciones presentes en Redis del índice de referencia, pero Memtier prueba el rendimiento de una manera diferente. Para simular mejor los entornos del mundo real comunes, el punto de referencia por defecto realizado por memtier_benchmark pondrá a prueba para obtener y establecer las solicitudes solamente, en una proporción de 1 a 10. Con 10 operaciones GET para cada operación SET en la prueba, este arreglo es más representativo de una aplicación web común usando Redis como una base de datos o caché. Se puede ajustar el valor de la relación con la opción --ratio.

Las carreras siguiente comando memtier_benchmark con la configuración predeterminada, al tiempo que proporciona sólo información de salida de alto nivel:

./memtier_benchmark --hide-histogram

  • ./memtier_benchmark --hide histograma

Nota : si ha configurado el servidor Redis para requerir autenticación, usted debe proporcionar la opción -a junto con su contraseña Redis al comando memtier_benchmark:

./memtier_benchmark --hide-histogram -a your_redis_password

  • ./memtier_benchmark --hide histograma -a your_redis_password

usted verá una salida similar a la siguiente:

Output...

4 Threads
50 Connections per thread
10000 Requests per client

ALL STATS
=========================================================================
Type Ops/sec Hits/sec Misses/sec Latency KB/sec
-------------------------------------------------------------------------
Sets 8258.50 --- --- 2.19800 636.05
Gets 82494.28 41483.10 41011.18 2.19800 4590.88
Waits 0.00 --- --- 0.00000 ---
Totals 90752.78 41483.10 41011.18 2.19800 5226.93

acuerdo a esta racha de memtier_benchmark, nuestro servidor Redis puede ejecutar alrededor de 90 mil operaciones por segundo en una proporción de 1:10 SET / GET. Es importante señalar que cada herramienta de referencia tiene su propio algoritmo para pruebas de rendimiento y presentación de datos

Se. Por esa razón, es normal tener resultados ligeramente diferentes en el mismo servidor, incluso cuando se utiliza una configuración similar.

Conclusión

En esta guía, hemos demostrado cómo llevar a cabo pruebas de rendimiento en el servidor Redis utilizando dos herramientas distintas: los incluidos Redis del índice de referencia, y la herramienta desarrollada por memtier_benchmark Redis Labs. También hemos visto cómo comprobar si la latencia del servidor usando Redis-cli. Sobre la base de los datos obtenidos a partir de estas pruebas, usted tendrá una mejor comprensión de lo que debe esperar de su servidor Redis en términos de rendimiento, y cuáles son los cuellos de botella de su configuración actual.