Arquitectura Facebook

May 13, 2019 | Author: Julio Blanco Monterroso | Category: Apache Hadoop, Computing, Tecnología, Software, Computer Engineering
Share Embed Donate


Short Description

Diseño y Arquitectra de Facebook a grandes rasgos....

Description

Universidad Mariano Gálvez de Guatemala, Villa Nueva Ingeniería en Sistemas de Información Diseño de Sistemas Ing. Mauricio Estrada

SOA y Arquitectura de Facebook

Brenda Alvarez

5190-12-1825

Julio Blanco

5190-12-8425

Cristian Gomez

5190-12-13360

Qué es SOA:

SOA (Arquitectura orientada a servicios) es un marco de trabajo conceptual que establece una estructura de diseño para la integración de aplicaciones, que permite a las organizaciones unir los objetivos de negocio, en cuanto a flexibilidad de integración con sistemas legados y alineación directa a los procesos de negocio, con la infraestructura de TI. Esto permite la reducción de costos de implementación, innovación de servicios a clientes, adaptación ágil ante cambios y reacción temprana ante la competitividad, ya que, combinan fácilmente las nuevas tecnologías con aplicaciones independientes, permitiendo que los componentes del proceso se integren y coordinen de manera efectiva y rápida.

Beneficios de SOA: 









Aplicaciones más productivas y flexibles: La estrategia de orientación a servicios, permite a TI conseguir una mayor productividad de los recursos TI ya existentes (aplicaciones y sistemas instalados o los más antiguos), y obtener mayor valor de éstos para la organización. Desarrollo de aplicaciones más rápido y económico: Gracias a la integración flexible de todos los datos, esfuerzos de ingeniería incrementales y la creación de un repositorio de servicios utilizables que se pueden combinar en servicios de mayor nivel, se logra una aceleración en el desarrollo de proyectos de TI y una disminución en los costos del desarrollo de soluciones y de los ciclos de prueba, pues se eliminan redundancias y se consigue su puesta en valor en menos tiempo. Aplicaciones más seguras y manejables: SOA proporciona una infraestructura y documentación común, para desarrollar servicios seguros, predecibles y gestionables, además de facilitar la posibilidad de añadir nuevos servicios y funcionalidades para gestionar los procesos de negocios críticos. Puesto que se accede a los servicios y no a las aplicaciones, SOA optimiza las inversiones realizadas en TI potenciando la capacidad de introducir nuevas capacidades y mejoras. Minimización del riesgo de tiempo de inactividad o pérdidas de datos: Esto debido a que ofrece rendimiento, escalabilidad, seguridad y alta disponibilidad sin precedentes. Mejora de la capacidad para innovar y diferenciarse: Mediante datos integrales, precisos y oportunos para desarrollar la nueva funcionalidad de forma rápida.

En resumen, la estrategia de orientación a servicios proporciona las condiciones para llevar a la empresa a niveles altos de competitividad y crecimiento, ya que a aporta la flexibilidad necesaria para mantener el éxito en el futuro, terminando además con la desintegración e inflexibilidad, la cual genera costos, reduce la capacidad de respuesta ante los clientes y afecta la productividad de la empresa.

 Arqu itect ur a de Faceb ook

Facebook se divide en varias fases: 



















