Introducción a la computación distribuida
Índice
- Introducción
- Objetivos
- 1.Fundamentos de la computación distribuida
- 1.1.Introducción a la computación distribuida
- 1.1.1.Compartición de recursos
- 1.1.2.Apertura
- 1.1.3.Concurrencia
- 1.1.4.Escalabilidad
- 1.1.5.Tolerancia a fallos
- 1.1.6.Transparencia
- 1.2.Modelo cliente-servidor
- 1.2.1.Middleware
- 1.3.Llamada a procedimiento remoto (RPC)
- 1.4.Invocación de métodos remotos (RMI)
- 1.4.1.Modelo de objetos
- 1.4.2.Modelo de objetos distribuidos
- 1.4.3.Java RMI
- 1.5.Servicios web
- 1.1.Introducción a la computación distribuida
- 2.Computación grid
- 2.1.Introducción a la computación grid
- 2.2.Concepto de organización virtual
- 2.3.El middleware
- 2.3.1.Gestión de la ejecución
- 2.3.2.Gestión de los datos
- 2.3.3.Servicios de información
- 2.3.4.Seguridad
- 2.4.Meta-scheduling
- 2.5.Estandarización
- 2.6.Computación grid frente a supercomputación
- 3.Computación cloud
- 3.1.Introducción a la computación cloud
- 3.2.Características de la computación cloud
- 3.3.Tipos de clouds
- 3.3.1.Clouds públicos
- 3.3.2.Clouds privados
- 3.3.3.Clouds de comunidad
- 3.3.4.Clouds híbridos
- 3.4.Modelos de servicio
- 3.5.Casos de uso
- 3.6.Virtualización
- 3.6.1.Tipos de virtualización
- 3.7.Computación cloud para altas prestaciones
- Bibliografía
Introducción
Objetivos
-
Conocer los fundamentos de la computación distribuida y saber diferenciarla de la computación de altas prestaciones tradicional.
-
Aprender las tecnologías básicas de sistemas distribuidos, como RPC, RMI y servicios web, que posibilitan el desarrollo de sistemas distribuidos a escala, como la computación grid o cloud.
-
Entender la motivación del desarrollo de la computación grid y saber identificar los componentes esenciales, como el concepto de organización virtual, el middleware y el meta-scheduling.
-
Entender las diferencias primordiales entre los sistemas de computación grid y los sistemas de altas prestaciones tradicionales.
-
Entender la motivación del desarrollo de la computación cloud y saber identificar los componentes esenciales, como el concepto de elasticidad, pagar por uso o la virtualización.
-
Aprender los tipos de clouds más importantes y los posibles modelos de servicio.
-
Entender las diferencias entre los sistemas de computación cloud y grid y los sistemas de altas prestaciones tradicionales, y cuáles son algunas de las posibilidades para aprovechar/combinar la computación cloud con la de altas prestaciones.
1.Fundamentos de la computación distribuida
1.1.Introducción a la computación distribuida
-
Compartición de recursos.
-
Apertura.
-
Concurrencia.
-
Escalabilidad.
-
Tolerancia a fallos.
-
Transparencia.
1.1.1.Compartición de recursos
1.1.2.Apertura
-
Las interfaces software clave del sistema están claramente especificadas y se ponen a disposición de los desarrolladores, es decir, las interfaces se hacen públicas.
-
Los sistemas distribuidos abiertos se basan en la provisión de un mecanismo uniforme de comunicación entre procesos e interfaces publicadas para acceder a recursos compartidos.
-
Los sistemas distribuidos abiertos pueden construirse a partir de hardware y software heterogéneo, posiblemente proveniente de vendedores diferentes. Pero la conformidad de cada componente con el estándar publicado debe ser cuidadosamente comprobada y certificada si se quiere evitar tener problemas de integración.
1.1.3.Concurrencia
1.1.4.Escalabilidad
1.1.5.Tolerancia a fallos
1.1.6.Transparencia
1.2.Modelo cliente-servidor
1.2.1.Middleware
1.3.Llamada a procedimiento remoto (RPC)
resultado = servicio_rpc (parámetros)
1.4.Invocación de métodos remotos (RMI)
1.4.1.Modelo de objetos
1.4.2.Modelo de objetos distribuidos
1.4.3.Java RMI
import java.rmi.*; public interface AddServerIntf extends Remote { double add(double d1, double d2) throws RemoteException; }
import java.rmi.*; import java.rmi.server.*; public class AddServerImpl extends UnicastRemoteObject implements AddServerIntf { public AddServerImpl() throws RemoteException { } public double add(double d1, double d2) throws RemoteException { return d1 + d2; } }
import java.net.*; import java.rmi.*; public class AddServer { public static void main(String args[]) { try { AddServerImpl addServerImpl = new AddServerImpl(); Naming.rebind("AddServer", addServerImpl); } catch(Exception e) { System.out.println("Exception: " + e); } } }
import java.rmi.*; public class AddClient { public static void main(String args[]) { try { String addServerURL = "rmi://" + args[0] + "/AddServer"; AddServerIntf addServerIntf = (AddServerIntf)Naming.lookup(addServerURL); System.out.println("The first number is: " + args[1]); double d1 = Double.valueOf(args[1]).doubleValue(); System.out.println("The second number is: " + args[2]); double d2 = Double.valueOf(args[2]).doubleValue(); System.out.println("The sum is: " + addServerIntf.add(d1, d2)); } catch(Exception e) { System.out.println("Exception: " + e); } } }
1.5.Servicios web
El W3C define los servicios web del siguiente modo:
“Un servicio web es un sistema de software diseñado para dar soporte a la interacción interoperable de máquina a máquina en una red. Tiene una interfaz descrita en un formato procesable por máquina, específicamente WSDL. Otros sistemas interactúan con el servicio web de una manera prescrita por su descripción, usando mensajes SOAP, típicamente transmitido a través de HTTP con una serialización XML en conjunción con otras normas relacionadas con la web”.
-
El nombre del servicio, incluyendo su URN (18) .
-
La localización del servidor, normalmente una dirección URL (19) por HTTP.
-
Los métodos disponibles para ser invocados.
-
Los parámetros de entrada y salida para cada uno de los métodos.
<definitions name="HelloService" targetNamespace="https://www.examples.com/wsdl/HelloService.wsdl" xmlns="https://schemas.xmlsoap.org/wsdl/" xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="https://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="https://www.w3.org/2001/XMLSchema"> <message name="SayHelloRequest"> <part name="firstName" type="xsd:string"/> </message> <message name="SayHelloResponse"> <part name="greeting" type="xsd:string"/> </message> <portType name="Hello_PortType"> <operation name="sayHello"> <input message="tns:SayHelloRequest"/> <output message="tns:SayHelloResponse"/> </operation> </portType> <binding name="Hello_Binding" type="tns:Hello_PortType"> <soap:binding style="rpc" transport="https://schemas.xmlsoap.org/soap/http"/> <operation name="sayHello"> <soap:operation soapAction="sayHello"/> <input> <soap:body encodingStyle="https://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/> </input> <output> <soap:body encodingStyle="https://schemas.xmlsoap.org/soap/encoding/" namespace="urn:examples:helloservice" use="encoded"/> </output> </operation> </binding> <service name="Hello_Service"> <documentation>WSDL File for HelloService</documentation> <port binding="tns:Hello_Binding" name="Hello_Port"> <soap:address location="https://www.examples.com/SayHello/"> </port> </service> </definitions>
-
Páginas blancas: contienen información general de la empresa/organización, como nombre, descripción, información de contacto, dirección y teléfono.
-
Páginas amarillas: es muy parecido a su equivalente telefónico; incluyen categorías de catalogación industrial, ubicación geográfica, etc. Existen unos códigos y claves preestablecidas que facilitan la inscripción en el registro y así se facilita a terceros la búsqueda de servicios mediante estos códigos de clasificación.
-
Páginas verdes: contienen información técnica sobre un servicio web. Normalmente incluye un puntero a la especificación externa y una dirección en la que invocar el servicio.
POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="https://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="https://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="https://www.example.org/stock"> <m:GetStockPrice> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>
HTTP/1.1 200 OK Content-Type: application/soap+xml; charset=utf-8 Content-Length: nnn <?xml version="1.0"?> <soap:Envelope xmlns:soap="https://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="https://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:m="https://www.example.org/stock"> <m:GetStockPriceResponse> <m:Price>34.5</m:Price> </m:GetStockPriceResponse> </soap:Body> </soap:Envelope>
2.Computación grid
2.1.Introducción a la computación grid
2.2.Concepto de organización virtual
2.3.El middleware
2.3.1.Gestión de la ejecución
2.3.2.Gestión de los datos
2.3.3.Servicios de información
2.3.4.Seguridad
2.4.Meta-scheduling
2.5.Estandarización
-
Elaboración de normas relativas a las redes.
-
Construcción de comunidades dentro de la red global (incluyendo su ampliación para alcanzar una participación más amplia de la academia y la industria).
-
Grupos de trabajo con un papel muy definido (en general, produce un estándar).
-
Grupos de investigación con un papel menos significativo que reúne a la gente para discutir desarrollos dentro de su campo y generar casos de uso y organizar grupos de trabajo.
-
Grupos de la comunidad.
-
GridFTP: ampliaciones en el protocolo de transferencia de archivos para la transferencia de datos a alta velocidad, segura y fiable.
-
Grid Laboratory Uniform Environment (GLUE): es un modelo de información independiente de la tecnología para una representación uniforme de los recursos en grid.
-
Single API for Grid Applications (SAGA): es una especificación de alto nivel para aplicaciones en red que describe una interfaz de programación de aplicaciones en grid.
-
Open Grid Services Architecture (OGSA): describe una arquitectura para un servicio orientado al entorno informático de red para uso empresarial y científico.
-
Distributed Resource Management Aplication API (DRMAA): es una especificación API de alto nivel para la presentación y el control de los trabajos en uno o más sistemas distribuidos de gestión de recursos (DRM) dentro de una arquitectura Grid.
-
Envío de trabajos descripción del lenguaje: una especificación ampliable XML para la descripción de las tareas simples por no interactivas sistemas informáticos de ejecución. La especificación se centra en la descripción de las propuestas de tareas computacionales en los tradicionales sistemas de computación de alto rendimiento, como programadores de lotes.
2.6.Computación grid frente a supercomputación
3.Computación cloud
3.1.Introducción a la computación cloud
-
La ilusión de infinitos recursos informáticos disponibles bajo demanda, eliminando así la necesidad de los usuarios del cloud de planear con anticipación la provisión de recursos necesarios.
-
La eliminación de un compromiso por adelantado de los usuarios del cloud, lo que permite a las empresas empezar despacio y aumentar los recursos de hardware solo cuando aumentan sus necesidades.
-
La posibilidad de pagar por el uso de los recursos informáticos (modelo pay-as-you go) a corto plazo, según sea necesario (por ejemplo, los procesadores por hora y el almacenamiento por día) y liberarlos cuando sea necesario, liberando de este modo máquinas y almacenamiento cuando ya no son útiles.
3.2.Características de la computación cloud
-
Flexibilidad: las empresas pueden contratar lo que necesitan en cada momento, dado que los requisitos de una empresa pueden depender de muchos factores y por lo tanto, ser muy variables. En un sistema tradicional, si por ejemplo se requería un sistema con mucha capacidad de computación durante un periodo reducido, no se podía amortizar su coste.
-
Coste: el modelo de pago por uso permite a las compañías reducir los costes fijos y las inversiones en tecnologías de la información, además de aprovechar al máximo su dinero, ya que pueden pagar exactamente por lo que necesitan. El precio de este tipo de servicios es competitivo gracias a la explotación de las economías de escala.
-
Subcontratación: el cloud permite externalizar responsabilidades relacionadas con la gestión de las tecnologías de la información, reduciendo así el personal que se necesita para llevar a cabo estas tareas.
-
Gestión de versiones: el cliente no ha de preocuparse de actualizar su infraestructura o comprar licencias de software más nuevas. El proveedor del servicio se encarga de la actualización de las licencias con los costes asociados.
-
Seguridad: el proveedor es el encargado de garantizar la seguridad del sistema y los datos, evitando que elementos externos u otros usuarios puedan acceder a él, aunque físicamente estén usando los mismos servidores. Además, se pueden ofrecer servicios de copias de seguridad de un modo transparente para evitar las pérdidas de datos en caso de fallo.
-
Disponibilidad: el proveedor debe garantizar que el servicio esté en funcionamiento durante el tiempo contratado. Este aspecto es crítico, dado que la actividad de una empresa no se puede detener por problemas informáticos. Para garantizar esto con el sistema tradicional habría que tener duplicidad de los elementos del sistema.
-
Especialización: el proveedor puede dar acceso a recursos (ya sean hardware o software) altamente especializados y potencialmente costosos (como por ejemplo FPGAS) por un intervalo de tiempo determinado. Esto facilita que el usuario pueda usar hardware o software avanzando que en condiciones normales no podría usar.
-
Presentación de los servicios a escala global: gracias a la replicación de servicios en diferentes lugares del mundo se puede hacer accesible la información con muy buena calidad de trabajo.
-
Las infraestructuras de computación cloud proporcionan una mejor capacidad de adaptación, recuperación completa de pérdida de datos mediante las copias de seguridad y acceso a la información en cualquier momento.
-
A un usuario que utilice una infraestructura con 100% de computación cloud no le debe preocupar el hardware que hay ni su mantenimiento; todo esto pasa a manos del proveedor del servicio, lo que requiere mucha menos inversión en hardware y software y permite empezar a trabajar más pronto.
-
Las implementaciones de las aplicaciones suelen ser mucho más rápidas, dado que muchas están hechas mediante sistemas base que permiten un cierto nivel de personalización.
-
Las actualizaciones del software no hay que hacerlas en las máquinas físicas, sino que se hacen automáticamente en el cloud. De este modo no se pierde tiempo en actualizaciones.
-
Ayuda a disminuir el consumo energético, dado que los centros de datos de las empresas no deben mantener sus servidores en marcha porque todo está externalizado.
-
La centralización de las aplicaciones y el almacenamiento de datos provoca una dependencia del proveedor de servicios.
-
La disponibilidad de los servicios y de los datos está vinculada a tener acceso a Internet; por lo tanto, si hubiera problemas de conexión no se podría acceder a ellos.
-
Los datos sensibles no son locales, lo que podría infringir parte de la ley de protección de datos, dado que exponen los datos a la posibilidad de robo de información.
-
La fiabilidad del servicio recae sobre la tecnología que utilizan los proveedores. Muchas veces el cliente no sabe qué sistemas son los que dan servicio y no sabe si podrían ser mejores por el mismo precio.
-
La seguridad es también un punto clave; la información debe pasar por diferentes nodos para llegar a su destino y en cada uno de estos nodos pueden existir vulnerabilidades.
3.3.Tipos de clouds
3.3.1.Clouds públicos
-
Disponibilidad: a partir de que se contrata el servicio, en un breve lapso de tiempo ya está disponible. Además, el proveedor se encarga de que una vez contratado este se halle disponible durante todo ese periodo de tiempo.
-
Pago por uso: permite contratar solo aquellos recursos que se necesitan, evitando así la necesidad de invertir en una infraestructura para suplir esta necesidad.
-
Variedad de servicios: permiten externalizar todas las funciones básicas del usuario.
-
Seguridad: el proveedor es el encargado de cumplir los requisitos de seguridad y protección de datos.
-
Mantenimiento: el proveedor es el encargado de mantener la arquitectura necesaria para proporcionar el servicio contratado.
-
Escalabilidad: permite aumentar o reducir los servicios según las necesidades del cliente a lo largo del tiempo y con un periodo de implementación corto.
3.3.2.Clouds privados
-
Reutilización: permite aprovechar inversiones de hardware y personal realizadas anteriormente.
-
Mayor tiempo de implantación que el cloud público: preparar la infraestructura de cloud y redimensionarla, dependiendo de las necesidades, requiere más tiempo que en el caso del cloud público, dado que el propio usuario debe encargarse de realizar estas gestiones.
-
Más especificidad: el cloud se puede diseñar ajustándose más a las necesidades concretas del usuario.
-
Gestión propia de los sistemas y los datos: esto implica que la empresa deberá encargarse del mantenimiento y la seguridad.
-
Ancho de banda: al poder situar el cloud dentro de la propia organización, se eliminan las restricciones de ancho de banda.
-
Seguridad: si el cloud es solo de uso interno del usuario, se puede mantener aislado de Internet, evitando así posibles ataques externos. También se obtiene mayor control sobre la gestión de la seguridad; el cloud público depende de la gestión que haga de él el proveedor.
3.3.3.Clouds de comunidad
-
Mayor cantidad de recursos que con un cloud privado, aunque generalmente menos que con un cloud público.
-
Especificidad: el diseño del cloud puede estar más ajustado a unas necesidades concretas, dado que las organizaciones que lo forman tienen puntos en común.
-
Seguridad: en términos de seguridad, tiene la ventaja respecto a los clouds públicos de ser de acceso más restringido. Aun así, es más abierto que los privados.
-
Menor gestión de la infraestructura y los datos que en un privado pero mayor que en un público.
-
Requiere inversión en hardware y software.
3.3.4.Clouds híbridos
-
Complejidad: al unir diferentes tipos de clouds la complejidad es mayor, dado que hay que integrar los diferentes clouds con sus tecnologías asociadas.
-
Flexibilidad y control: permite una mayor flexibilidad a la hora de prestar servicios, así como un mayor control de estos y de los datos.
-
Permite utilizar cada tipo de cloud para los servicios que se adapten mejor a las características de cada uno.
3.4.Modelos de servicio
3.4.1.Infraestructura como servicio (IaaS)
3.4.2.Plataforma como servicio (PaaS)
3.4.3.Software como servicio (SaaS)
-
Red como servicio (NaaS) (35) .
-
Almacenamiento como servicio (STaaS) (36) .
-
Datos como servicio (DaaS) (37) .
-
Entorno de pruebas como servicio (TeaaS) (38) .
3.5.Casos de uso
-
Se reduce el riesgo, dado que toda inversión implica un riesgo. La situación de una compañía siempre puede variar, ya sea debido a un elemento externo o interno. Además, no se puede garantizar que esta inversión se pueda amortizar. Por ello se opta por el pago de servicios, porque estos son costes a corto plazo y pueden anularse o modificarse si en un futuro se cree necesario.
-
Conseguir ventaja competitiva. En empresas pequeñas o medianas, el cloud permite el acceso a las empresas a recursos que de otra manera habrían estado fuera de su alcance debido al gran coste que pueden tener.
-
Como el cloud todavía está en un proceso de implantación, las empresas optan por adherirse a él antes que su competencia para poder aportar un valor mayor que las otras. Este valor lo pueden conseguir, por ejemplo, obteniendo mejores herramientas de gestión que les permitan mejorar su producto o servicio, o consiguiendo herramientas que les permitan un mejor contacto con los clientes.
-
Reducción del personal necesario para el mantenimiento, aunque este también puede ser externo en el sistema tradicional.
-
Espacio físico de los elementos de hardware: el usuario de cloud público no necesita un espacio físico para mantener los servidores porque estos son virtualizaciones de los servidores del proveedor.
-
Se evita el mantenimiento tanto de hardware como de software, dado que el proveedor se encarga de mantener los servicios actualizados y funcionando.
3.6.Virtualización
3.6.1.Tipos de virtualización
-
Virtualización CPU.
-
Virtualización de memoria y dispositivo.
-
Virtualización de entrada/salida.
-
Virtualización completa con traducción binaria.
-
Paravirtualización.
-
Virtualización asistida por hardware.
-
Facilidad de depuración. Los desarrolladores pueden probar nuevos sistemas operativos en máquinas estables y también pueden depurar su código con más eficacia debido al aislamiento de los diferentes sistemas. La recuperación también es más rápida mediante el uso de versiones guardadas de los clientes.
-
Balanceo de la carga y reubicación. Las máquinas virtuales se pueden migrar entre equipos para equilibrar la carga de trabajo. También permiten agregar diferentes recursos para mejorar la eficiencia.
-
Consolidación de servidores. Una única máquina física puede ejecutar muchas máquinas virtuales. Cada máquina virtual tiene su propio acceso a la raíz y puede elegir los tipos de aplicaciones/servicios que se ejecuten sin depender de otros usuarios. Esto también provoca que se maximice la utilización de los sistemas multiprocesador. El arranque de un sistema operativo resulta tan simple como iniciar una aplicación.
-
Menor coste de propiedad. La utilización óptima de los recursos físicos reduce el coste total de propiedad de las empresas, así como los costes de formación de los empleados gracias a la reconfiguración mínima de los sistemas. Los usuarios pueden ejecutar productos heredados en un entorno seguro en nuevas arquitecturas ahorrando en los costes de refinamiento de la aplicación.
-
Menor consumo de energía e infraestructura de refrigeración. La utilización eficiente de recursos se traduce en un uso óptimo de la energía y la reducción de sus costes. Disponer de una infraestructura más reducida nos permite una eficaz refrigeración de los centros de datos con menos sistemas de aire acondicionado, lo que reduce los costes energéticos.
-
Hipervisor Xen/monitor de máquinas virtuales.
-
Dominio privilegiado/conductor (Dom 0 en la figura).
-
Dominios de usuario/invitados (Dom U en la figura).
-
Cada dominio recibe una porción específica de los recursos de la máquina física. Esta distribución de recursos puede ser arbitraria, equitativa o seguir alguna directiva de usuario. El VMM puede optar por restringir el acceso a algún dispositivo físico de un dominio invitado o incluso puede crear un dispositivo virtual que no existe.
-
El VMM ofrece dispositivos virtuales a los dominios. La fabricación de un dispositivo es de importancia secundaria, dado que se trata de un dispositivo de tipo general, un dispositivo de red o un dispositivo de bloques en caso de dispositivos de almacenamiento.
-
El VMM es capaz de modificar partes de la arquitectura de acogida que son difíciles de virtualizar. Esto requiere cambios en el sistema operativo invitado, pero no software de usuario.
-
Gestión de los diferentes dispositivos.
-
Manipulación de las máquinas virtuales invitadas y la reconfiguración de diferentes recursos, como CPU, memoria, etc.
-
Diseño de políticas.