Tengo una aplicación que constantemente envía datos a MongoDB. La instancia de MongoDB se ejecuta con 2 réplicas, cada una con un volumen de EBS gp2 de 3 TB.
Como se puede observar en el siguiente gráfico de
irate(node_disk_reads_completed_total{}[1m])
irate(node_disk_writes_completed_total{}[1m])
El rendimiento de lectura es lento y constante, lo cual es normal, pero la escritura parece tener un rendimiento inferior.
Incluso en los picos nunca alcanzamos los 3IOPS/GB teóricos * 3000 GB = 9k IOPS. La aplicación en sí pasa la mayor parte del tiempo bombeando más y más datos a la base de datos, por lo que desde la perspectiva de la aplicación, la base de datos es el claro cuello de botella.
Entonces, ¿por qué no puede ir más rápido? ¿Y por qué hay tanta ola? Esperaría que escribir en WAL proporcione una fuente constante de actividad de escritura y cosas como la sincronización periódica al disco en realidad no causarían patrones tan extremos de subida y bajada.
¿Podría ser que la sincronización entre réplicas esté provocando pausas en el rendimiento? Pero estoy usando la preocupación de escritura predeterminada, que debería ser w: 1, j: true
y no requerir esperar réplicas.
¿Algo más que me pueda faltar?