jueves, 26 de febrero de 2015

Grid Computing

La computación grid es una tecnología innovadora que permite utilizar de forma coordinada todo tipo de recursos (entre ellos cómputo, almacenamiento y aplicaciones específicas) que no están sujetos a un control centralizado. En este sentido es una nueva forma de computación distribuida, en la cual los recursos pueden ser heterogéneos (diferentes arquitecturas, supercomputadores, clusters...) y se encuentran conectados mediante redes de área extensa (por ejemplo Internet). 

El problema central en que se enfoca Grid es que se puedan compartir los recursos de forma coordinada y aportar una solución al problema en organizaciones virtuales multi institucionales. El sharing al que se refiere no es el mero intercambio de archivos de forma exclusiva sino que también importa el acceso directo a procesadores, programas, datos y otros recursos como sean requeridos en la solución a problemas y estrategias de resourcebrokering que emergen de la industria, la ciencia y la ingeniería. El sharing debe efectuarse a través de altos controles a proveedores de recursos y consumidores definiendo de forma clara y cuidadosa qué recursos compartieron, quién está habilitado a compartir y las condiciones bajo las cuales se efectuará. El conjunto de individuos y/o instituciones definidas por las reglas de sharing.
Organizaciones virtuales se componen de aquellas instituciones, individuos y organizaciones que comparten un objetivo común. Para lograr este objetivo recurren a compartir sus recursos lo cual significa el acceso directo a computadoras, programas, archivos, datos, sensores y redes. A esto denominamos sharing y el mismo debe estar controlado, ser seguro, flexible y a menudo limitado en un cierto tiempo 

Sharing

El sharing de los recursos es condicional: cada dueño de los recursos hace disponible el mismo sujeto a condiciones de cuándo, dónde, y qué es lo que puede realizarse. Los consumidores de recursos pueden colocar condiciones en propiedades de los recursos para los cuales ellos están preparados para trabajar. Las relaciones de sharing pueden variar dinámicamente sobre el tiempo en términos de recursos involucrados, la naturaleza de los accesos permitidos y los participantes que tienen accesos permitidos. Estas no son a menudo simplemente de tipo cliente-servidor, por peer to peer: los proveedores pueden ser clientes y las relaciones de sharing pueden existir sobre un subconjunto de participantes. Además pueden combinarse de forma coordinada sobre muchos recursos, cada uno perteneciente a diferentes organizaciones. La habilidad de delegar en vías controladas se torna importante en algunas situaciones como hacer mecanismos para coordinar operaciones a través de múltiples recursos. Un mismo recurso puede usarse de diversas formas dependiendo de las restricciones situadas en el lugar desde donde se comparten y sus objetivos. Por ejemplo una computadora puede usarse solamente para correr piezas de software específicas en un arreglo de sharing mientras que éste puede proveer ciclos genéricos de operación en otra. En el contexto de una red la interoperabilidad se refiere a protocolos comunes. Nuestra Arquitectura Grid es primeramente una arquitectura de protocolos que definen los mecanismos básicos para cada usuario de las Organizaciones virtuales  y la negociación de recursos, establecimiento, manejo y la utilización de las relaciones de sharing. La arquitectura basada en estándares facilita la extensibilidad, interoperabilidad, portabilidad y el sharing de código; los protocolos estándares hacen más fácil definir servicios estándares que provean capacidades. Se pueden construir interfaces de aplicaciones para programación y kits de desarrollo de software que provean abstracciones de programación requeridas para crear una Grid usable.

A través de la interoperabilidad se asegura que las relaciones de sharing puedan iniciarse en partes arbitrarias, acomodándose dinámicamente a nuevos participantes sobre diferentes plataformas, lenguajes y entornos de desarrollo. La definición de un protocolo especifica cómo los elementos distribuidos de sistemas interactúan en orden de devolver un comportamiento específico y la estructura del intercambio de información durante su interacción. Las Organizaciones virtuales  tienden a fluir y se notan ciertos cambios: los mecanismos usados localizan recursos y se establecen y reconocen identidades, por ello la determinación de autorizaciones e iniciación del sharing debe ser flexible y liviano de forma que el arreglo de sharing de recursos pueda establecerse y cambiarse fácilmente.


Características del Grid



Un Grid computacional es una infraestructura hardware y software que suministra al que lo utiliza:

1. Acceso seguro a todos los niveles: capacidad de cómputo, de integridad de datos, de seguridad de acceso, etc.

2. El servicio debe ser consistente, basado en estándares y de esta manera el acceso y las operaciones sobre el Grid estarán definidos por dichos estándares evitando la heterogeneidad.

3. La idea de penetración no es tanto la posibilidad de acceder a cualquier recurso del Grid sino que una vez conectado desde cualquier punto puede extraer de éste toda la potencia que requiera.

4. Por último el acceso y el uso del Grid debe tener un coste económico que le haga atractivo para que su utilización se universalice.


Campos de Aplicación

Los posibles campos de aplicación podrían ser:
Supercomputación Distribuída: Simulaciones, Herramientas de cálculo numérico, Procesos de análisis de datos, Extracción de conocimientos de almacenes de datos, etc.
Sistemas Distribuídos en Tiempo Real: Medicina (tratamiento de imagen para visión artificial)
Proceso Intensivo de Datos: Gestores de bases de datos distribuidos
Servicios Puntuales: Este tipo de aplicaciones son aquellas que permiten acceder a hardware específico para la realización de labores a distancia.
Entornos Virtuales de Colaboración: Teleinmersión


Arquitectura del Grid Computing  

La arquitectura propuesta es una arquitectura de protocolos que definen los mecanismos básicos que permiten a los usuarios y a los recursos negociar, establecer, gestionar y explotar la compartición de recursos. Es una arquitectura abierta basada en un estándar que facilita la extensibilidad, la interoperatividad, la portabilidad y la compartición de código.




En el nivel de infraestructura es donde se encuentran los recursos computacionales, como son los ordenadores, los clusters, los supercomputadores, los sistemas de almacenamiento en red, las bases de datos, etc. (suministra los componentes que serán compartidos).  

El nivel de conectividad incluye los protocolos de comunicación y seguridad que permiten a los recursos computacionales comunicarse. La seguridad es un punto muy importante de la computación en Grid por su propia naturaleza distribuida ya que se comparten recursos entre distintas organizaciones que pueden tener distintas políticas de seguridad. 

El nivel de recurso se centra en la gestión de un único recurso y permite tener información y control sobre el mismo. En este nivel se encuentran los protocolos que permiten obtener la información de un recurso: las características técnicas, la carga actual, el precio, etc. También se encuentran los protocolos que permiten el control del recurso: el acceso al mismo, el arranque de procesos, la gestión, la parada, la monitorización, la contabilidad de uso y la auditoria del recurso.
La capa de recursos engloba todos los servicios que permiten gestionar un conjunto de recursos. Se encuentran los servicios de directorio, que permiten localizar los recursos que son de nuestro interés; los schedulers distribuidos, que permiten asignar las tareas a cada recurso; la monitorización y diagnóstico de la ejecución de las distintas tareas en que se distribuyen la ejecución de una aplicación; la contabilidad, que permite calcular el coste de la utilización de varios recursos heterogéneos, el acceso a datos distribuidos, etc.  

El último nivel es el de aplicación donde se encuentran los protocolos que permiten a las aplicaciones el acceso a la infraestructura del Grid a través de las distintas capas. Según el tipo de aplicación será necesario conectarse a las distintas capas o acceder directamente a una de ellas e incluso a la de infraestructura.

Ventajas de la Grid
  • Gran poder de procesamiento. Al combinar el poder de varias computadoras se puede procesar más datos.
  • Aprovechamiento de recursos existentes. Se puede usar computadoras en los momentos en que no son utilizadas para que ayuden con el procesamiento de datos en la grid.
  • No hay límite por espacio físico. Los equipos que forman la grid pueden estar a gran distancia entre sí. Incluso pueden estar en diferentes continentes.
  • Brinda flexibilidad ante posibles fallos. Si una máquina que forma parte del grid falla, el sistema lo reconoce y envía los datos no procesados a otra máquina.
  • Ahorro en costos. Cuando se necesita una gran capacidad de procesamiento incurrir en gastos de equipos con ese poder no es una buena idea para medianas y pequeñas compañías por lo que una Grid es una opción viable y considerablemente más barata.


