Recomendaciones para Puesta en Producción de MongoDB

(Gracias a Ramón he publicado este post que hasta ahora tenía entre papeles y huecos de memoria swappeada 🙂 )

MongoDB se ha ganado un puesto entre las principales bases de datos NoSQL open-source (algunos la conocen como el MySQL de las bases de datos NoSQL).

De cara a ponerlo en Producción es importante tener en cuenta un conjunto de recomendaciones, veamos las más importantes:

· Usar la última versión estable (parece de Perogrullo, pero en este caso es especialmente importante por las mejoras continuas a nivel de rendimiento y estabilidad). Actualmente es la versión 2.4.6.

· Usar versión de 64 bits: las versiones de 32 bits sólo permiten almacenar 2 Gbs de información entre otras limitaciones (la versión de 64 bits no tiene limitaciones en almacenamiento).

· Activar Journaling: que asegura que MongoDB puede recuperar las operaciones de escritura en un crash o fallo.

· MongoDB está pensada para commodity Hardware (procesadores X86,x86_64). Algunas recomendaciones en cuanto a Hardware:

· MongoDB no es intensivo en cuanto CPU (salvo que uses MapReduce)

· MongoDB funciona mejor cuanta más memoria tiene, así que es mejor invertir en más RAMque en más CPU. Con el sharding se puede mejorar el data set que está en memoria.

· MongoDB funciona bien con Discos SATA commodity, (Aunque evidente) MongoDB se beneficia del uso de SSD (Solid State Disk)

SATA II – 100-200 IOPS
15K SAS – 300-400 IOPS
SSD – 7,000-8,000 IOPS (read) 19,000-20,000 IOPS (write)

· Almacenamiento remoto afecta el rendimiento (leer más). No se recomienda el uso de NFS

· No usar Sistemas con NUMA (Non-Uniform Access Memory) pueden crear problemas de rendimiento. Se puede desactivar.

· Importante asignar espacio de swap

· Se recomienda RAID-10, se debe evitar RAID-0 y RAID 5 y 6 dan peor rendimiento

· En cuanto a Linux se recomienda Kernel 2.6.36 o superior y File System Ext4 y XFS. 10gen recomienda CentOS 6.X 64-bit.

· En cuanto a Entornos Virtuales MongoDB funciona en EC2 (existen AMIS ya creadas), VMWare

· En cuanto a Backups de MongoDB se puede optar por hacer dumps (con mongodump) que no permiten capturar una copia completa del sistema en funcionamiento (no incluyen contenido de índices) o hacer un snapshot del filesystem (block level backup) que representa un momento del sistema en ejecución. El funcionamiento con clusters shardes es más complejo (ver más).

· En cuanto a Replicación: al menos deben existir 3 nodos en cualquier despliegue MongoDB, la configuración más común es replicar con 3 nodos en un despliegue 2×1 (2 nodos primarios en un Data Center y 1 Servidor Backup en otro DataCenter)

· Sharding: apropiado para grandes data-sets activos, ya que permite particionar un data set entre varios nodos. MongoDB puede distribuir automáticamente los datos entre nodos en el cluster o hacerlo por una shard key.

· Modo Write-Safety: MongoDB soporta varios modelos, se debe elegir entre el modelo que prima la integridad de datos o el rendimiento:

None: estrategia de escritura no Segura. El de más rendimiento. En ciertos casos de caída de un nodo pueden perderse datos. También pueden producirse inconsistencias de lectura. Es el modo más inseguro y sólo debe usarse cuando prima el rendimiento sobre la integridad.

Normal: es el modo por defecto. Escritura no bloqueante y posibilidad de perder datos aunque remota.

Safe: bloquea escritura hasta que MongoDB hace el ack de que ha recibido la petición de escritura, no bloquea hasta que se escribe. Asegura consistencia en lecturas y un mayor nivel de integridad.

Journal Safe: proporciona capacidad de recuperación. MongoDB hace el SCK después de escribir en el Journal.

Fsync: provee el mayor nivel de integridad, bloquea hasta que se hace la escritura física. Sólo debe usarse en casos donde la integridad es crítica.

· Se recomienda usar herramientas para el testing del despliegue: 10gen suministra herramientas como el benchrun que devuelve información de interés o el mongostat

Si esto os ha sabido a poco y queréis profundizar más en el amplio mundo de MongoDB os recomiendo este whitepaper de 10gen:

Si sois más de vídeos empezad por este

Una propuesta base de Hardware para nuestro Entorno de Producción MongoDB podría ser esta:

Que se complementa con esta :):

amCharts: Otra librería de Charts Javascript

amChartses una (otra) librería muy completa para hacer chartings.

Soporta un gran número de gráficos: Column, Bar, Line, Area, Step, Step without risers, Smoothed line, Candlestick, OHLC, Pie/Donut, Radar/Polar, XY/Scatter/Bubble, Bullet, Funnel/Pyramid, Gauges.

Podéis ver en sus numerosos ejemplos (http://www.amcharts.com/javascript-charts/) lo que permite y lo sencillo que es usarlo:

Por ejemplo (código):

amCharts es una librería independiente que no requiere terceras librerías. Es una librería de pago, aunque el precio es muy asequible como para que esto sea un problema: