Conexión a la nube (Connecting to the cloud), Parte 2: Cómo realizar el modelo de nube híbrido

Paso de los datos de la cola JMS a una cola SQS en Amazon

Esta es la Parte 2 de una serie de tres partes sobre conexión a la nube. A fin de determinar cuál es la mejor solución para crear una aplicación de nube híbrida, la Parte 1 analizó algunas de las ofertas de los principales proveedores de plataformas de nube. En el presente artículo, la Parte 2 de la serie, usted podrá implementar la aplicación de nube híbrida, que combina componentes de aplicaciones locales con la computación en nube. La aplicación utiliza una cola JMS a nivel local y una cola SQS en la nube, combinando ambas para formar una única aplicación híbrida.

Mark O'Neill, CTO, Vordel

Mark O'Neill is CTO at Vordel, an XML Networking company. He is also author of the book "Web Services Security" and contributing author to "Hardening Network Security", both published by McGraw-Hill/Osborne Media. Mark is responsible for overseeing Vordel's product development roadmap and also advises Global 2000 firms and governments worldwide on their tactical and strategic adoption of XML, Web Services and SOA technologies. He holds degrees in mathematics and psychology from Trinity College Dublin and graduate qualifications in neural network programming from Oxford University. Mark lives in Boston, Massachusetts.



04-08-2011

Modelo híbrido

En este artículo, restringí el enfoque para la creación de una aplicación de nube híbrida a un proveedor de servicios de nube: Amazon. La aplicación de muestra, denominada HybridCloud, toma datos de una cola JMS y los pasa a una cola Amazon SQS, que se encuentra alojada en la nube de Amazon. Una vez que se encuentran en la cola Amazon SQS, los datos pueden ser extraídos por otra aplicación con derechos sobre dicha cola.

Para ubicar esto en contexto, observemos un ejemplo. Piense en una organización médica que requiere el procesamiento de radiografías mediante una aplicación de procesamiento de imágenes. La organización médica graba las radiografías de manera segura en una cola Amazon SQS, donde las mismas quedan almacenadas de manera temporaria. Si bien el tamaño de archivo de cada radiografía es muy grande, esto no representará un problema para un proveedor de computación en nube. Al mismo tiempo, la aplicación de procesamiento de imágenes consume la cola, leyendo las radiografías a medida que se las coloca en ella. La aplicación de procesamiento de imágenes, que demanda una capacidad de procesamiento significativa, podrá idealmente implementarse en un entorno virtualizado (una nube privada) a la cual se podrá agregar capacidad rápida y fácilmente. Una vez procesadas por la aplicación de procesamiento de imágenes, las radiografías se vuelven a colocar en una cola diferente, que será recibida por la aplicación médica. Si bien el objeto de este ejemplo son las radiografías, es posible utilizar cualquier tipo de datos. Resulta claro que las radiografías plantean importantes cuestiones de privacidad y seguridad. La Parte 3 de esta serie de artículos analizará la seguridad y el control de la nube.

Siglas frecuentemente utilizadas

  • FTP: File Transfer Protocol (Protocolo de transferencia de archivos)
  • API: application programming interface (Interfaz de programación de aplicaciones)
  • HTTP: Hypertext Transfer Protocol (Protocolo de transferencia de hipertextos)
  • JMS: Java™ Message Service (Servicio de mensajería Java)
  • JNDI: Java Naming and Directory Interface (Interfaz de nombrado y directorio Java)
  • REST: Representational State Transfer (Transferencia de estado representacional)
  • SQS: Simple Queue Service (Servicio de colas simple)
  • URL: Uniform Resource Locator (Localizador uniforme de recursos)
  • XML: Extensible Markup Language (Lenguaje de marcas extensible)