Desventajas de la Grid

  • Necesita de algunos servicios para poder funcionar: internet, conexión las 24 horas los 365 dias del año con banda ancha, seguridad informática.
  • Aun no existen muchas aplicaciones que hagan uso de la potencia de un Grid.
  • Comunicación lenta y no uniforme.
  • Dificultad para sincronizar los procesos de todos los equipos.
  • Su utilidad se limita para procesamiento en paralelo. Por ahora no es apto para bases de datos transaccionales ni para el procesamiento complejo en serie.
  • Algunos tipos de aplicación no pueden ser puestos en forma paralela. Aquí existe el dilema de que tipo de problema se puede resolver con el Grid y cual no.


Algunos Proyectos en desarrollo bajo el sistema Data Grid

Globus Project: es una iniciativa multi-institucional para la investigación y el desarrollo de tecnologías fundamentales para Grids

TeraGrid: Es un proyecto estadounidense, llevado adelante por la Fundación Nacional de Ciencias (NSF). Dedicado a la investigación científica abierta

CrossGrid: En este proyecto se han definido cuatro aplicaciones que utilizarán desarrollos Grid comunes, que son: 1) Simulación interactiva y visualización de un sistema biomédico; 2) Sistema de apoyo a un equipo de crisis por inundaciones; 3) Análisis de datos distribuidos en Física de Altas Energías y 4) Previsión meteorológica y modelización de la contaminación atmosférica.

OpenMolGRID: Desarrollado por ComGenex Inc., un proveedor de descubrimientos químicos avanzados, tiende a proporcionar información unificada y extensible del entorno para solucionar las cuestiones moleculares de diseño e ingeniería con relación a la química, la farmacia y la bioinformática.

UK e-Science: Los responsables de la iniciativa elaboraron un conjunto de procedimientos que permitirán que los científicos que utilicen Grid accedan a las bases de datos de los resultados de investigación procedentes de sistemas que se encuentren en cualquier parte del mundo. [E-SCIENCE]

EGEE: El proyecto utilizará la tecnología Grid para interconectar recursos computacionales de veintisiete países europeos, con el objeto primordial de unir los recursos de los equipos informáticos de las instituciones participantes y crear de este modo un supercomputador virtual, aprovechando la infraestructura de comunicación de banda ancha proporcionados por la Red Europea de Investigación Géant. [EGEE]

http://exa.unne.edu.ar/informatica/SO/Grid.pdf

http://cristophermoquillaza.blogspot.com/2009/09/sistema-informatica-grid-grid-computing.html

https://apuntescomputacion.wordpress.com/2008/08/16/%C2%BFque-es-y-como-funciona-un-grid/

http://www.unlu.edu.ar/~tyr/tyr/temporal/computaci%F3n_grid-luz-otros.pdf



Cloud Computing (nube)

Es un sistema informático basado en Internet y centros de datos remotos utilizado para gestionar servicios de información y aplicaciones. Los usuarios de este servicio tienen acceso de forma gratuita o de pago todo depende del servicio que se necesite usar.

La Cloud Computing permite que los consumidores y las empresas gestionen archivos y utilicen aplicaciones en cualquier computadora con acceso a Internet sin necesidad de instalarlas. Esta tecnología ofrece un uso mucho más eficiente de recursos, como almacenamiento, memoria, procesamiento y ancho de banda, al proveer solamente los recursos necesarios en cada momento. El servidor y el software de gestión se encuentran en la nube (Internet) y son directamente gestionados por el proveedor de servicios. De esta manera, es mucho más simple para el consumidor disfrutar de los beneficios.

¿Cómo funciona el Cloud Computing?

La Cloud Computing se sustenta en tres pilares fundamentales: software, plataforma, e infraestructura. Cada pilar cumple un propósito diferente en la nube y cubre distintas áreas de productos y servicios para empresas y particulares de todo el mundo.

Software como servicio (SaaS): desde el punto de vista del usuario, es una aplicación del proveedor. Ejemplos de ello son Google Applications, SalesForce, Webex o Veeva

