Tecnologia detras de las redes sociales

12
Tecnologías detrás de las Redes Sociales PROFESOR: EDDIE CHRISTIAN MALCA VICENTE ALUMNO: CHARLIE DE LA CRUZ SILVA CURSO: LENGUAJE DE PROGRAMACION II

Transcript of Tecnologia detras de las redes sociales

Tecnologías detrás de las Redes SocialesPROFESOR: EDDIE CHRISTIAN MALCA VICENTE

ALUMNO: CHARLIE DE LA CRUZ SILVA

CURSO: LENGUAJE DE PROGRAMACION II

¿Que son las redes sociales?

Una red social es una estructura social compuesta por un conjunto de actores (tales como individuos u organizaciones) que están relacionados de acuerdo a algún criterio (relación profesional, amistad, parentesco, etc.). Normalmente se representan simbolizando los actores como nodos y las relaciones como líneas que los unen. El tipo de conexión representable en una red social es una relación diádica o lazo interpersonal.

Las investigaciones han mostrado que las redes sociales constituyen representaciones útiles en muchos niveles, desde las relaciones de parentesco hasta las relaciones de organizaciones a nivel estatal (se habla en este caso de redes políticas), desempeñando un papel crítico en la determinación de la agenda política y el grado en el cual los individuos o las organizaciones alcanzan sus objetivos o reciben influencias. La red social también puede ser utilizada para medir el capital social (es decir, el valor que un individuo obtiene de los recursos accesibles a través de su red social).

Facebook La red social con cerca de 500 millones de usuarios sigue creciendo sin parar, pero ¿cómo logra

soportar su infraestructura tecnológica una carga semejante? Los secretos del software utilizado por Facebook no son tan destacables, pero sí su puesta en marcha.

Es precisamente lo que analizan en Royal Pingdom, donde indican que Facebook sirve nada menos que 570.000 millones de páginas vistas al mes según los datos de Google Ad Planner. Además, hay más fotos en Facebook que en el resto de servicios combinados “puros” de fotografía (como Flickr).

Esos datos se manejan gracias a una plataforma que se basa en la plataforma LAMP muy modificada. Por ejemplo, hacen uso de un compilador de PHP (HipHop), y también usan Linux aunque con diversos componentes especializados y ajustados a sus necesidades. También usan MySQL, pero de forma secundaria, ya que a partir de aquí surgen todo tipo de tecnologías.

Entre ellas destaca Cassandra, una interesante base de datos NoSQL que triunfa en otros servicios como Digg, o Haystack, la tecnología responsable de su eficiente servicio de gestión de fotos en la red social. Otros componentes como BigPipe, Scribe o Hadoop/Hive son también claves para la escalabilidad y funcionamiento de una infraestructura tan colosal como el resto de datos de Facebook.

Y todo esto tiene detrás un software que aguanta ese ritmo de publicación de contenidos y crecimiento. Unos cuantos datos interesantes:

Facebook usa PHP pero lo compila para convertirlo en código nativo y aumentar su velocidad. Facebook usa Linux optimizado para mejorar el rendimiento de la transferencia en red. Facebook usa MySQL como almacenamiento permanente. Este es un resumen del Software que usa Facebook: Memcached: Utilizado por muchas web de envergadura hace la función de caché entre los servidores web

y los servidores MySQL. Facebook tiene miles de servidores Memcached con cientos de terabytes de datos en caché.

HipHop for PHP: HipHop(desarrollado por Facebook) convierte el código PHP en código C++ que puede compilarse para aumentar la velocidad. Esto ha permitido mejorar el rendimiento de sus servidores, ya que Facebook sigue basado en PHP para servir casi todo su contenido.

HayStack: El sistema de alto rendimiento desarrollado por Facebook para almacenar y recuperar objetos, utilizado por Facebook para almacenar y recuperar fotos. Hay (en junio de 2010) 20.000.000.000 de fotos en Facebook, cada una en 4 resoluciones distintas…. Además hay que tener en cuenta que de esas se recuperan 1.200.000 fotos cada segundo.