Front-end web escrito en PHP. Compilador de HipHop de Facebook [1] entonces convierte en C++ y compila con g ++, proporcionando así una plantillas de alto rendimiento y capa de ejecución Web logic. Debido a las limitaciones de depender enteramente de compilación estática, Facebook comenzó a trabajar en un intérprete de hip-hop así como una máquina Virtual de HipHop que traducir el código PHP a HipHop ByteCode. Lógica de negocio se expone como servicios con ahorro [4]. Algunos de estos servicios se implementan en C++, Java o PHP dependiendo de los requerimientos de servicio (algunos otros idiomas probablemente se utilizan...) Servicios implementados en Java no utilizan ningún servidor de aplicaciones de empresa generalmente, sino que utilizan el servidor de aplicación personalizada de Facebook. Al principio que esto puede ver como rueda reinventada, pero como estos servicios son expuestos y consumidos sólo (o principalmente) utilizando el ahorro, la sobrecarga de Tomcat o Jetty incluso, era probablemente demasiado alta sin valor añadido significativo para su necesidad. Persistencia se realiza utilizando MySQL, Memcached, HBase de Hadoop. Memcached es utilizado como una memoria caché para MySQL, así como una caché de propósito general. Procesamiento sin conexión se realiza utilizando Hadoop y colmena. Datos como el registro, haga clic y tránsito mediante Escribano se alimenta y son adición y almacenado en HDFS utilizando Escribano-HDFS, permitiendo análisis extendido utilizando MapReduce BigPipe es su tecnología personalizada para acelerar la representación de la página utilizando una lógica de yuxtaposición Barniz caché se utiliza para el proxy HTTP. He preferido por su alto rendimiento y eficacia. El almacenamiento de miles de millones de fotos publicadas por los usuarios es manejado por el pajar, una solución de almacenamiento de información ad-hoc desarrollada por Facebook que trae optimizaciones de nivel bajo y sólo anexar escribe.













Mensajes de Facebook está utilizando su propia arquitectura que se basa en particular en sharding de infraestructura y gestión de cluster dinámico. Persistencia y la lógica de negocio está encapsulado en supuesto 'Cell'. Cada célula encarga de una parte de los usuarios; las nuevas células pueden agregarse como popularidad crece. Persistencia se consigue utilizando HBase . Motor de búsqueda de mensajes en Facebook se construye con un índice invertido en HBase Detalles de la implementación del motor de búsqueda de Facebook son desconocidos lo que sé La búsqueda de typeahead utiliza una lógica de almacenamiento y recuperación personalizada Chat se basa en un servidor de Epoll desarrollado en Erlang y acceso mediante ahorro Han construido un sistema automatizado que responde al seguimiento alertas lanzando el apropiado flujo de trabajo de reparación, o escalada a los seres humanos si la corte no podía ser superado. Sobre los recursos provisionados para cada uno de estos componentes, se conocen algunos números e información:









Facebook se estima que posee más de 60.000 servidores. Su reciente centro de datos en Prineville, Oregon se basa enteramente diseñado hardware que fue recientemente presentado como Open Compute Project. 300 TB de datos se almacena en los procesos de Memcached Su cluster de Hadoop y colmena se hace de 3000 servidores con discos de 12 TB de 8 núcleos, 32 GB de RAM, que es un total de 24 núcleos de k, 96 TB de RAM y discos de PB 36 en caché hits 100 billones por día, 50 billones de fotos, objetos 3 trillones, 130 TB de registros por día a partir de julio de 2010 Facebook utiliza el tipo de arquitectura para aplicaciones distribuidas utilizando el modelo de N-capas.

Que es una aplicación distribuida: Es una aplicación con distintos componentes que se ejecutan separados, normalmente en diferentes plataformas conectadas

¿A qué se refiere la distribución?

La distribución se refiere a la construcción de software por partes, a las cuales le son asignadas un conjunto específico de responsabilidades dentro de un sistema. Esta distribución como bien enunciaba la definición formal, habla de que las partes o componentes se encuentran en entornos separados, sin embargo, lo que tiene implícito esta definición, es que para realizar esta separación física primero debe tenerse clara la separación lógica de las partes de una aplicación, esto quiere decir que programáticamente existe una forma de separar o agrupar los componentes.

¿Qué es una arquitectura en ambiente distribuido?

Describe la estructura y la organización de los componentes del software, sus propiedades y la conexión entre ellos para formar el sistema; la cantidad y la granularidad de comunicación que se necesita para la interacción y los protocolos de interfaz usada por la comunicación.

MODELO DE N-CAPAS