Plataforma como servicio (PaaS): para el despliegue de aplicaciones del cliente en la infraestructura del proveedor, haciendo uso de sus recursos. Ejemplos de ello son Google App Engine (Python, Java), Engine Yard (Ruby on Rails) o Heroku (Ruby).

Infraestructura como servicio (IaaS): el alquiler de recursos como procesamiento, almacenamiento y capacidad de red. Ejemplo de ello son Amazon WebServices (EC2, S3, SimpleDB, etc), o RackSpace Cloud. 



El cliente puede en todo momento decidir qué aplicaciones usar y elegir entre aquellas que son gratuitas y las que no lo son. En el caso de las aplicaciones de pago, el coste irá en función de diversas variables, como el servicio contratado, el tiempo que se ha usado ese servicio, el volumen de tráfico de datos utilizado, etc.

Características del Could Computing

Una de las principales diferencias del Could Computing es que no hay necesidad de conocer la infraestructura detrás de esta.

Entre otras características podemos mencionar:
  • Auto Reparable: En caso de fallo, el último backup de la aplicación pasa a ser automáticamente la copia primaria y se genera uno nuevo.
  • Escalable: Todo el sistema/arquitectura es predecible y eficiente. Si un servidor maneja 1000 transacciones, 2 servidores manejaran 2000 transacciones.
  • Regidos por un Acuerdo de Nivel de Servicio (SLA) que define varias políticas como cuales son los tiempos esperados de rendimiento y en caso de pico, debe crear más instancias.
  • Virtualizado: las aplicaciones son independientes del hardware en el que corran, incluso varias aplicaciones pueden corren en una misma maquina o una aplicación puede usar varias máquinas a la vez.
  • Multipropósito: El sistema está creado de tal forma que permite a diferentes clientes compartir la infraestructura sin preocuparse de ello y sin comprometer su seguridad y privacidad.


Algunos ejemplos de Cloud Computing

Varias son las grandes empresas que se han dedicado a ofrecer estos servicios, promoviendo el fácil acceso a nuestra información, los bajos costos, la escalabilidad y muchas características que nos hace pensar en la comodidad que nos brindan, entre ellas podemos mencionar:
Google Apps: brinda el servicio de aplicaciones para empresas como Gmail, Google Talk, Google Calendar y Google Docs, etc.

Amazon Web Services: los servicios que ofrece son el Amazon EC2™, Amazon S3™, SimpleDB™, Amazon SQS™.

Azure de Microsoft: ofrece servicios de sistema operativo, hosting, sistemas para desarrollo.

Rackspace, una famosa empresa de hosting, está detrás de Mosso una compañía la cual ofrece un paquete de básico de hosting y a partir de este se escala según se necesite (y sin migrar de servidores). Recientemente Rackspace adquirió a JungleDisk, un popular cliente para Amazon S3 y que a futuro estará integrándose con CloudFiles, otro servicio de Mosso.

Ventajas:
  • Acceso a la información y los servicios desde cualquier lugar.
  • Servicios gratuitos y de pago según las necesidades del usuario.
  • Empresas con facilidad de escalabilidad.
  • Capacidad de procesamiento y almacenamiento sin instalar máquinas localmente.


Desventajas:
  • Acceso de toda la información a terceras empresas.
  • Dependencia de los servicios en línea.

·          
Tipos de “Nube” Existentes

Existen diversos tipos de nube dependiendo de las necesidades de cada empresa, el modelo de servicio ofrecido y la implementación de la misma, pero básicamente existen tres grandes grupos:

· Nubes Públicas: se refieren al modelo estándar de computación en nube, donde los servicios que se ofrecen se encuentran en servidores externos al usuario, pudiendo tener acceso a las aplicaciones de forma gratuita o de pago.

· Nubes Privadas: la plataforma se encuentra dentro de las instalaciones de la empresa y no suele ofrecer servicios a terceros. En general, una nube privada es una plataforma para la obtención solamente de hardware, es decir, máquinas, almacenamiento e infraestructura de red (IaaS), pero también se puede tener una nube privada que permita desplegar aplicaciones (PaaS) e incluso aplicaciones (SaaS). Las nubes privadas son una buena opción para las compañías que necesitan alta protección de datos y ediciones a nivel de servicio. En las nubes privadas el cliente controla qué aplicaciones usa y cómo. La empresa es la propietaria de la infraestructura y puede decidir qué usuarios están autorizados a utilizarla.

· Nubes Híbridas Las nubes híbridas combinan recursos locales de una nube privada con la nube pública. La infraestructura privada se ve aumentada con los servicios de computación en nube de la infraestructura pública. Esto permite a una empresa mantener el control de sus principales aplicaciones y aprovechar la computación en nube publica solamente cuando resulte necesario.

domingo, 22 de febrero de 2015

WS SOAP Y WS REST

A hora de crear dichos servicios nos encontramos con dificultades, aquí algunos que pueden ser de ayuda

SOAP
Tener en cuenta que debe estar como recurso incrustado


Tener presente estas indicaciones:

REST
No olvidar el marcado para este servicio, click derecho al servicio:


Ingresar lo siguiente: Factory="System.ServiceModel.Activation.WebServiceHostFactory" 



SERVICIOS WEB

Se trata de una tecnología relativamente reciente, existen múltiples definiciones de lo que es un sistema software para considerarse servicio web (SW); una muy sencilla sería hablar de ellos como un conjunto de aplicaciones o de tecnologías con capacidad para interoperar en la Web proporcionando mecanismos de comunicación entre diferentes aplicaciones; En general, los servicios web son sólo APIs Web que pueden ser accedidas en una red, como internet, y ejecutadas en un sistema de hosting remoto. Los SW, constituyen una avance tecnológico que no está ligado a ninguna tecnología, ya que una de sus premisas es la interoperabilidad multiplataforma. Un SW es más una idea, un concepto cuya implementación debe respetar una serie de reglas e interfaces para poder ser accedido por cualquier sistema conectado a la red, siempre que disponga de permiso para ello. Intuitivamente un Web Service es similar a un sitio web que no cuenta con un interfaz de usuario y que da servicio a las aplicaciones en vez de a las personas. Un Web Service, en vez de obtener solicitudes desde el navegador y retornar páginas web como respuesta, lo que hace es recibir solicitudes a través de un mensaje formateado en XML desde una aplicación, realiza una tarea y devuelve un mensaje de respuesta también formateado en XML. Creando una capa de Web Services sobre una aplicación corporativa existente, las organizaciones podrán permitir que sistemas externos puedan invocar las funciones de la aplicación a través de Internet (o una intranet corporativa) sin tener que modificar la aplicación misma. Por ejemplo, varias compañías están hoy en día creando Web Services que actúan como front end para aplicaciones de entrada de órdenes que están residentes internamente en un mainframe. Estas compañías permiten a los sistemas de compras de sus clientes enviar órdenes de compra a través de la Internet. Poner una capa de web services sobre las aplicaciones existentes es una solución muy interesante para integrar las aplicaciones desarrolladas por los diferentes departamentos y así reducir los costos de integración." 

REQUISITOS DE UN SW

Un servicio web debe satisfacer los siguientes requisitos: 
 Proporcionarnos un servicio remoto para poder ser usado desde distintas plataformas (Interoperabilidad)  Adecuarse al medio actual; Internet 
 No debe haber ambigüedad en el tipo de datos del mensaje enviado y recibido (Interfaces tipificadas) 
 Debería poder ser construida sobre un estándar de Internet ampliamente adoptado para aprovechar los conjuntos de herramientas y productos existentes creados para dicha tecnología.
 Tiene que dar soporte a distintos lenguajes de programación (Java, Visual Basic, PERL,….) 
 No debe estar ligada a ninguna estructura de componentes; Los protocolos subyacentes deberían proporcionar un nivel base de comunicación entre infraestructura de objeto distribuidos existentes.  

ELEMENTOS DE UN SW.

Los SW, constituyen un avance tecnológico que no está ligado a ninguna tecnología, ya que como hemos nombrado uno de sus requisitos es la interoperabilidad multiplataforma. Un SW es más una idea, un concepto cuya implementación debe respetar una serie de reglas e interfaces para poder ser accedido por cualquier sistema conectado a la red, siempre que disponga de permiso para ello. Fuera de la implementación tenemos una serie de partes bien diferenciadas que hay que tener en cuenta a la hora de utilizar un SW. En la siguiente imagen quedan reflejadas y su conexión.





JSON sus incovenientes a la hora de la prueba (testeo)

A la hora de realizar pruebas de WS REST, uno de los inconvenientes que se presenta es cuando la data lo estructuramos en formato JSON,por ejemplo:


Imaginemos el tiempo que tomaría buscar alguna mala estructuración o se haya olvidado algo por no contar con la experiencia en JSON, mas aun cuando los datos pueden ser del tipo int, string o double, etc. ya que no son lo mismo por ejemplo tipo string: \"Nombre\":\"Juan\" el tipo int: \"DNI\":88152222

Primero creamos el objeto:

Luego realizamos la serialización de dicho objeto:


Finalmente quedaria de esta manera:



sábado, 21 de febrero de 2015

Manejo de colas con MSMQ

Uno de los puntos a tener en cuenta en el manejo de colas es la recepción de todos los mensajes que se encuentra en cola.

Lo  primero es crear el envío del mensaje

Ingresamos a nuestra administración de equipos para visualizar los mensajes creados que son 3 pero podrían ser mas. Ademas el servicio que va recepcionar estos mensajes no debería hacer 3 o mas ejecuciones para poder obtenerlo. 


Ante esta situación y gracias a los blogs, este método nos fue de aporte a la hora de resolver esta situación.


Por ultimo se crea la recepción del mensaje.



Nuevamente ingresamos a nuestra administración de equipos y se visualizara que los mensajes fueron recepcionados.



:


MSMQ

En WCF para su transporte de cola y comunicación en cola utiliza MSMQ.
En MSMQ, las colas pueden ser transaccionales o no transaccionales. Una cola transaccional permite capturar los mensajes y entregarlos en una transacción y, a continuación, almacenarlos de manera duradera en la cola. Los mensajes enviados a una cola transaccional se transfieren con precisión una vez en orden. Puede utilizar una cola no transaccional para enviar tanto los mensajes volátiles como los duraderos. Un mensaje enviado a una cola no transaccional no posee ninguna garantía de transferencia de confianza, por lo que puede perderse.
Las colas de MSMQ también pueden protegerse utilizando una identidad de Windows registrada con el servicio de directorio Active Directory. Al instalar MSMQ puede instalar la integración de Active Directory, para lo que es necesario que el equipo forme parte de una red de dominios de Windows.

Propósito
La tecnología de Message Queue Server (MSMQ) permite que las aplicaciones que se ejecutan en diferentes momentos puedan comunicarse a través de redes heterogéneas y sistemas que pueden encontrarse desconectados temporalmente. Las aplicaciones envían mensajes a las colas y leen los mensajes de las colas. La siguiente ilustración muestra cómo una cola puede contener mensajes que se generan por varias aplicaciones que envían y leen por varias aplicaciones receptoras.


Casos
Message Queue Server proporciona una entrega garantizada del mensaje, enrutamiento eficaz, seguridad y mensajería basada en prioridades.
Se puede utilizar para aplicar soluciones a escenarios asíncronos y síncronos que requieren un alto rendimiento. La siguiente lista muestra varios lugares donde se puede utilizar Message Queue Server.

  • Servicios financieros de misión crítica: por ejemplo, el comercio electrónico.
  • Embedded y aplicaciones portátiles: por ejemplo, que subyace en las comunicaciones hacia y desde dispositivos embebidos que el equipaje de ruta a través de los aeropuertos a través de un sistema de equipaje automático.
  • Flujo de trabajo: Message Queue Server hace que sea fácil de crear un flujo de trabajo que se actualiza en cada sistema. Un patrón de diseño típico es implementar un agente que interactue con cada sistema. El uso de una arquitectura de flujo de trabajo-agente también minimiza el impacto de los cambios en un sistema en los otros sistemas. Con Message Queue Server, el acoplamiento débil entre los sistemas hace que la actualización de sistemas individuales sean simples.