BigPipe: Un sistema dinámico para servir páginas web (desarrollado por Facebook) que permite la división de cada página en sección (ellos los llaman “pagelets”) para optimizar su rendimiento. Cada sección de la página web se recupera por separado (y muchas ocasiones en paralelo) con la ventaja de si una parte de la web está desactivada o rota, el usuarios sigue viendo el resto sin problemas.

Cassandra: Es un sistema de almacenamiento redudante a fallos que proviene del movimiento NoSQL. Facebook lo usa para las búsquedas de la bandeja de entrada.

Scribe: Es el sistema flexible de login creado por Facebook, que permite manejar todos sus logins y además es escalable para el futuro.

Hadoop y Hive: Hadoop es un sistema que permite realizar cálculos sobre cantidades ingentes de datos. Facebook lo utiliza para las estadísticas. Hive está desarrollado por Facebook y permite ejecutar consultas SQL contra Hadoop. Ambos proyectos son open-source y se usan en multitud de sitios webs grandes como Yahoo y Twitter.

Thrift: Facebook usa otros lenguajes de programación además de PHP: El chat está realizado con Erlang y en otras partes de la web se usa Java y C++. Thrift es un framework que une todos los lenguajes de programación utilziados, haciendo posible su comunicación. Esto ha hecho mucho más sencillo el uso de varios lenguajes de programación en Facebook.

Varnish: Varnish es un acelerador HTTP que puede actuar como distribuidor de cargas y que también puede cachear contenido que puede ser servido de forma espectacularmente rápida. Facebook usa Varnish para mostrar fotos y fotos de perfil, con una carga de miles de millones de peticiones diarias.

XHProf: Facebook monitoriza todos sus sistemas, incluyendo cada una de las funciones PHP del entorno productivo. Para ello usa una herramienta llamada XHProf.

Twitter

Es un servicio de microblogging, con sede en San Francisco, California, con filiales en San Antonio (Texas) y Boston (Massachusetts) en Estados Unidos. Twitter, Inc. fue creado originalmente en California, pero está bajo la jurisdicción de Delaware desde 2007. Desde que Jack Dorsey lo creó en marzo de 2006, y lo lanzó en julio del mismo año, la red ha ganado popularidad mundialmente y se estima que tiene más de 500 millones de usuarios, generando 65 millones de tweet al día y maneja más de 800.000 peticiones de búsqueda diarias. Ha sido apodado como el "SMS de Internet".

La red permite enviar mensajes de texto plano de corta longitud, con un máximo de 140 caracteres, llamados tweets, que se muestran en la página principal del usuario. Los usuarios pueden suscribirse a los tuits de otros usuarios – a esto se le llama "seguir" y a los usuarios abonados se les llama "seguidores", "followers" y a veces tweeps ('Twitter' + 'peeps', seguidores novatos que aún no han hecho muchos tweets). Por defecto, los mensajes son públicos, pudiendo difundirse privadamente mostrándolos únicamente a unos seguidores determinados. Los usuarios pueden tuitear desde la web del servicio, con aplicaciones oficiales externas (como para teléfonos inteligentes), o mediante el Servicio de mensajes cortos (SMS) disponible en ciertos países. Si bien el servicio es gratis, acceder a él vía SMS comporta soportar tarifas fijadas por el proveedor de telefonía móvil.

Tecnología

La interfaz web de Twitter está escrita en Ruby on Rails, y los mensajes se mantienen en un servidor que funciona con software programado en Scala y además dispone de una API abierta para todo tipo de desarrolladores, lo cual supone una gran ventaja para todos aquellos que quieran integrar Twitter como un servicio tanto en otras aplicaciones web como en aplicaciones de escritorio o móviles. Según Biz Stone, más del 50 por ciento de nuestro tráfico llega a través de nuestro API. Aun así, debido a sus problemas técnicos y de escalabilidad, es posible que Twitter abandone Ruby on Rails como su framework de desarrollo para comenzar uno nuevo basado en PHP. Sin embargo, Evan Williams pronto desmintió esta información en un tuit que envió el 1 de mayo de 2008.

