En el siguiente blog se muestra un ejemplo de algunos sistemas distribuidos y de como manejan los 7 desafios.
Definición de un Sistema Distribuido
Un sistema distribuido se define como una colección de computadoras separadas físicamente y conectadas entre sí por una red de comunicaciones; cada máquina posee sus componentes de hardware y software que el programador percibe como un solo sistema (no necesita saber qué cosas están en qué máquinas).
7 desafios de un sistema distribuido
Seguridad.- Mantener la confidencialidad, integridad y disponibilidad de los recursos en la red.
Concurrencia.- El sistema debe permitir múltiples usuarios utilizando simultáneamente los recursos de la red.
Extensibilidad.- Poder soportar nuevas funcionalidades o cambios en el sistema.
Tratamiento a fallos .- Un Sistema Distribuido debe poder detectar, ocultar y recuperarse de fallos que puedan ocurrir en la red.
Escalabilidad.- El sistema debe mantener el rendimiento de los recursos cuando se aumenta el número de usuarios (consumidores).
Transparencia.- Para el usuario y/o el programador de aplicaciones el sistema debe ser percibido como un todo más que como una colección de recursos.
Heterogeneidad.- Consiste en la capacidad de poder añadir o reemplazar los componentes de la red (lenguajes de programación, sistemas operativos, protocolos, formatos, redes, hardware)
Muchas personas creen que Facebook está hecho solo en PHP, pero esto es un error ya que Facebook utiliza un conjunto de tecnologías que hacen que la plataforma funcione correctamente.
La mayoría ve una extensión “.php” y creen que toda la plataforma ha sido desarrollada en este lenguaje pero no es así, cuando crearon Facebook llegaron a la conclusión de que PHP no es precisamente el lenguaje más rápido que existe, ya que se trata de un lenguaje interpretado y si a eso le agregan que hay tareas que no se pueden llevar a cabo en PHP, la conclusión a la que llegaron los programadores de Facebook fue que quizá no haya sido una buena elección elegir PHP para su desarrollo, lo que les ha llevado a intentar migrar el núcleo de Facebook a Python en varias ocasiones, pero ninguna llegó a tener el resultado que esperaban.
Actualmente la plataforma de Facebook incluye:
Sistema operativo Linux
Memcache
Apache Cassandra
Apache Hive
Apache Thrifthttp://www.taringa.net/agregar/
Scribe
Lenguajes: PHP, Java, C++, Erlang, .NET, PEARL
HipHop para PHP
Tornado Web Server
Mysql
Protocolo XMPP
Heterogeneidad: para que todo esta plataforma funcione el primer desafío de google fue la heterogeneidad para solucionarlo acudió a los middleware como corba y el concepto como el de código móvil para entrelazar los sistemas.
Extensibilidad: Facebook en este caso aplico un sistemas distribuido abierto ya que estaba pensado para las masas, este tipo de sistemas permite extenderse a nivel de hardware mediante la inclusión de computadoras a la red y a nivel de software por la introducción de nuevos servicios y la reimplementación de los antiguos.
Seguridad: La seguridad tiene tres componentes: Confidencialidad: protección contra individuos no autorizados Integridad: protección contra la alteración o corrupción Disponibilidad: protección contra la interferencia que impide el acceso a los recursos
Existen dos desafíos que no han sido resueltos en su totalidad:
*Ataques de denegación de servicio
*Seguridad del código móvil
Tratamiento de Fallos
Detección de fallos: Se pueden utilizar sumas de comprobación (checksums) para detectar datos corruptos en un mensaje.
Enmarascamiento de fallos:
*Los mensajes pueden retransmitirse
*Replicar los datos
Tolerancia de fallos: los programas clientes de los servicios pueden diseñarse para tolerar ciertos fallos. Esto implica que los usuarios tendrán también que tolerarlos.
Recuperación de fallos: implica el diseño de software en el que, tras una caída del servidor, el estado de los datos puede reponerse o retractarse (rollback) a una situación anterior.
Redundancia: emplear componentes redundantes
Apache Thrift.
Thrift es un conjunto de herramientas y librerías software creadas por Facebook para acelerar el desarrollo e implementación de servicios backend eficientes y escalables. El principal objetivo es permitir comunicaciones eficientes y fiables a través de lenguajes de programación mediante la abstracción de porciones de cada lenguaje en una librería común, específicamente Apache Thrift permite a los desarrolladores definir los tipos de datos e interfaces de servicios en un archivo único en lenguaje neutral y generar todo el código necesario para construir clientes RPC y servidores.
Actualmente Thrift soporta los siguientes lenguajes C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk y OCaml. Facebook utiliza esta tecnología para su sistema de búsqueda integrando así un backend desarrollado en C++ con un frontend escrito en PHP.
Facebook utilizo esta tecnología para utilizar las librerías de Java y que en PHP no existen, como por ejemplo la librería para realizar el envío de SMS.
Apache Cassandra
Apache Cassandra es una Base de Datos no relacional, distribuida y basada en un modelo de almacenamiento de Clave-Valor, escrita en Java, además de Facebook, sitios como Reddit y Twitter también usan Cassandra, la usan para almacenar los datos de los usuarios de forma estructurada y distribuida. Se dice que Cassandra pertenece a una segunda generación de bases de datos, a un paradigma llamado NoSQL. Facebook hizo público el código de Cassandra al tiempo que lo entregó a la comunidad Apache en el 2008, Facebook no podría escalar sin Cassandra.
Apache Hive
Este es un proyecto auspiciado por la Fundación Apache. Entre sus varias funcionalidades destaca una que es fundamental para el funcionamiento de Facebook: el análisis de grandes conjuntos de datos sobre los cuales es posible inquirir, buscar información en ellos, Facebook no podría ofrecer su servicio de búsqueda sin Hive.
Scribe Server
Lo que hace Scribe es muy sencillo: es un sistema de distribución y registro de mensajes en los servidores, es tolerante a fallas y capaz de funcionar sobre una gran cantidad de equipos, gracias a Scribe Facebook logra gestionar con mayor facilidad y eficiencia sus miles de servidores.
HipHop para PHP
La parte visible de Facebook está escrita en su mayoría con lenguaje PHP, por lo que su desempeño es crítico para todo el sistema. Siendo un lenguaje interpretado tiene limitaciones de desempeño que los lenguajes compilados no tienen.
Una gran cantidad de peticiones PHP impone un consumo excesivo de CPU, y en Facebook han logrado solucionar el problema con este desarrollo en el que llevaban trabajando más de 3 años y que permite convertir el código PHP en código C++, que luego se compila con g++ para obtener un código objeto mucho más eficiente en consumo de recursos de lo que era el código PHP original, el resultado es un software de igual funcionalidad, pero optimizado para un alto desempeño. De hecho, Facebook afirma que gracias a HipHop para PHP usa hasta 50% menos CPU que antes, Facebook sería más lento sin la ayuda de HipHop para PHP.
Tornado web Server
Tornado es un framework de servidor Web y está liberado bajo la licencia Apache versión 2, está escrito en Python y está diseñado para permitir el procesamiento de miles de conexiones simultaneas. Facebook no podría “sentirse” en tiempo real sin Tornado.
Protocolo XMPP
Extensible Messaging and Presence Protocol (XMPP) es un protocolo para comunicación en tiempo real, la cual sirve de base para un amplio rango de aplicaciones, incluyendo mensajería instantánea, información de presencia o también llamada “listas de contactos”, charlas con múltiples participantes, voz, video llamadas, colaboración, sindicalización de contenidos y enrutamiento generalizado de datos en XML.
El chat de Facebook y la integración con sistemas como Windows Live no sería posible sin XMPP con DIGEST-MD5.
Bueno ahora que ya saben Facebook no es solo PHP y no sería posible sin el uso de todas las tecnologías antes mencionadas.
Seguridad: La seguridad tiene tres componentes: Confidencialidad: protección contra individuos no autorizados, Integridad: protección contra la alteración o corrupción, Disponibilidad: protección contra la interferencia que impide el acceso a los recursos.
Tolerancia a fallos: los programas clientes de los servicios pueden diseñarse para tolerar ciertos fallos. Esto implica que los usuarios tendrán también que tolerarlos. Como fallos por conexión a internet etc.
Seguridad: mantiene la confidencialidad, integridad y disponibilidad de sus usuarios
Presentado por:
Johnny Canabal Rivera
Jorge Julio Emiliani
Estudiantes de Ingenieria de Sistemas
Fundacion Universitaria Tecnologico Comfenalco
Concurrencia.- El sistema debe permitir múltiples usuarios utilizando simultáneamente los recursos de la red.
Extensibilidad.- Poder soportar nuevas funcionalidades o cambios en el sistema.
Tratamiento a fallos .- Un Sistema Distribuido debe poder detectar, ocultar y recuperarse de fallos que puedan ocurrir en la red.
Escalabilidad.- El sistema debe mantener el rendimiento de los recursos cuando se aumenta el número de usuarios (consumidores).
Transparencia.- Para el usuario y/o el programador de aplicaciones el sistema debe ser percibido como un todo más que como una colección de recursos.
Heterogeneidad.- Consiste en la capacidad de poder añadir o reemplazar los componentes de la red (lenguajes de programación, sistemas operativos, protocolos, formatos, redes, hardware)
Facebook
Muchas personas creen que Facebook está hecho solo en PHP, pero esto es un error ya que Facebook utiliza un conjunto de tecnologías que hacen que la plataforma funcione correctamente.
La mayoría ve una extensión “.php” y creen que toda la plataforma ha sido desarrollada en este lenguaje pero no es así, cuando crearon Facebook llegaron a la conclusión de que PHP no es precisamente el lenguaje más rápido que existe, ya que se trata de un lenguaje interpretado y si a eso le agregan que hay tareas que no se pueden llevar a cabo en PHP, la conclusión a la que llegaron los programadores de Facebook fue que quizá no haya sido una buena elección elegir PHP para su desarrollo, lo que les ha llevado a intentar migrar el núcleo de Facebook a Python en varias ocasiones, pero ninguna llegó a tener el resultado que esperaban.
Actualmente la plataforma de Facebook incluye:
Sistema operativo Linux
Memcache
Apache Cassandra
Apache Hive
Apache Thrifthttp://www.taringa.net/agregar/
Scribe
Lenguajes: PHP, Java, C++, Erlang, .NET, PEARL
HipHop para PHP
Tornado Web Server
Mysql
Protocolo XMPP
Heterogeneidad: para que todo esta plataforma funcione el primer desafío de google fue la heterogeneidad para solucionarlo acudió a los middleware como corba y el concepto como el de código móvil para entrelazar los sistemas.
Extensibilidad: Facebook en este caso aplico un sistemas distribuido abierto ya que estaba pensado para las masas, este tipo de sistemas permite extenderse a nivel de hardware mediante la inclusión de computadoras a la red y a nivel de software por la introducción de nuevos servicios y la reimplementación de los antiguos.
Seguridad: La seguridad tiene tres componentes: Confidencialidad: protección contra individuos no autorizados Integridad: protección contra la alteración o corrupción Disponibilidad: protección contra la interferencia que impide el acceso a los recursos
Existen dos desafíos que no han sido resueltos en su totalidad:
*Ataques de denegación de servicio
*Seguridad del código móvil
Tratamiento de Fallos
Detección de fallos: Se pueden utilizar sumas de comprobación (checksums) para detectar datos corruptos en un mensaje.
Enmarascamiento de fallos:
*Los mensajes pueden retransmitirse
*Replicar los datos
Tolerancia de fallos: los programas clientes de los servicios pueden diseñarse para tolerar ciertos fallos. Esto implica que los usuarios tendrán también que tolerarlos.
Recuperación de fallos: implica el diseño de software en el que, tras una caída del servidor, el estado de los datos puede reponerse o retractarse (rollback) a una situación anterior.
Redundancia: emplear componentes redundantes
Apache Thrift.
Thrift es un conjunto de herramientas y librerías software creadas por Facebook para acelerar el desarrollo e implementación de servicios backend eficientes y escalables. El principal objetivo es permitir comunicaciones eficientes y fiables a través de lenguajes de programación mediante la abstracción de porciones de cada lenguaje en una librería común, específicamente Apache Thrift permite a los desarrolladores definir los tipos de datos e interfaces de servicios en un archivo único en lenguaje neutral y generar todo el código necesario para construir clientes RPC y servidores.
Actualmente Thrift soporta los siguientes lenguajes C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk y OCaml. Facebook utiliza esta tecnología para su sistema de búsqueda integrando así un backend desarrollado en C++ con un frontend escrito en PHP.
Facebook utilizo esta tecnología para utilizar las librerías de Java y que en PHP no existen, como por ejemplo la librería para realizar el envío de SMS.
Apache Cassandra
Apache Cassandra es una Base de Datos no relacional, distribuida y basada en un modelo de almacenamiento de Clave-Valor, escrita en Java, además de Facebook, sitios como Reddit y Twitter también usan Cassandra, la usan para almacenar los datos de los usuarios de forma estructurada y distribuida. Se dice que Cassandra pertenece a una segunda generación de bases de datos, a un paradigma llamado NoSQL. Facebook hizo público el código de Cassandra al tiempo que lo entregó a la comunidad Apache en el 2008, Facebook no podría escalar sin Cassandra.
Apache Hive
Este es un proyecto auspiciado por la Fundación Apache. Entre sus varias funcionalidades destaca una que es fundamental para el funcionamiento de Facebook: el análisis de grandes conjuntos de datos sobre los cuales es posible inquirir, buscar información en ellos, Facebook no podría ofrecer su servicio de búsqueda sin Hive.
Scribe Server
Lo que hace Scribe es muy sencillo: es un sistema de distribución y registro de mensajes en los servidores, es tolerante a fallas y capaz de funcionar sobre una gran cantidad de equipos, gracias a Scribe Facebook logra gestionar con mayor facilidad y eficiencia sus miles de servidores.
HipHop para PHP
La parte visible de Facebook está escrita en su mayoría con lenguaje PHP, por lo que su desempeño es crítico para todo el sistema. Siendo un lenguaje interpretado tiene limitaciones de desempeño que los lenguajes compilados no tienen.
Una gran cantidad de peticiones PHP impone un consumo excesivo de CPU, y en Facebook han logrado solucionar el problema con este desarrollo en el que llevaban trabajando más de 3 años y que permite convertir el código PHP en código C++, que luego se compila con g++ para obtener un código objeto mucho más eficiente en consumo de recursos de lo que era el código PHP original, el resultado es un software de igual funcionalidad, pero optimizado para un alto desempeño. De hecho, Facebook afirma que gracias a HipHop para PHP usa hasta 50% menos CPU que antes, Facebook sería más lento sin la ayuda de HipHop para PHP.
Tornado web Server
Tornado es un framework de servidor Web y está liberado bajo la licencia Apache versión 2, está escrito en Python y está diseñado para permitir el procesamiento de miles de conexiones simultaneas. Facebook no podría “sentirse” en tiempo real sin Tornado.
Protocolo XMPP
Extensible Messaging and Presence Protocol (XMPP) es un protocolo para comunicación en tiempo real, la cual sirve de base para un amplio rango de aplicaciones, incluyendo mensajería instantánea, información de presencia o también llamada “listas de contactos”, charlas con múltiples participantes, voz, video llamadas, colaboración, sindicalización de contenidos y enrutamiento generalizado de datos en XML.
El chat de Facebook y la integración con sistemas como Windows Live no sería posible sin XMPP con DIGEST-MD5.
Bueno ahora que ya saben Facebook no es solo PHP y no sería posible sin el uso de todas las tecnologías antes mencionadas.
Google
Google es una compañía estadounidense fundada en septiembre de 1998 cuyo
producto principal es un motor de búsqueda creado por Larry Page y Sergey Brin.
El término suele utilizarse como sinónimo de este buscador, el más usado en el
mundo. La característica más destacada de Google como buscador es su
facilidad de uso.
Escalabilidad: un sistema distribuido con varios subsistemas, dando servicio a
millones de usuarios.
Extensibilidad: el sistema debe funcionar en todo momento ya que es uno de los
motores de búsqueda más usados en todo el mundo.
Concurrencia: cuanto más rápida sea la búsqueda, mas búsquedas podrá hacer el
usuario, mayor exposición a la publicidad.
Transparencia: en cuanto a la capacidad de reutilizar la infraestructura
disponible, tanto internamente como externamente (plataforma como servicio).
Heterogeneidad: El sistema está compuesto por un grupo de servicios distribuidos
que ofrecen funcionalidad a los desarrolladores. Están divididos en las
siguientes categorías:
Paradigmas de comunicación, que incluyen
servicios para comunicaciones tanto remotas como multicast.
Protocol buffers: ofrecen un formato de
serialización común.
Publish-subscribe: servicio para la
diseminación de eventos.
Datos y coordinación, proporciona
almacenamiento y acceso coordinado a datos.
GFS: ofrece un sistema de ficheros
optimizado para las necesidades de Google, incluyendo el almacenamiento de
ficheros de gran tamaño.
Chubby: soporta la coordinación de
servicios y el almacenamiento de volúmenes pequeños de datos.
Bigtable: base de datos distribuida
construida sobre GFS/Chubby.
Computación distribuida, proporciona
servicios para el uso de computación paralela y distribuida sobre la
arquitectura física.
MapReduce: soporta computación distribuida
sobre conjuntos de datos grandes.
Sawzall: es un lenguaje de alto nivel para
la ejecución de computaciones distribuidas.
Pinterest
es una de las mayores redes sociales
visuales, en la cual es posible compartir imágenes, vídeos, infografías y todo
tipo de contenidos que sean predominantemente visuales. Además, la mayoría de usuarios
que tienen un proyecto online o están pensando en crearlo la utilizan como
“cajón de ideas”.
Escalabilidad: es un sistema escalable ya que es visto como un negocio para la
mayoría de sus usuarios. Y por esto tiene mejor perspectiva de crecimiento.
Extensibilidad: el sistema funciona en todo momento y esto se ve reflejado en su
crecimiento.
Concurrencia: es un sistema optimizado ya que debido aque necesita tener acceso continuo sus operaciones deben sincronizarse de forma que sus datos permanezcan consistentes.
Transparencia: en cuanto a la capacidad de reutilizar la infraestructura
disponible, tanto internamente como externamente (plataforma como servicio).
Heterogeneidad: El sistema está compuesto por un grupo de servicios distribuidos
que ofrecen funcionalidad a los desarrolladores.
Paradigmas de comunicación, que incluyen
servicios para comunicaciones tanto remotas como multicast.
Publish-subscribe: servicio para la
diseminación de eventos.
Datos y coordinación, proporciona
almacenamiento y acceso coordinado a datos.
Chubby: soporta la coordinación de
servicios y el almacenamiento de volúmenes pequeños de datos.
Computación distribuida, proporciona
servicios para el uso de computación paralela y distribuida sobre la
arquitectura física.
Tolerancia a fallos: este Sistema Distribuido puede detectar, ocultar y recuperarse de fallos que puedan ocurrir en la red
Referencias:
- COULOURIS, George y otros (2001) Sistemas Distribuidos. Conceptos y Diseño. España: Pearson Educación.
- TANEMBAUM, Andrew y VAN STEEN, Maarten (2008) Sistemas Distribuidos. Principios y Paradigmas. México, Pearson Educación.
- http://vis.usal.es/rodrigo/documentos/sisdis/teoria/10-google.pdf
Presentado por:
Johnny Canabal Rivera
Jorge Julio Emiliani
Estudiantes de Ingenieria de Sistemas
Fundacion Universitaria Tecnologico Comfenalco