Your SlideShare is downloading. ×
0
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Software Libre Y Escalabilidad
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Software Libre Y Escalabilidad

3,223

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,223
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
47
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Diciembre, 2009
  • 2. El uso del Software Libre en Tuenti Escalabilidad de grandes plataformas
  • 3. Tuenti en números <ul><li>Millones de usuarios </li></ul><ul><li>72 minutos por persona y día </li></ul>
  • 4. Tuenti en números <ul><li>20.000 millones de páginas vistas cada mes </li></ul><ul><li>+20k / segundo en pico </li></ul><ul><li>3 millones sólo móvil cada día </li></ul><ul><li>+2.5 millones de fotos nuevas cada día </li></ul><ul><li>2.500 millones de imágenes servidas  cada día </li></ul><ul><li>(+6 Gbps, 70k / segundo en pico) </li></ul>
  • 5. Tuenti en números <ul><li>+800 servidores </li></ul><ul><li>páginas &lt;100ms, totalmente dinámicas </li></ul><ul><li>sin pérdida de datos </li></ul><ul><li>sistema robusto y resistente a fallos </li></ul>
  • 6. ¿Cómo lograrlo? <ul><ul><li>Escalabilidad de sistemas </li></ul></ul><ul><ul><ul><li>CPD, refrigeración, redes, planificación </li></ul></ul></ul><ul><ul><li>Escalabilidad de software </li></ul></ul><ul><ul><ul><li>¿La más difícil? </li></ul></ul></ul><ul><ul><li>Escalabilidad de arquitectura </li></ul></ul><ul><ul><ul><li>Orquesta software y sistemas </li></ul></ul></ul><ul><ul><li>Monitorización contínua </li></ul></ul><ul><ul><ul><li>Solucionar problemas, buscar cuellos de botella, preveer ampliaciones </li></ul></ul></ul>
  • 7. Pero ¿qué es escalabilidad? <ul><li>La escalabilidad  NO es velocidad </li></ul><ul><li>La escalabilidad  NO  es ni siquiera throughput </li></ul><ul><li>De hecho, hacemos código lento ; ) </li></ul>
  • 8. Pero ¿qué es escalabilidad? <ul><li>La  escalabilidad  es la propiedad deseable de un sistema, una red o un proceso, que indica su habilidad para extender el margen de operaciones sin perder calidad, o bien manejar el crecimiento continuo de trabajo de manera fluida, o bien para estar preparado para hacerse más grande sin perder calidad en los servicios ofrecidos (wikipedia) </li></ul>
  • 9. Escalabilidad vertical y horizontal <ul><ul><li>Vertical: </li></ul></ul><ul><ul><ul><li>Mejores máquinas </li></ul></ul></ul><ul><ul><ul><li>No existe para crecer por encima de la ley de Moore </li></ul></ul></ul><ul><ul><li>Horizontal: </li></ul></ul><ul><ul><ul><li>Más máquinas </li></ul></ul></ul><ul><ul><ul><li>Es complicada </li></ul></ul></ul><ul><li>¡También se busca la escalabilidad en costes! </li></ul>
  • 10. 100% Software Libre <ul><li>  </li></ul>
  • 11. Por qué Software Libre <ul><ul><li>Conocimiento </li></ul></ul><ul><ul><ul><li>Conocer tus herramientas al detalle </li></ul></ul></ul><ul><ul><ul><li>Poderlas mejorar, depurar, corregir </li></ul></ul></ul><ul><ul><ul><li>No reinventar la rueda </li></ul></ul></ul><ul><ul><ul><li>Poderlas monitorizar </li></ul></ul></ul><ul><ul><ul><li>Es un capital de la empresa </li></ul></ul></ul><ul><ul><li>Pequeñas piezas independientes, no grandes aplicaciones </li></ul></ul><ul><ul><li>No vendor lock-in </li></ul></ul><ul><ul><li>¡No hay alternativas! </li></ul></ul>
  • 12. PHP <ul><ul><li>Espíritu de HTTP: Cada petición es independiente </li></ul></ul><ul><ul><li>Fácil de programar y evolucionar </li></ul></ul><ul><ul><li>Flexible y ampliable </li></ul></ul><ul><ul><li>Fácil de desplegar </li></ul></ul><ul><ul><li>Ligero </li></ul></ul><ul><ul><li>Velocidad aceptable </li></ul></ul>
  • 13. MySQL <ul><ul><li>Rápida </li></ul></ul><ul><ul><li>Fiable </li></ul></ul><ul><ul><li>No necesitamos nada extra, prácticamente es un almacén de bytes </li></ul></ul><ul><ul><li>No perder de vista forks como Drizzle </li></ul></ul>
  • 14. Memcache (y otros Key-Value) <ul><ul><li>Proporciona cache: Básico para escalar </li></ul></ul><ul><ul><li>Rápido </li></ul></ul><ul><ul><li>Rápido </li></ul></ul><ul><ul><li>Rápido </li></ul></ul><ul><ul><li>Se puede utilizar como una capa de almacenamiento más. </li></ul></ul>
  • 15. Graphics Magick <ul><ul><li>Gran rapidez </li></ul></ul><ul><ul><li>Multicore </li></ul></ul><ul><ul><li>Múltiples formatos </li></ul></ul>
  • 16. eJabberd <ul><ul><li>Fácil de extender </li></ul></ul><ul><ul><li>Protocolo estándar XMPP </li></ul></ul><ul><ul><li>Erlan, ergo escalable </li></ul></ul>
  • 17. IPVS y Ldirector <ul><ul><li>Muy rápido y escalable </li></ul></ul><ul><ul><li>Direct Routing </li></ul></ul><ul><ul><li>Ldirector puede dar quebraderos de cabeza </li></ul></ul>
  • 18. rrdtool <ul><ul><li>Casi un estándar para gráficas de monitorización </li></ul></ul><ul><ul><li>Rápido </li></ul></ul><ul><ul><li>Tamaño constante de la DB </li></ul></ul><ul><ul><li>Un buen gráfico sirve de alerta preventiva </li></ul></ul>
  • 19. Escalabilidad, paso a paso (1) <ul><li>El principio </li></ul><ul><ul><li>Uno o pocos servidores para toda la aplicación </li></ul></ul><ul><ul><li>Estructura monolítica </li></ul></ul><ul><ul><li>Cuello de botella: lectura de base de datos </li></ul></ul>
  • 20. Escalabilidad, paso a paso (2) <ul><li>Replicación </li></ul><ul><ul><li>Arquitectura maestro / esclavo </li></ul></ul><ul><ul><li>División de lecturas y escrituras </li></ul></ul><ul><ul><li>Configuraciones optimizadas </li></ul></ul><ul><ul><li>Cuello de botella: lectura de base de datos </li></ul></ul>
  • 21. Escalabilidad, paso a paso (3) <ul><li>Memcache </li></ul><ul><ul><li>Cambiamos accesos pesados a BBDD por accesos ligeros a caché </li></ul></ul><ul><ul><li>Reducción brutal de carga en BBDD </li></ul></ul><ul><ul><li>Una página típica tiene 0 - 5 queries, y 100+ accesos a Memcached </li></ul></ul><ul><ul><li>Cuello de botella: Escrituras en la base de datos </li></ul></ul>
  • 22. Escalabilidad, paso a paso (4) <ul><li>Separación de datos </li></ul><ul><ul><li>División del esquema en bloques lógicos </li></ul></ul><ul><ul><li>Un cluster por cada tipo de dato </li></ul></ul><ul><ul><li>Más complicado de gestionar en código </li></ul></ul><ul><ul><li>Cuello de botella: sobrecarga en un tipo de datos </li></ul></ul>
  • 23. Escalabilidad, paso a paso (5) <ul><li>Particionado de datos </li></ul><ul><ul><li>Dividir una sola tabla en trozos y ubicarlos en varios clusters </li></ul></ul><ul><ul><li>Escalabilidad casi sin límites </li></ul></ul><ul><ul><li>No es gratis - aumenta la cantidad de código de soporte </li></ul></ul><ul><ul><li>Cuello de botella: volumen de datos </li></ul></ul>
  • 24. Escalabilidad, paso a paso (6) <ul><li>Archivado de datos </li></ul><ul><ul><li>Almacenar datos que se usan con menor frecuencia en soportes alternativos </li></ul></ul><ul><ul><li>Mantiene el tamaño de las tablas principales dentro de límites manejables </li></ul></ul><ul><ul><li>Flexibilidad a la hora de escoger el soporte alternativo </li></ul></ul>
  • 25. Escalabilidad, paso a paso (7) <ul><li>Particionado de memcache </li></ul><ul><ul><li>El particionado no se tiene que limitar a bases de datos </li></ul></ul><ul><ul><li>Memcacheds y frontales particionados </li></ul></ul><ul><ul><li>Mejora el rendimiento de red interna </li></ul></ul><ul><ul><li>Esquema cruzado entre memcached y base de datos </li></ul></ul>
  • 26. Escalabilidad, paso a paso (8) <ul><ul><li>Consistencia eventual </li></ul></ul><ul><ul><li>Cache como un storage más. </li></ul></ul><ul><ul><ul><li>Cero consultas a DB </li></ul></ul></ul><ul><ul><ul><li>Actualización tras cambios </li></ul></ul></ul><ul><ul><ul><li>Paginación en cache </li></ul></ul></ul><ul><ul><ul><li>Problemas </li></ul></ul></ul><ul><ul><ul><ul><li>Consistencia </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Race conditions </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Concurrencia </li></ul></ul></ul></ul>Memcache como Storage
  • 27. Escalabilidad, paso a paso (9) <ul><ul><li>Client Side Routing </li></ul></ul>Balanceadores
  • 28. Pruebas de escalabilidad <ul><ul><li>Tremendamente difícil de probar </li></ul></ul><ul><ul><ul><li>Pruebas sintéticas </li></ul></ul></ul><ul><ul><ul><li>Análisis de consultas SQL, claves de MC </li></ul></ul></ul><ul><ul><ul><li>Experiencia </li></ul></ul></ul><ul><ul><ul><li>Dark launch </li></ul></ul></ul><ul><ul><ul><li>Desactivación parcial, ratios, reducción de listados... </li></ul></ul></ul>
  • 29. Más allá de tus servidores (1) <ul><ul><li>Content Delivery Networks </li></ul></ul><ul><ul><ul><li>¡Todos utilizan software libre! </li></ul></ul></ul><ul><ul><ul><li>Coste &amp;quot;bajo&amp;quot; </li></ul></ul></ul><ul><ul><ul><li>Utilizar varios </li></ul></ul></ul><ul><ul><ul><ul><li>Mover tráfico entre ellos según rendimiento </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Según tipo de contenido y requisitos </li></ul></ul></ul></ul><ul><ul><ul><li>Rendimiento muy variable (cold servers, hit ratio) </li></ul></ul></ul>
  • 30. Más allá de tus servidores (2) <ul><ul><li>Aprovechar la AJAX y la web 2.0 para algo más que Marketing: </li></ul></ul><ul><ul><ul><li>Client side routing </li></ul></ul></ul><ul><ul><ul><li>Client side caching </li></ul></ul></ul><ul><ul><ul><li>Prefetch </li></ul></ul></ul><ul><ul><ul><li>Reducir BW transfiriendo sólo datos y sólo cambios </li></ul></ul></ul><ul><ul><ul><li>Mediciones de rendimiento </li></ul></ul></ul>
  • 31. Escalabilidad de aplicaciones web <ul><ul><li>Mover la aplicación lo más cerca posible del navegador </li></ul></ul><ul><ul><ul><li>¡El javascript es lo que más escala! </li></ul></ul></ul>
  • 32.    
  • 33. Escalabilidad de aplicaciones web <ul><ul><li>Mover la aplicación lo más cerca posible del navegador </li></ul></ul><ul><ul><ul><li>¡El javascript es lo que más escala! (excepto IE) </li></ul></ul></ul><ul><ul><ul><li>El resto a los frontales </li></ul></ul></ul><ul><ul><li>Menos base de datos: </li></ul></ul><ul><ul><ul><li>Deja de ser relacional </li></ul></ul></ul><ul><ul><ul><li>Un storage más </li></ul></ul></ul><ul><ul><li>Cache como storage layer </li></ul></ul><ul><ul><li>Más aplicación: </li></ul></ul><ul><ul><ul><li>Relacionar datos </li></ul></ul></ul><ul><ul><ul><li>Mantener consistencia </li></ul></ul></ul><ul><ul><ul><li>Manejar los diferentes storage </li></ul></ul></ul><ul><ul><ul><li>Migrar datos (somos 24/7) </li></ul></ul></ul><ul><ul><ul><li>No monolítica, pequeñas piezas, como el SL </li></ul></ul></ul>
  • 34. gracias http://jobs.tuenti.com

×