Instagram

Lo bueno de que las empresas tecnológicas tengan un blog técnico es que nos cuentan lo que hay detrás de sus productos. Es decir, cómo desarrollan, la infraestructura y cómo tienen todo montado. Un valioso conocimiento compartido que no todo el mundo está dispuesto a compartir.

En este caso, Instagram, que por si alguien no la conoce es la startup que ha revolucionado la forma de compartir fotos por medio de una aplicación para el iPhone, cuenta en su blog la tecnología que hay detrás. Os puedo asegurar que es muy interesante y que más de alguna que otra empresa debería aprender como optimizar recursos.

En Instagram dicen que tienen un pequeño equipo de ingenieros pero que han sabido aprovechar al máximo cada recurso para llegar a escalar su infraestructura a más de 14 millones de usuarios en apenas un año.

Sus reglas básicas son:

Mantenerse simples

No reinventar la rueda

Usar tecnologías ya probadas siempre que eso sea posible

Alojamiento

Instagram usa Ubuntu Linux 11.04 en sus instancias en Amazon EC2, las cuales manejan según las necesidades de demanda. De momento, no se plantean utilizar servidores en sus propias instalaciones aunque no lo descartan si el crecimiento se mantiene constante.

Servidores de aplicaciones

Usan Django en Amazon High-CPU Extra Large pasando de tan sólo unas maquinas a alcanzar ya más de 25. Aunque ese no es ningún problema ya que son capaces de escalar horizontalmente al poder trabajar independientemente unas de otras.

Usan como servidor WSGI a Ginicorn, en lugar de mod_wsgi y Apache, al ser Gunicorn más fácil de configurar, y menos intensivo con la CPU. Y para la ejecución de comandos en varias instancias en paralelo se usan Fabric que es capaz de desplegar en cuestión de segundos cual ejecución.

Almacenamiento de datos

Uno de los pilares de Instagram son los datos de las fotografias y los usuarios. La base de datos que se usa es PostgreSQL Afirman que tiene 12 cluster de instancias de memoria Quadruple Extra-Largey sus 12 replicas en distintos lugares.

Nos aconsejan el uso de vmtouch para la gestión de datos de memoria, sobre todo cuando se produce un error en la conmutación de una máquina a otra. Todas las maquinas que se usan están configurada en maestro-replica. Para la gestión de la replicación se usa repmgr.

Para realizar las conexiones a la base de datos con PostgreSQL, principalmente desde Django se usa Pgbouncer.

Como no podía ser de otra forma, para todo los que es contenido principal del feed de actividad y las notificaciones de Instagram se usa Redis. Aunque como todo tiene que caber en memoria se usa de nuevo otras instancias Quadruple Extra-Large en configuración maestro-replica.

Para el uso de la API de geo-búsqueda se usa Apache Solr que permite el consumo de datos por medio de JSON, lo que facilita el acceso a los datos cuando las aplicaciones lo necesitan. Tampoco se olvidan del uso de memcached para la caché utilizando pylibmc y ibmemcached.

Tareas de notificación y push

Para estos casos en los que se tiene que notificar a un usuario en tempo real de una nueva foto publicada se usa Gearman, un sistema de cola de tareas escrita originalmente en Danga. Colas asíncronas para distribuir el trabajo pesado en segundo plano y que las tareas más ligeras se realicen rápido.

Para realizar las notificaciones push usan pyapns y aseguran que les ha ido bastante bien manejando más de mil millones de notificaciones. Habrá que echarle un vistazo.

Monitorización

Con más de cien instancias distribuidas en los distintos procesos que hemos descrito, en Instragram usan Munin para revisar todos los parámetros gráficos de los sistemas. Además de haber escrito varios plugin basado en Python. También se usa Pingdom para la supervisión externa del servicio yPagerDuty para las incidencias y las notificaciones.

Y para el informe de errores usan Sentry, escrita usando Django por la gente de Disquis.