Home Programación Caso de éxito MongoDB: Foursquare

Por Lillian Domínguez

Foursquare (https://foursquare.com/) es una red social que te permite hacer registrar o “check in” del lugar en donde te encuentres, es muy popular en Estados Unidos, Brasil y México.

Después de realizar una evaluación al sistema tomaron la decisión de migrar su administrador de base de datos de Prostgress a Mongo DB.

Véamos algunos datos de interés:

  • Foursquare tiene 15 millones de usuarios, >1 billón de Check In’s
  • Tráfico de pico: Concurrentemente  ~2500 HTTP  QPS Overall, ~80 Check-in’s por segundo
  • 8 Cluster de Mongo DB en producción
  • 8 fragmentos de usuarios, 12 fragmentos de Check-ins
  • Checkins: ~80 Inserciones/seg, ~2.5  ops/seg,  45MB/s Salidas en pico

Algunos hechos:

  • Todos los servidores corren en EC2
  • Mongo S (Mongo Shard) son colocados con AppServers, 1:1
  • Mongo Cs (Mongo Drivers) compartido en 3 Instancias
  • Mongo D (Mongo deamon) trabajando en un conjunto contenido en RAM
  • Configuración para MongoD en almacén de respaldo: Volúmenes  4 EBS con RAID0.

La problemática: 

  1. La Fragmentación se infla.

Al modificarse los datos Con el tiempo,  la huella de Mongo D RAM crece loos nodos de la página del disco  y el rendimiento del sitio sufre.

Solución:  La Orden replicaset por datSize + IndexSize, Uptime  DESC. –Reparar los nodos secundarios uno a la vez.  Los nodos primarios requieren stepdown() los cuáles son más delicados.

La problemática: 

         2. Ejecución del EBS degradado

Síntomas:

Ioutil % en un volumen  > 90

Qr/qw counts spike

Tasa de fallas > 10 en mongostat

Algunas veces: tcploss counts spike

Solución: Detener el proceso de Mongo D sí es nodo secundario, Stepdown() + Parar sí es el primario.  Reconstruir desde cero.

Las problemática:  

         3. Recientemente Mongo D no ha buscado en todos los datos.

Solución:

Db.checkins.find({unused_key:1}).explain()

Db.checkins.find({unused_key:1}).hint ({random_index: 1}).explain()

Cat > /dev/null trabaja demasiado, a menos que el tamaño del conjunto de datos es más grande que la memoria RAM.

He aquí la presentación completa:

https://docs.google.com/a/netmx.com.mx/presentation/pub?id=1q4R3F0AnWN-MQZqbysZ92nZ4_OC7bRzUCWfbmeHHcQQ&start=false&loop=false&delayms=3000&pli=1#slide=id.p

Por Cooper Bethea. Site Reliability Engineer, Foursquare.

Cónoce más sobre Mongo DB

Próximo webinar de Mongo DB: Análisis de costo de propiedad para MongoDB. Enero 17 11:00am PST / 2:00pm EST / 7:00pm UTC  http://www.10gen.com/events/webinar/tco-mongodb-vs-oracle

Leave a Reply