sql >> Base de Datos >  >> NoSQL >> MongoDB

Mejores prácticas para ejecutar MongoDB en un clúster

La implementación de una base de datos en clúster es una cosa, pero la forma en que mantiene su DBM mientras está en el clúster puede ser una gran tarea para un servicio constante de sus aplicaciones. Uno debe tener una actualización frecuente sobre el estado de la base de datos, especialmente las métricas más importantes para tener una idea de qué actualizar o más bien modificar como una forma de evitar cualquier cuello de botella que pueda surgir.

Hay muchas consideraciones con respecto a MongoDB que se deben tener en cuenta, especialmente el hecho de que su instalación y ejecución son muy fáciles. Las posibilidades de descuidar las prácticas básicas de administración de bases de datos son altas.

Muchas veces, los desarrolladores no tienen en cuenta el crecimiento futuro y el mayor uso de la base de datos, lo que en consecuencia provoca el bloqueo de la aplicación o los datos con algunos problemas de integridad además de ser inconsistentes.

En este artículo, discutiremos algunas de las mejores prácticas que se deben emplear para el clúster MongoDB para un rendimiento eficiente de sus aplicaciones. Algunos de los factores que uno debe considerar incluyen...

  1. Actualización a la última versión
  2. Motor de almacenamiento adecuado
  3. Asignación de recursos de hardware
  4. Replicación y fragmentación
  5. Nunca cambie el archivo de configuración del servidor
  6. Buena estrategia de seguridad

Actualización a la última versión

He trabajado con MongoDB desde versiones anteriores a la 3.2 y, para ser honesto, las cosas no fueron fáciles en ese momento. Con grandes desarrollos, errores corregidos y funciones recién introducidas, le aconsejaré que siempre actualice su base de datos a la última versión. Por ejemplo, la introducción del marco de agregación tuvo un mejor impacto en el rendimiento en lugar de depender del concepto Map-Reduce que ya existía. Con la última versión 4.0, uno tiene ahora la capacidad de utilizar la función de transacciones de documentos múltiples que generalmente mejora las operaciones de rendimiento. La última versión también tiene algunos operadores de conversión de nuevos tipos adicionales, como $toInt, $toString, $trim y $toBool. Estos operadores serán de gran ayuda en la validación de los datos, por lo tanto, crearán cierta sensación de consistencia en los datos. Al actualizar, consulte los documentos para evitar cometer pequeños errores que pueden convertirse en erróneos.

Elija un motor de almacenamiento adecuado

MongoDB admite 3 motores de almacenamiento por ahora, es decir:motores de almacenamiento WiredTiger, In-Memory y MMAPv1. Cada uno de estos motores de almacenamiento tiene ventajas y limitaciones sobre los demás, pero su elección dependerá de la especificación de su aplicación y la funcionalidad principal del motor. Sin embargo, personalmente prefiero el motor de almacenamiento WiredTiger y lo recomendaría para quien no esté seguro de cuál usar. El motor de almacenamiento WiredTiger es adecuado para la mayoría de las cargas de trabajo, proporciona un modelo de simultaneidad a nivel de documento, puntos de control y compresión.

Algunas de las consideraciones con respecto a las selecciones del motor de almacenamiento dependen de estos aspectos:

  1. Transacciones y atomicidad: provisión de datos durante una inserción o actualización que se compromete solo cuando todas las condiciones y etapas en la aplicación se han ejecutado con éxito. Por lo tanto, las operaciones se agrupan en una unidad inmutable. Con esto en su lugar, se pueden admitir transacciones de documentos múltiples como se ve en la última versión de MongoDB para el motor de almacenamiento WiredTiger.
  2. Tipo de bloqueo: es una estrategia de control sobre el acceso o actualización de la información. Durante la duración del bloqueo, ninguna otra operación puede cambiar los datos del objeto seleccionado hasta que se haya ejecutado la operación actual. En consecuencia, las consultas se ven afectadas en este momento, por lo que es importante monitorearlas y reducir la mayor parte del mecanismo de bloqueo asegurándose de seleccionar el motor de almacenamiento más apropiado para sus datos.
  3. Indización: Los motores de almacenamiento en MongoDB proporcionan diferentes estrategias de indexación según los tipos de datos que esté almacenando. La eficiencia de esa estructura de datos debe ser bastante amigable con su carga de trabajo y uno puede determinar esto considerando que cada índice adicional tiene una sobrecarga de rendimiento. Las estructuras de datos optimizadas para escritura tienen una sobrecarga más baja para cada índice en un entorno de aplicación de alta inserción que las estructuras de datos optimizadas para escritura no. Esto será un revés importante, especialmente cuando se trata de una gran cantidad de índices y la selección de un motor de almacenamiento inadecuado. Por lo tanto, elegir un motor de almacenamiento adecuado puede tener un impacto dramático.

Asignación de recursos de hardware