En una aplicación distribuida en n-capas los diferentes procesos están distribuidos en diferentes capas no sólo lógicas, sino también físicas. Los procesos se ejecutan en diferentes equipos, que pueden incluso residir en plataformas o sistemas operativos completamente distintos. Cada equipo posee una configuración distinta y está optimizado para realizar el papel que le ha sido asignado dentro de la estructura de la aplicación, de modo que tanto los recursos como la eficiencia global del sistema se optimicen. 1. Aplicaciones de una Capa: Las capas dentro de una arquitectura son nada más que un conjunto de servicios especializados que pueden ser accesibles por múltiples clientes y fácilmente reutilizables. 2.-Aplicaciones de dos capas: Se caracterizan por tener 2 asociaciones lógicas, que prestan servicios y que a la final son capas. En la primera capa se incluye a la presentación (Interface grafica) y a la lógica de negocios, toda la lógica la escribimos en las formas (en el onClick del botón por ejemplo), y accedemos a un servicio de datos para la gestión de los mismos, por lo general a un servidor de Base de Datos 3.-Aplicaciones de 3 Capas: Una aplicación de tres capas es una aplicación cuya funcionalidad puede ser segmentada en tres niveles lógicos (capas):  

Los servicios de presentación. Los servicios de negocios (Lógica de Negocios)

Los servicios de datos.

 ARQUITECTURA DE LAS APL ICACIONES DISTRIBUIDAS

Atendiendo al papel que los distintos elementos juegan dentro de la aplicación, distinguimos con claridad tres grupos lógicos en los que podemos agrupar elementos según su funcionalidad: 



La capa de servidor incluye aquellos elementos que se encargan de recibir las peticiones de datos o de acceso a servicios básicos del sistema y de suministrar a otros elementos la información solicitada. La capa de negocios encapsula las reglas de acceso a datos y la gestión de procesos internos de la aplicación.

La capa de presentación se encarga de la lógica necesaria para interactuar con el usuario de la aplicación.

¿Cómo es que Facebook logra administrar 100 petabytes de datos online?

La respuesta es: Apache Hadoop. No es un secreto que la red social Facebook almacena miles y miles de datos, exactamente unos 100 petabytes (100 millones de Gigabytes) hasta el momento. Tampoco es desconocido, por lo menos por los geeks más curiosos, que Facebook utiliza Apache Hadoop para administrar esos datos y lograr que estén disponibles en milésimas de segundos cada vez que son requeridos. Apache Hadoop es un framework de software para aplicaciones distribuídas, bajo licencia de software libre. El proyecto Hadoop es un desarrollo de alto nivel Apache que ha crecido con el aporte comunitario del grupo de desarrolladores que lo conforman, entre los que se destacó siempre uno de sus principales usuarios y aportantes: Yahoo! Este framework permite correr aplicaciones en grandes clusters de hardware dedicado utilizando una arquitectura donde la aplicación se divide en muchos pequeños fragmentos de trabajo, cada uno de los cuales se pueden ejecutar o volver a ejecutar en cualquier nodo del clúster En la actualidad empresas como AOL, eBay, Fox, IBM, LinkedIn o Twitter entre otras, utilizan Hadoop como solución para sus plataformas multiusuario. Durante el día de hoy se realizó la primera de dos jornadas de la Cumbre Hadoop, en San José California, donde uno de los ingenieros de Facebook, Andrew Ryan, destacó que la solución a uno de los principales problemas que suele presentar Hadoop fue resuelto con una solución propia. El problema de Hadoop se llama NameNode, un servicio en la arquitectura Hadoop que, según detallan en GigaOm, "maneja todas las operaciones de metadatos con el sistema de archivos distribuidos, pero que sólo se ejecuta en un único nodo. Si el nodo se cae, también lo hace, para todos los efectos, Hadoop, porque nada basado en HDFS (sistema de archivos propio de Hadoop) se logra ejecutar 100% correctamente". Andrew Ryan destacó que la solución de Facebook al problema de disponibilidad generado por NameNode se llama AvatarNode. Ryan comentó que comenzó a construir AvatarNode hace unos dos años (el nombre fue inspirado por el film de James Cameron) y que ahora está en producción.

