Entonces, antes de invertir mucho tiempo y energía en una nube en particular, es importante comprender las características generales de rendimiento de MongoDB en esa nube. Buscamos esta información y no la encontramos, así que decidimos recopilarla para usted como parte de nuestra serie de presentaciones.
La plataforma de referencia
Decidimos comparar AWS, Azure y DigitalOcean para esta prueba. Se eligieron dos conjuntos diferentes de configuraciones. La siguiente tabla resume las configuraciones de la máquina:
Proveedor | Región | ScaleGrid Medium* (Núcleos/RAM/Disco/Prov IOPS) | ScaleGrid grande* (núcleos/RAM/disco/IOPS de prueba) |
AWS | Este de EE. UU. | 1/3,75 GB/60 GB/300 | 2/7,5 GB/120 GB/500 |
Azul | Este de EE. UU. | 2/3,5 GB/60 GB/hasta 2000 | 4/7GB/120GB/hasta 4000 |
Océano Digital | Nueva York 3 | 2/4 GB/25 GB/SSD** | 4/8GB/35GB/SSD** |
** DigitalOcean tiene SSD conectados directamente.
Las pruebas comparativas de rendimiento se ejecutaron con YCSB Workload A (carga de trabajo pesada de actualización). Hablamos sobre YCSB, su configuración y sus cargas de trabajo en una publicación muy detallada el mes pasado.
- Todas las pruebas comparativas se realizaron en una configuración independiente
- Para ambas configuraciones, Se insertaron 5 millones de registros con varios niveles de carga del servidor (según la cantidad de subprocesos del cliente).
- Para la configuración Media, la Carga de trabajo A se ejecutó con valores predeterminados (50 % de actualización, 50 % de lectura) con un recuento de operaciones de 5 millones en varios niveles de carga del servidor.
- Para la configuración grande, la carga de trabajo A se ejecutó con valores predeterminados (50 % de actualización, 50 % de lectura) con un recuento de operaciones de 10 millones en varios niveles de carga del servidor.
Resultados
Discutiremos los resultados en función del rendimiento de inserción y las características de rendimiento/latencia bajo una gran carga de trabajo de actualización.
Insertar rendimiento
Instancias medianas
Las características de rendimiento/latencia para la inserción de registros de 5 millones en la configuración media:
Instancias grandes
Las características de rendimiento/latencia para la inserción de registros de 5 millones en la configuración grande:
Actualizar rendimiento
Instancias medianas
Las características de rendimiento/latencia para 5 millones de operaciones de escritura/actualización en la configuración del medio:
La prueba se ejecutó con 32 subprocesos solo para DigitalOcean. AWS y Azure eran revestimientos planos en 16 subprocesos. Sin embargo, DigitalOcean da la impresión de escalar linealmente hasta 32 subprocesos.
Instancias grandes
Las características de rendimiento/latencia para 10 millones de operaciones de escritura/actualización en la configuración grande:
Análisis general
- Como era de esperar, MongoDB en DigitalOcean tiene características consistentes de alto rendimiento/baja latencia en todo momento y supera a los demás durante la fase de inserción, extrayendo el máximo jugo de sus unidades SSD locales. Curiosamente, aunque funciona muy bien durante la fase de lectura/actualización, otros proveedores le dan bastante competencia, especialmente cuando aumenta la carga del servidor. Claramente, AWS/Azure están utilizando un almacenamiento en red de rendimiento mucho mayor.
- Para obtener un mejor rendimiento del disco de AWS, el usuario puede usar tamaños de disco más grandes o asignar más IOPS aprovisionadas.
- En instancias medianas, MongoDB en Azure parece funcionar mucho mejor que AWS de manera constante, tanto durante la fase de inserción como de actualización/lectura. Esto fue sorprendente. El hardware está bastante igualado. En instancias grandes, el rendimiento de AWS es notablemente mejor que el de Azure.
- Tanto AWS como Azure se degradan bastante bien en latencias a medida que aumenta la carga. Azure parece tener una curva de degradación de latencia bastante buena.
- Otro aspecto interesante del rendimiento de MongoDB en AWS es lo "plano" que es:parece degradarse con gracia incluso en una escala logarítmica.
- Según los números de latencia, parece que el punto ideal, desde el punto de vista de la carga, para instancias medianas y grandes es de 8 y 16 subprocesos, respectivamente.