Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Escalando sin atajos

Avatar for Luis Bosque Luis Bosque
November 28, 2014

Escalando sin atajos

Desafíos y lecciones aprendidas intentando escalar CartoDB sin limitando lo menos posible al usuario en una plataforma de mapas dinámicos

Avatar for Luis Bosque

Luis Bosque

November 28, 2014
Tweet

More Decks by Luis Bosque

Other Decks in Technology

Transcript

  1. ¿Qué es CartoDB? CartoDB is a Software as a Service

    (SaaS) cloud computing platform that provides GIS and web mapping tools for display in a web browser
  2. Cada petición de un tile Entra a un servidor web

    Es procesada por una API de tiles Lanza la SQL del usuario a su base de datos Renderiza un png con datos de la DB
  3. Números Varios miles de peticiones de tiles por segundo Respuestas

    medias por tile de 300 miliseconds Peticiones totalmente dinámicas
  4. Números Varios miles de peticiones de tiles por segundo Respuestas

    medias por tile de 300 miliseconds Peticiones totalmente dinámicas
  5. Caché Caché del sistema en DB Cachés internas de las

    aplicaciones Varnish CDN Pregunta de entrevista :)
  6. CDN La mayor parte de las peticiones a tiles se

    cachean de forma transparente en el CDN Mayor velocidad por región geográfica Menos carga para la plataforma
  7. Mapas dinámicos El CDN es solo un componente más El

    usuario sigue pudiendo lanzar sus queries contra sus datos y renderizar en base a sus estilos El usuario puede modificar sus datos o estilos en cualquier momento sin preocuparse del mapa
  8. Bottlenecks Es difícil medir los recursos de una plataforma cuando

    permitimos al usuario que haga lo que quiera con ella Aparecen bottlenecks que no pensabas que tendrías nunca Varias formas de solucionarlos Límites, control de recursos, quotas, escalado, tunning, sharding, ...
  9. ¿Cómo escala CartoDB? Escalado horizontal vs vertical vs sharding El

    escalado horizontal se usa principalmente para las capas de procesamiento sin persistencia Escalado vertical y sharding se usa principalmente para las base de datos
  10. Web routing DB Server 1 (n users shard) Tiler Web

    routing Web routing Tiler Tiler DB Server 2 (n users shard) DB Server 3 (n users shard) DB Server 4 (n users shard) DB Server 5 (n users shard) DB Server n (n users shard)
  11. Cuando el escalado no es bastante En partes como la

    base de datos se pueden dar luchas por recursos de la máquina Una query particularmente pesada puede usar mucha CPU o memoria Limitación de recursos Re-ajustes dinámicos de configuraciones Redistribución dinámica de bases de datos
  12. ¿Donde no aplicar límites? En todo aquello que favorezca el

    éxito de un mapa Renderizados rápidos Queries rápidas No aplicamos límites en el número de mapas vistos
  13. ¿Donde aplicar límites? En todo aquello que haga que un

    mapa no tenga éxito Queries largas = Timeouts en DB Renderizados largos = Límites de renders simultáneos
  14. Limitación de recursos: timeouts Es importante tener timeouts coherentes en

    todas las capas del stack Timeouts en las capas de aplicación Statement timeouts en base de datos
  15. Reajustes de configuración PostgreSQL tiene decenas de configuraciones para tunning

    del cluster Monitorización de los logs Reajustes de configuración en base a comportamientos del cluster Ejemplo: work_mem
  16. Redistribución dinámica de bases de datos Origin DB Server Target

    DB Server Origin DB Server DB Dump DB Restore DB Trigger (Writes Sync)
  17. Quotas Como casi cualquier servicio tenemos quotas Quotas de uso

    en disco Quotas de uso de la plataforma en tiempo real
  18. Ayuda y feedback al usuario Queremos que las visualizaciones de

    nuestros usuarios tengan éxito Análisis constante de la plataforma (procesamiento de logs, métricas, ..) Detectamos casos anormales y le damos feedback al usuario Ayudamos a nuestros usuarios a realizar sus integraciones de forma más eficiente y mejorar sus queries SQL
  19. Cuando lo tradicional no es suficiente Una vez más: Queremos

    que las visualizaciones del usuario lo peten PostgreSQL FDW Hadoop Renderizado en cliente Write only tables (Elections)
  20. Lección: Conoce bien tu stack Es esencial conocer bien tu

    stack, incluso si no lo desarrollas tú Varnish, NodeJS, Express, Rails, ORMs, PgBouncer, … Todo software se comporta de formas inesperadas cuando lo llevas al límite Al final vas a necesitar hacer cambios Benchmarks