La función de AvatarNode es sustituir a NameNode con una arquitectura de dos nodos, en la que uno actúa como una versión de espera si el otro baja. En la actualidad, el proceso de conmutación por error es manual, pero Ryan aseguró que "estamos trabajando para mejorar aún más AvatarNode e integrarlo con un marco general de alta disponibilidad que nos permita la conmutación por error desatendida, automatizada y segura." La solución de Facebook no es la definitiva ni la mejor que se pueda lograr de momento para la limitación de NameNode, pero según aclara Ryan, a pesar de que sólo el 10% de las paradas no planificadas de Facebook podrían evitarse con AvatarNode, más del 50% de los tiempos de inactividad planificados para el futuro podrán ser tolerados por esta arquitectura de alta demanda. Facebook no es la única empresa en resolver este problema. La empresa Appistry presentó un sistema de archivos totalmente distribuido hace un par de años que incluía la distribución de Hadoop MAPR, el cual también proporciona un sistema de archivos de alta disponibilidad. En tiempos de mega redes de datos y servicios en la nube, conocer desarrollos como éstos y que estén diseñados en plataformas libres nos permite tener un mejor panorama de lo que vendrá en el futuro de la distribución y administración de datos a gran escala

 Arqu itect ur a HADOOP

Hadoop consiste básicamente en el Hadoop Common, que proporciona acceso a los sistemas de archivos soportados por Hadoop. El paquete de software The Hadoop Common contiene los archivos .jar y los scripts necesarios para ejecutar Hadoop. El paquete también proporciona código fuente, documentación, y una sección de contribución que incluye proyectos de la Comunidad Hadoop. Una funcionalidad clave es que, para la programación efectiva de trabajo, cada sistema de archivos debe conocer y proporcionar su ubicación: el nombre del rack (más precisamente, del switch) donde está el nodo trabajador. Las aplicaciones Hadoop pueden usar esta información para ejecutar trabajo en el nodo donde están los datos y, en su defecto, en el mismo rack/switch, reduciendo así el tráfico de red troncal (backbone traffic). El sistema de archivos HDFS usa esto cuando replica datos, para intentar conservar copias diferentes de los datos en racks diferentes. El objetivo es reducir el impacto de un corte de energía de rack o de fallo de interruptor de modo que incluso si se producen estos eventos, los datos todavía puedan ser legibles.

Un clúster típico Hadoop incluye un nodo maestro y múltiples nodos esclavo. El nodo maestro consiste en jobtracker (rastreador de trabajo), tasktracker (rastreador de tareas), namenode (nodo de nombres), y datanode (nodo de datos). Un esclavo o compute node (nodo de cómputo) consisten en un nodo de datos y un rastreador de tareas. Hadoop requiere tener instalados entre nodos en el clúster JRE 1.6 o superior, y SSH.

Sistemas de archivos

Hadoop Distributed File System El Hadoop Distributed File System (HDFS) es un sistema de archivos distribuido, escalable y portátil escrito en Java para el framework Hadoop. Cada nodo en una instancia Hadoop típicamente tiene un único nodo de datos; un clúster de datos forma el clúster HDFS. La situación es típica porque cada nodo no requiere un nodo de datos para estar presente. Cada nodo sirve bloques de datos sobre la red usando un protocolo de bloqueo específico para HDFS. El sistema de archivos usa la capa TCP/IP para la comunicación; los clientes usan RPC para comunicarse entre ellos. El HDFS almacena archivos grandes (el tamaño ideal de archivo es de 64 MB ), a través de múltiples máquinas. Consigue fiabilidad mediante replicado de datos a través de múltiples hosts, y no requiere almacenamiento RAID en ellos. Con el valor de replicación por defecto, 3, los datos se almacenan en 3 nodos: dos en el mismo rack, y otro en un rack distinto. Los nodos de datos pueden hablar entre ellos para reequilibrar datos, mover copias, y conservar alta la replicación de datos. HDFS no cumple totalmente con POSIX porque los requerimientos de un sistema de archivos POSIX difieren de los objetivos de una aplicación Hadoop, porque el objetivo no es tanto cumplir los estándares POSIX sino la máxima eficacia y rendimiento de datos. HDFS fue diseñado para gestionar archivos muy grandes.9 HDFS no proporciona Alta disponibilidad.

Otros sistemas de archivo s