A medida que los nuevos usuarios inician sesión en su aplicación, la base de datos crece con el tiempo y se introducen nuevos fragmentos. Sin embargo, no puede confiar en los recursos de hardware que estableció durante la etapa de implementación. Habrá un aumento correspondiente en la carga de trabajo y, por lo tanto, requerirá una mayor provisión de recursos de procesamiento, como CPU y RAM, para admitir sus grandes clústeres de datos. Esto a menudo se refiere a la planificación de la capacidad en MongoDB. Las mejores prácticas en torno a la planificación de la capacidad incluyen:

  • Supervise su base de datos constantemente y ajústela de acuerdo con las expectativas. Como se mencionó anteriormente, un aumento en la cantidad de usuarios generará más consultas en adelante con un conjunto de cargas de trabajo mayor, especialmente si emplea índices. Puede comenzar a experimentar estos impactos en el extremo de la aplicación cuando comienza a registrar un cambio en el porcentaje de escrituras versus lecturas con el tiempo. Por lo tanto, deberá reconfigurar sus configuraciones de hardware para solucionar este problema. Utilice mongoperf y la herramienta MMS para detectar cambios en los parámetros de rendimiento del sistema.
  • Documente todos sus requisitos de rendimiento por adelantado. Cuando encuentre el mismo problema, al menos tendrá un punto de referencia que le ahorrará algo de tiempo. Su grabación debe incluir el tamaño de los datos que desea almacenar, el análisis de las consultas en términos de latencia y la cantidad de datos a los que le gustaría acceder en un momento dado. En el entorno de producción, debe determinar cuántas solicitudes manejará por segundo y, por último, cuánta latencia tolerará.
  • Presentación de una prueba de concepto. Realice un diseño de esquema/índice y comprenda los patrones de consulta y luego refine su estimación del tamaño del conjunto de trabajo. Registre esta configuración como punto de referencia para probar con sucesivas revisiones de la aplicación.
  • Haz tus pruebas con carga de trabajo real. Después de llevar a cabo la etapa de concepto de prueba, implemente solo después de realizar una prueba sustancial con datos del mundo real y requisitos de rendimiento.

Replicación y fragmentación

Estos son los dos conceptos principales para garantizar una alta disponibilidad de datos y una mayor escalabilidad horizontal, respectivamente, en el clúster de MongoDB.

La fragmentación básicamente divide los datos entre servidores en pequeñas porciones conocidas como fragmentos. El equilibrio de datos entre fragmentos es automático, los fragmentos se pueden agregar o eliminar sin desconectar necesariamente la base de datos.

La replicación en el otro extremo mantiene múltiples copias redundantes de los datos para una alta disponibilidad. Es una función integrada en MongoDB y funciona en redes de área amplia sin necesidad de redes especializadas. Para una configuración de clúster, le recomiendo que tenga al menos 2+ mongos, 3 servidores de configuración, 1 fragmento y garantice la conectividad entre las máquinas involucradas en el clúster fragmentado. Use un nombre DNS en lugar de direcciones IP en la configuración.

Para entornos de producción, use un conjunto de réplicas con al menos 3 miembros y recuerde completar más variables de configuración, como el tamaño del registro de operaciones.

Al iniciar sus instancias mongod para sus miembros, use el mismo archivo de claves.

Algunas de las consideraciones de su llave fragmentada deben incluir:

  • La clave y el valor son inmutables
  • Considere siempre usar índices en una colección fragmentada
  • El comando Actualizar controlador debe contener una clave fragmentada
  • Restricciones únicas que debe mantener la clave de fragmento.
  • Una clave de fragmento no puede contener tipos de índice especiales y no debe exceder los 512 bytes.
Varios nueves Conviértase en un administrador de bases de datos de MongoDB - Llevando MongoDB a la producción Obtenga información sobre lo que necesita saber para implementar, monitorear, administrar y escalar MongoDBDescargar gratis

Nunca cambie el archivo de configuración del servidor

Después de realizar su primera implementación, es recomendable no cambiar muchos parámetros en el archivo de configuración, de lo contrario, puede tener problemas, especialmente con fragmentos. El eslabón más débil con la fragmentación son los servidores de configuración. Es decir, todas las instancias de mongod deben estar ejecutándose para que la fragmentación funcione.

Buena estrategia de seguridad

MongoDB ha sido vulnerable a ataques externos en los últimos años, por lo tanto, es importante que su base de datos tenga algunos protocolos de seguridad. Además de ejecutar los procesos en diferentes puertos, al menos se debe emplear una de las 5 formas diferentes de proteger las bases de datos de MongoDB. Puede considerar plataformas como MongoDB Atlas que protegen las bases de datos de forma predeterminada mediante el cifrado de los datos tanto en tránsito como en reposo. Puede utilizar estrategias como TLS/SSL para todas las conexiones entrantes y salientes.

Conclusión

El control de clústeres de MongoDB no es una tarea fácil e implica muchas soluciones alternativas. Las bases de datos crecen como resultado de más usuarios, por lo tanto, un mayor conjunto de cargas de trabajo. Por lo tanto, On tiene el mandato de garantizar que el rendimiento del DBM esté en línea con este mayor número de usuarios. Las mejores prácticas van más allá de aumentar los recursos de hardware y aplicar algunos conceptos de MongoDB, como fragmentación, replicación e indexación. Sin embargo, muchos de los inconvenientes que pueden surgir se resuelven bien actualizando su versión de MongoDB. Más a menudo, las últimas versiones tienen errores corregidos, solicitudes de nuevas funciones integradas y casi ningún impacto negativo en la actualización, incluso con números de revisión importantes.