Las ventajas de esta arquitectura incluyen:

  • El sistema no depende de que el procesador de colas (aplicación médica) y el lector de colas (aplicación de procesamiento de imágenes) se encuentren en línea al mismo tiempo. Si los archivos fueran simplemente transferidos mediante FTP de una aplicación a otra, el sistema fallaría si cualquiera de las partes saliera de línea. Al utilizar la cola Amazon SQS, el sistema adquiere resiliencia.
  • Es posible agregar capacidad en cualquier lado de la solución, sin afectar el funcionamiento del sistema como un todo. Por ejemplo, usted puede aumentar la capacidad informática del lado de la aplicación de procesamiento de imágenes, y así duplicar la velocidad del procesamiento de imágenes. Este cambio es transparente a las aplicaciones médicas, que continúan grabando sus archivos de radiografías en la cola Amazon SQS.
  • Este modelo híbrido constituye la ruta más recomendada para los arquitectos que consideren el uso de la computación en nube. Más que una solución de todo o nada, que coloca todo en una plataforma de computación en nube o evita totalmente la computación en nube, la mejor opción consiste en elegir qué es lo que resulta útil de la computación en nube para utilizarlo de manera táctica. Del lado de la aplicación local, la virtualización (nube privada) hace que resulte relativamente sencillo agregar capacidad de manera dinámica, lo cual es importante para aplicaciones centradas en procesadores como la de procesamiento de imágenes. Del lado de la nube, el servicio Amazon SQS brinda un servicio de colas entre aplicaciones, incluso cuando las mismas se encuentran en redes no conectadas.

Cómo identificarse en el servicio de nubes Amazon SQS

Su aplicación Java HybridCloud utiliza Amazon SQS (ver Descargas para obtener un código fuente de la aplicación). La conexión desde la aplicación HybridCloud a la nube Amazon SQS utiliza servicios web validados. Existen dos motivos principales para esta validación: en primer lugar, cobra por el uso de Amazon SQS y, por lo tanto, debe mantener un registro de los usos individuales; en segundo término, el acceso a las diferentes colas debe estar controlado. En el caso de nuestra aplicación HybridCloud, es claro que el acceso por parte de terceros a colas Amazon SQS con radiografías de particulares no resultaría adecuado.

El primer paso para usar la cola Amazon SQS consiste en convertirse en un usuario de Amazon Web Services (AWS), para lo cual se debe contar con una cuenta en Amazon.com. Tener esta cuenta es algo bastante usual:—toda persona que haya comprador alguna vez un libro en el sitio Amazon.com ya posee una cuenta en Amazon.com. Sin embargo, la cuenta en Amazon.com es sólo el primer paso. AWS requiere el uso de una identidad con “Accesskey” y una clave secreta asociada.

La Accesskey secreta del modelo Amazon Web Services puede considerarse como un secreto que comparten Amazon.com y el desarrollador que se conecta a los servicios de Amazon Web. La identidad con Accesskey, por el contrario, no es un secreto, ya que se utiliza para identificación y no para autenticación. En la Parte 3, usted podrá analizar más detalladamente estas dos claves, así como los modelos de autenticación alternativos utilizados por otros proveedores de computación en nube.

Una vez que el desarrollador ha abierto una cuenta en Amazon Web Services, y ha obtenido su ID con Accesskey y su Accesskey Secreta, puede suscribirse a los servicios específicos. En este caso, vamos a suscribirnos al servicio de Amazon SQS.com. Para utilizar servicios tales como SQS, el desarrollador deberá ingresar un número de tarjeta de crédito en Amazon Web Services. Los detalles de esta tarjeta quedarán almacenados en Amazon, no pudiendo ser ingresados simplemente cuando exista una cuenta pendiente.—Este es un modelo de “pago según el uso”. Si usted intenta acceder al servicio SQS sin haberse previamente suscripto al servicio, verá una notificación de excepción con el siguiente texto: "La ID con Accesskey de AWS exige una suscripción para acceder a este servicio".


Diseño de su aplicación híbrida

Como ya se describiera en el inicio, la aplicación híbrida procesa datos a nivel local y utiliza el servicio de nube Amazon SQS. Por lo tanto, contiene un componente local y un componente de nube. En este diseño de aplicación, los datos son recuperados a nivel local desde una Cola JMS (quizás proveniente de una aplicación de la computadora central) y luego son enviados a la cola Amazon SQS utilizando los métodos GET y POST de HTTP. Se podrá utilizar Java como lenguaje de la aplicación.

La aplicación posee tres partes principales:

  1. Crear la cola Amazon SQS.
  2. Leer los datos locales (de una cola JMS) y colocarlos en la cola Amazon SQS.
  3. Recuperar los datos de respuesta desde la cola Amazon SQS.

Observe las similitudes que se muestran en Cómo aprovechar Amazon SQS SQS, en relación con los snippets de código para la aplicación, entre el manejo de la conexión a la cola JMS local y la conexión a la cola SQS Amazon.


Cómo aprovechar Amazon SQS

En su aplicación Java HybridCloud, en primer lugar ingrese las clases Amazon SQS (ver Listado1).