A junio de 2010, la lista de sistemas de archivos soportados incluye: HDFS: El sistema propio de Hadoop. Está diseñado para la escala de decenas petabytes de almacenamiento y funciona sobre los sistemas de archivos de base. Amazon S3. Éste se dirige a clusters almacenados en la infraestructura del servidor bajo demanda Amazon Elastic Compute Cloud. No hay conciencia de racks en este sistema de archivos, porque todo él es remoto. CloudStore (previamente llamado Kosmos Distributed File System), el cual es consciente de los racks. FTP: éste almacena todos sus datos en un servidor FTP accessible remotamente. HTTP y HTTPS de solo lectura.

Hadoop puede trabajar directamente con cualquier sistema de archivos distribuido, el cual puede ser montado por el sistema operativo subyacente simplemente usando la URL file://, sin embargo, esto tiene un precio: la pérdida de la localidad. Para reducir el tráfico de red, Hadoop necesita saber qué servidores están más próximos a los datos; esta información la pueden proporcionar los puentes específicos del sistema de archivos específico de Hadoop.

Job Tracker y Task Tracker: el motor MapReduce

Aparte del sistema de archivos, está el motor MapReduce, que consiste en un Job Tracker (rastreador de trabajos), para el cual las aplicaciones cliente envían trabajos MapReduce. El rastreador de trabajos (Job Tracker) impulsa el trabajo fuera a los nodos Task Tracker disponibles en el clúster, intentando mantener el trabajo tan cerca de los datos como sea posible. Con un sistema de archivos consciente del rack en el que se encuentran los datos, el Job Tracker sabe qué nodo contiene la información, y cuáles otras máquinas están cerca. Si el trabajo no puede ser almacenado en el nodo actual donde residen los datos, se da la prioridad a los nodos del mismo rack. Esto reduce el tráfico de red en la red principal backbone. Si un Task Tracker (rastreador de tareas) falla o no llega a tiempo, la parte de trabajo se reprograma. El TaskTracker en cada nodo genera un proceso separado JVM para evitar que el propio TaskTracker mismo falle si el trabajo en cuestión tiene problemas. Se envía información desde el TaskTracker al JobTracker cada poco minuto para comprobar su estado. El estado del Job Tracker y el TaskTracker y la información obtenida se pueden ver desde un navegador web proporcionado por Jetty. Si el Job Tracker fallaba en Hadoop 0.20 o anterior, todo el trabajo en curso se perdía. Hadoop versión 0.21 añadió algunos autoguardados al proceso; el rastreador de trabajo graba lo que está en el sistema de archivos. Cuando un Job Tracker comienza, busca datos para recomenzar el trabajo donde lo dejó. En versiones anteriores, todo el trabajo activo se perdía cuando se reiniciaba el Job Tracker.

Las limitaciones de esto son:

La asignación de trabajo de los seguidores de trabajo es muy sencilla. Cada rastreador de tarea tiene un número de plazas disponibles, llamadas ranuras o slots (por ejemplo, "4 slots"). Cada mapa activo o cada “reduce” toma (ocup a) una posición. El Rastreador de Trabajo asigna trabajo para el seguidor más cercano a los datos con una ranura disponible. No hay ninguna consideración de la carga activa actual de la máquina asignada, y por tanto de su disponibilidad real.

Si una tarea de seguimiento es muy lenta, se puede retrasar toda la operación MapReduce -especialmente hacia el final de un trabajo, donde todo puede estar a la espera de una sola tarea lenta-. Con la ejecución especulativa activada, sin embargo, una tarea simple puede ejecutarse en múltiples nodos esclavos. Así que esta tecnología permite una conexión en red muy eficiente. Programación de tiempo

Por defecto Hadoop usa el método FIFO para programar la realización de trabajos desde una cola de trabajo. En la versión 0.19 el job scheduler (programador de trabajos) fue refactorizado fuera de Hadoop, lo cual añadió la habilidad de usar un programador alternativo.10

Programador justo

El fair scheduler (programador justo o limpio) fue desarrollado por Facebook. El objetivo del programador es proporcionar rápida respuesta para trabajos pequeños y calidad de servicio (QOS, en sus siglas en inglés) para trabajos de producción. El fair scheduler se basa en 3 conceptos básicos:11

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF