Product
Actualización semanal de producto: actualización a MongoDB 2.4.1
Publicado originalmente el 12 de abril de 2013.
Esta semana nos hemos centrado en las mejoras del backend para que Mailgun tenga un mayor rendimiento, y sea más fiable y escalable. Muchas cosas aburridas, pero esperamos que notes la diferencia.
Una de las cosas que hicimos en concreto fue actualizar de la versión 2.2 de MongoDB a la 2.4.1. En Mailgun somos muy fans de MongoDB. Hace tiempo que deberíamos haber publicado el artículo largo “Por qué MongoDB”, pero mientras tanto, aquí tienes un poco de contexto sobre la experiencia de actualización a la última versión de MongoDB. También actualizamos a la última versión de pymongo: el controlador de Python para MongoDB.
Actualización a MongoDB 2.4.1 desde la versión 2.2
Recomendamos encarecidamente este cambio de versión a cualquier persona que utilice MongoDB en producción. Aunque puedes ver la lista completa de las novedades de la versión 2.4.1 en el sitio web de 10Gen, a continuación tienes la lista de funciones y mejoras que nos resultaron especialmente útiles durante la evaluación en nuestro entorno de pruebas:
- Nuevas clases MongoClient y MongoReplicaSet. Introducen la nueva configuración predeterminada de seguridad: esperar a las confirmaciones de escritura.
- Correcciones de errores que se han producido tras la introducción de la versión 2.4.
Nuestro equipo de ingeniería de infraestructura llevó a cabo la actualización en un sistema real de alta carga sin ningún problema.
Actualización de la versión de PyMongo
Bueno, por defecto las pruebas no se superarán. Tendrás que solucionar algunos errores de importación. Por ejemplo, objectidmodule ha pasado de pymongo al paquete bson. Por lo demás, la actualización es bastante segura, porque el nuevo comportamiento predeterminado solo está presente en las nuevas clases de conexión.
Hay una advertencia importante que se debe tener en cuenta: en esta versión 10Gen introdujo el concepto de Requests (peticiones). Ahora, los objetos de conexión que se obtienen de pymongo están vinculados a su hilo de llamada por defecto. ¡Nuestras pruebas mostraron una reducción del rendimiento en un factor de tres! Tus resultados pueden variar, pero de cualquier forma, es un cambio del comportamiento predeterminado muy importante. Ojalá 10Gen hubiera sido más explícita al respecto.
Actualización de los servidores
No deberías utilizar MongoDB sin los conjuntos de réplicas. Esto te ofrece la capacidad no solo de contar con resiliencia ante los fallos de hardware, sino que también permite realizar actualizaciones de la versión de la base de datos sobre la marcha. Estos son los pasos que seguimos:
- Evidentemente, asegúrate de tener una copia de seguridad reciente de tus datos. Realizamos las copias de seguridad apagando uno de los nodos secundarios, compactando su base de datos y enviando el archivo tar del directorio de la BD a Rackspace Cloud Files.
- Actualiza los nodos secundarios de uno en uno, al mismo tiempo que supervisas el estado de un conjunto de réplicas.
- Por último, degrada el nodo primario.
- Actualiza el nodo primario.
En general, un procedimiento muy aburrido y sin contratiempos. Justo como nos gusta que sea cuando se trata de bases de datos.
Hasta la semana que viene.
Feliz envío de emails,
El equipo de Mailgun