Listado 1. Importación de clases Amazon SQS
Import com.amazonaws.queue.*;

La aplicación HybridCloud utiliza Amazon SQS para ingresar datos a una cola, y luego volver a leerlos desde esa cola. La conexión a Amazon SQS se realiza sobre una conexión autenticada a servicios web, donde el cliente se identifica por medio de su ID con Accesskey de Amazon y queda autenticado mediante la ID con clave secreta Amazon. Para poder utilizar Amazon SQS desde su código Java, deberá primero ingresar la ID con Accesskey de Amazon y la ID con clave secreta de Amazon en el código (ver Listado 2).

Listado 2. Configuración de claves Amazon
String accessKeyId = "12345678901234567890"; 
String secretAccessKey = "abcdefghijklmnopqrstuvwxyz";

A continuación, ejemplifique la implementación de Cliente HTTP en Amazon SQS, pasando la ID con Accesskey y la clave de acceso secreta como variables (ver Listado 3).

Listado 3. Ejemplificación de cliente http en Amazon SQS http
AmazonSQS service = new AmazonSQSClient(accessKeyId, secretAccessKey);

En este punto, usted ha ejemplificado un objeto cliente en Amazon SQS, pero aún no se ha conectado al servicio Amazon SQS en Internet. Este será el paso siguiente, donde usted creará la cola en el servicio de nube Amazon SQS.


Creación de la cola en Amazon SQS

Esta aplicación emplea una cola para almacenar archivos de radiografías. Antes de poder utilizar una Cola en Amazon SQS, usted deberá crearla. La cola debe tener un nombre que, en este caso, será "imageQueue". Aquí es donde si aplicación HybridCloud coloca los archivos de radiografías (ver Listado 4).

Listado 4. Creación de una cola en Amazon
CreateQueueRequest request = new CreateQueueRequest(); request.setQueueName("imageQueue");

Ahora, usted ejecutará un método del objeto de servicio Amazon SQS denominado createQueue, que crea la solicitud de HTTP GET (estilo REST) a Amazon Web Services para poder crear su propia cola (ver Listado 5).

Listado 5. Creación de una cola en Amazon
CreateQueueResponse response = service.createQueue(request);

Esto crea una invocación del estilo REST para un servicio web en Amazon SQS. Cuando usted ejecuta el código para crear la cola en Amazon SQS, será interesante examinar el URL estilo REST que se envía por cable a Amazon SQS. En este URL, usted podrá ver claramente la ID con Acceskey, la firma (que utiliza la ID con clave secreta), y la cola SQS real creada y denominada imageQueue. Por supuesto, la ID de clave secreta real no es enviada. El componente firma del mensaje (ver Listado 6) brinda la evidencia de posesión de la ID de clave secreta. Sólo el poseedor de la clave habría podido crear el componente firma.

Listado 6. Solicitud de servicio web de estilo REST que se envía a Amazon Web Services
queue.amazonaws.com?Action=CreateQueue&SignatureMethod=HmacSHA256&AWSAccessKeyId
=12345678901234567890&QueueName=imageQueue&SignatureVersion=2&Version
=2008-01-01&Signature=U859J2Hoi5qBqlQx1R18dKPgSgrgjlOiJIDD8ug9FPI%3D&Timestamp
=2009-04-01T03%3A25%3A13.575Z

La firma se crea no solamente utilizando el QueueName, sino también mediante su cálculo en un timestamp. Esto asegura que la solicitud a Amazon SQS no podrá ser capturada ni reproducida por un atacante que inite al usuario válido. Si un atacante reenvía la solicitud al servicio Amazon SQS, la repetición de la firma identificará la solicitud como un ataque de captura y reproducción, y Amazon Web Services la bloqueará.

En este momento, usted ha creado la cola imageQueue, en la cual cargará los datos de las imágenes. Ahora, obtendrá los datos de una cola JMS local. Esta cola local puede provenir de un entorno virtualizado (una nube local).


Recuperación de datos de la cola JMS local

Ahora que usted ha creado su cola en Amazon SQS, preste atención a los aspectos locales de esta aplicación híbrida. Deberá leer los datos desde una cola local antes de cargarlos en la cola de Amazon SQS. Resulta instructivo comparar los pasos utilizados para la cola local con los pasos necesarios para conectarse a la cola SQS de Amazon.

Se importan las bibliotecas Java necesarias: primero todos los jars JMS y luego el jar JNDI. Estos archivos permiten a su aplicación Java utilizar JMS (ver Listado 7).

Listado 7. Importación de clases JMS
import javax.jms.ConnectionFactory; 
import javax.jms.Connection; 
import javax.jms.Session; 
import javax.jms.MessageProducer; 
import javax.jms.MessageConsumer; 
import javax.jms.Queue; import javax.jms.Session; 
import javax.jms.Message; 
import javax.jms.TextMessage; 
//Required for JNDI. 
import javax.naming.*;

Usted utiliza JNDI para configurar el contexto de su conexión JMS. Por ejemplo: si usted lee datos del sistema de archivos, puede utilizar el código del Listado 8.

Listiado 8. Lectura de archivos desde una cola local
ConnectionFactory myConnFactory; 
Queue myQueue; 
Hashtable env; 
Context ctx = null;  
env = new Hashtable(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, 
"com.sun.jndi.fscontext.RefFSContextFactory"); 
env.put(Context.PROVIDER_URL, "file:///C:/Images");  
ctx = new InitialContext(env);

Ahora cree su cola y fábrica de conexiones Java (ver Listado 9):

Listado 9. Creación de la cola y la fábrica de conexiones
String MYCONNECTIONFACTORY = "MyConnectionFactory"; 
String MYQUEUE = "MyQueue"; 
myConnFactory = (javax.jms.ConnectionFactory) ctx.lookup(MYCONNECTIONFACTORY
= (javax.jms.Queue)ctx.lookup(MYQUEUE);

A continuación, cree una conexión, y luego una sesión dentro de esa conexión (ver Listado 10).

Listado 10. Creación de una conexión a la cola JMS local
Connection myConn = myConnFactory.createConnection(); 
Session mySess = myConn.createSession(false, Session.AUTO_ACKNOWLEDGE);

Para leer el mensaje de la cola (que en este caso involucra en última instancia la lectura desde el sistema de archivos, ya que se utiliza un identificador JNDI para el sistema de archivos), utilice el código del Listado 11.

Listado 11. Lectura desde una cola JMS local
MessageConsumer myMsgConsumer = mySess.createConsumer(myQueue); 
myConn.start(); Message msg = myMsgConsumer.receive();

Examinemos ahora los contenidos del mensaje que usted ha recuperado a nivel local (ver Listado 12).

Listado 12. Análisis de los contenidos del mensaje recuperado a nivel local
if
  (msg instanceof TextMessage) {TextMessage txtMsg = (TextMessage) msg; 
  String inputText = txtMsg.getText()); 
}

Por ultimo, cierre la conexión a la Cola JMS (ver Listado 13).

Listado13. Cierre de la conexión a la cola JMS local
mySess.close();
myConn.close();

En este momento, usted cuenta con los datos que desea para pasar a la cola de Amazon SQS en la serie (string) denominada inputText. Esto es lo que usted grabará a continuación en la cola de Amazon SQS.


Grabación en la cola de Amazon SQS

Los datos son pasados a la cola de Amazon SQS como un string. Si bien su dato es una imagen, igualmente se envía a Amazon SQS cono un string. Podrá verlo a continuación en el objeto SendMessageRequest que se utilize para enviar el mensaje a la cola de Amazon SQS (ver Listado 14).

Listado 14. Envío de un mensaje a la cola de Amazon SQS
SendMessageRequest sendRequest = new SendMessageRequest(); 
sendRequest.setMessageBody(inputText);

Además, usted deberá configurar el nombre de cola adecuado, que es el mismo que el nombre de la cola que usted creara anteriormente (ver Listado 15).

Listado 15. Configuración del nombre de la cola en Amazon SQS
sendRequest.setQueueName("imageQueue");

Ahora envíe su mensaje a la cola de Amazon SQS Queue utilizando el método sendMessage de su objeto Amazon SQS (ver Listado 16).

Listado 16. Envío de nuestros datos a la cola de Amazon SQS
SendMessageResponse response = service.sendMessage(sendRequest);

Lectura de la respuesta de Amazon SQS

El siguiente paso será la lectura de la respuesta de la cola de Amazon SQS. En primer lugar cree un objeto ReceiveMessageRequest (ver Listado 17).

Listado 17. Creación de un ReceiveMessageObject para recuperar los datos de la cola de Amazon SQS
receiveRequest = new ReceiveMessageRequest();

A continuación, determine el nombre de la cola (ver Listado 18).

Listado 19. Creación de un ReceiveMessageObject para recuperar los datos de la cola de Amazon SQS
receiveRequest.setQueueName("imageQueue");

Ahora, utilice el método receiveMessage para intentar recibir un mensaje de la cola de Amazon SQS (ver Listado 19).

Listado 19. Recepción de una respuesta de la cola de Amazon SQS
ReceiveMessageResponse response = service.receiveMessage(receiveRequest);

Para examinar este resultado, incluyendo la ID de mensaje y el cuerpo de mensaje de todos los mensajes recuperados de la nube (ver Listado 20), deberá pasarlo a un mensaje de salida estándar.

Listado 20. Análisis de la respuesta de la cola de Amazon SQS
if 
(response.isSetReceiveMessageResult()) {
ReceiveMessageResult  receiveMessageResult = response.getReceiveMessageResult(); 
java.util.List<Message> messageList = receiveMessageResult.getMessage(); 
for (Message message : messageList) { 
if (message.isSetMessageId()) {                   
    System.out.print("     MessageId");                         
	System.out.print("       " + message.getMessageId()); 	
	System.out.println();                     
	  }                     
if (message.isSetBody()) {                         
    System.out.print("            Body");  
	System.out.println();                         
	System.out.print("       " + message.getBody());                     
	System.out.println();                    
	  } 
}

Uso de una puerta XML para conectar las aplicaciones locales a la nube

En este artículo, usted ha utilizado el código Java para conectar una aplicación local a un entorno de computación en nube. Esta es la solución ideal para los desarrolladores pero, como parte de una aplicación, la conexión al servicio de computación en nube de Amazon no se encuentra bajo el control de un equipo de operaciones de red que pueda monitorear el uso, el tráfico o la disponibilidad. Además, cualquier cambio que se realice en la conexión a la computación en nube involucrará un cambio de código. Si bien se encuentra fuera del alcance del presente artículo, es posible lograr la misma conexión entre una cola JMS local y el servicio de nube Amazon SQS mediante una infraestructura de red, que coloque a la conexión bajo el control del personal de operaciones de red.

para conectar un componente de la aplicación local, como por ejemplo, una cola JMS, a la nube, se requiere una puerta XML que incluya conectores a computación en nube (consulte Recursos para ver un ejemplo de dicha puerta). la tarea de conectar una cola JMS a una cola de Amazon SQS implica arrastrar y soltar filtros de conexión en conjunto, de manera tal que los datos sean extraídos de la cola JMS y luego dirigidos al servicio de nube de Amazon.

Una analogía que resulta útil mencionar es la conocida televisión por cable. Su dispositivo conecta la infraestructura local (televisores) a la nube (operador de TV por cable). La puerta XML desempeña el rol del dispositivo de cable. Además de proveer la conexión a los servicios de nube, brinda el monitoreo y la seguridad para dicha conexión.


Resumen

Usted ha observado cómo una aplicación Java puede servir de puente entre una cola JMS local y la nube de Amazon SQS. Su aplicación HybridCloud utiliza recursos locales (una cola JMS) y recursos basados en la nube (Amazon SQS) para realizar un ejemplo de tarea de uso compartido de imágenes. Se emplean métodos relativamente similares para conectarse a la cola local y a la cola de Amazon SQS, aunque a nivel de la red, la conexión a Amazon SQS se envía con métodos GET y PUT de HTTP utilizando parámetros que pasaron dentro de los URL.

En la Parte 3, el final de esta serie, usted podrá analizar los problemas de control y seguridad que se originan en la computación en nube. Usted podrá ver modelos de autenticación utilizados por diversos proveedores de servicios de nube, y analizar los desafíos que surgen a partir de cuestiones relativas a la privacidad, el cumplimiento de normas administrativas y la protección de las amenazas de ataques de denegación de servicio.


Descargar

DescripciónNombretamaño
Hybrid Cloud Sample AppHybridCloud.zip3KB

Recursos

Aprender

Obtener los productos y tecnologías

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que se registra en developerWorks, se crea un perfil para usted. Información sobre su perfil (nombre, país/región y compañia) estará disponible al público y acompañará cualquiera de sus publicaciones. Puede actualizar su cuenta IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Lotus, SOA y servicios web
ArticleID=395668
ArticleTitle=Conexión a la nube (Connecting to the cloud), Parte 2: Cómo realizar el modelo de nube híbrido
publish-date=08042011