Cultured Perl: Perl y la nube Amazon - Parte 1

Aprenda los aspectos básicos de los servicios S3 y SimpleDB de Amazon diseñando un sitio simple para compartir fotos

Este manual, que está dividido en cinco partes, le enseña cómo crear un sitio Web simple para compartir fotos utilizando Perl y Apache para acceder a los servicios Simple Storage Service (S3) y SimpleDB de Amazon. En esta parte, tomará conocimiento de los beneficios y los contratiempos que tienen S3 y SimpleDB, adentrándose en sus arquitecturas y comenzando a diseñar su sitio para compartir fotos.

Teodor ZlatanovGold Software Systems

Teodor Zlatanov egresó en 1999 de la Universidad de Boston con una licenciatura en ingeniería en computación. Trabaja como programador desde 1992 usando Perl, Java, C y C++. Sus intereses son el trabajo con código abierto sobre análisis de texto, las arquitecturas de bases de datos, las interfaces de usuarios y la administración de sistemas UNIX.



29-07-2011

Usted desea saber más sobre dos de los servicios web de Amazon: Amazon S3 (Simple Storage Service) y SimpleDB. ¿Qué mejor forma de aprender sobre ellos que usándolos? En este caso, usted creará un sitio simple para compartir fotos.

El objetivo no es crear un sitio bien diseñado. Eso ya se hizo muchas veces. Crear una página de Internet es difícil, y los aspectos técnicos son sólo parte de la ecuación.

¿Cómo sacar el mayor provecho de este manual?

Para entender este manual es necesario contar con conocimientos básicos en HTTP y HTML y conocimientos intermedios en JavaScript y Perl (dentro de un proceso mod_perl en Apache). También resulta útil tener conocimientos en bases de datos relacionales, almacenamiento en disco y redes. A medida que se va avanzando con este manual, se empiezan a tratar aspectos más técnicos. Por lo tanto, diríjase a la sección denominada Resources si necesita ayuda con alguno de esos temas.

Utilizaré share.lifelogs.com como el nombre principal. Analicemos Amazon S3.

Generalidades sobre Amazon S3

Hace ya bastante tiempo que soy® administrador de UNIX. Por ende, puedo decirles que los servicios de almacenamiento de archivos y copias de seguridad no son simples. Si desconoce el significado de siglas como SAN, NAS, LUN, LVM, RAID, JBOD, IDE y SCSI, alégrese. Pero si conoce el significado de estas siglas, seguramente las suele mencionar muy por lo bajo y espera que aparezcan nuevas y mejores formas de gestionar datos, ya que pasó tres meses tratando de recuperar los archivos que estaban en una copia de seguridad DLT corrupta que tenía cuatro años de antigüedad. Y no lo digo porque me haya pasado.

IBM y Amazon Web Services

Cloud ofrecen una forma de desarrollar aplicaciones dentro de un entorno virtual, donde la capacidad informática, el ancho de banda, el almacenamiento, la seguridad y la confiabilidad no son un problema— y usted no necesita instalar el software en su sistema. Dentro de un entorno informático virtual, usted puede desarrollar, implementar y gestionar aplicaciones. Además, sólo pagará por el tiempo y las capacidades que utilice y le será muy fácil adaptarse a las cambiantes necesidades o a los cambiantes requisitos de negocios.

IBM se asoció con Amazon Web Services para brindarle acceso a los productos de software de IBM dentro del entorno virtual denominado Amazon Elastic Compute Cloud (EC2). Nuestras ofertas de software en EC2 incluyen lo siguiente:

  • DB2® Express-C 9.5
  • Informix® Dynamic Server Developer Edition 11.5
  • WebSphere® Portal Server y Lotus® Web Content Management Standard Edition
  • WebSphere sMash

Este es un código a nivel del producto, con todas las características y las opciones activadas. Obtenga mayor información y baje Amazon Machine Images para estos productos desde IBM developerWorks Cloud Computing Resource Center.

Para mayor información sobre Cloud computing, vea la página Cloud Computing for Developers en developerWorks.

Amazon S3 (Simple Storage Service) es un sistema de almacenamiento distribuido. Si desea confiar en Amazon para el almacenamiento de sus datos, se le facilitará un poco la vida. Pero por supuesto que usted se puede encargar de hacer sus propias copias de seguridad. La seguridad también puede ser un problema: Colocar datos en S3 significa que usted tiene que utilizar el sistema de control de acceso de S3, que quizá no se adapte a sus requisitos de autenticación y autorización. Vea la documentación de S3 que aparece en la sección denominada Resources para más información.)

¿Entonces qué le ofrece S3? S3 utiliza una clave de usuario (una cadena larga y aparentemente aleatoria) y una contraseña de usuario (otra cadena aparentemente aleatoria) para que usted pueda almacenar y recuperar archivos. Usted debe pagar de acuerdo con la política de precios de Amazon S3 (que figura en la página de Internet de Amazon). No es demasiado caro, si se lo compara con los costos de tener su propio NAS o SAN o discos locales. Por lo tanto, el costo de S3 resulta ser bastante razonable.

Desde principios del 2009, los datos de S3 se almacenan en dos centros de datos de Amazon (los centros de los Estados Unidos de Norteamérica y de la Unión Europea), que tienen una muy buena conectividad de red. Si desea hacer que sus datos estén disponibles para una gran cantidad de usuarios fuera de los Estados Unidos de Norteamérica y la Unión Europea, usted debería realizar pruebas con un servicio al estilo de Gomez o Keynote, que sirven para determinar el rendimiento mundial. Incluso dentro de los Estados Unidos de Norteamérica y la Unión Europea, si su negocio depende de la capacidad de permitir que sus datos estén disponibles de manera rápida y confiable, usted debería configurar pruebas diarias de rendimiento por medio de dichos servicios.

El principal problema de los sistemas de almacenamiento distribuido es su latencia de actualización. Esto es el tiempo que existe entre las acciones del propietario de los contenidos y el momento en el que dichas acciones se propagan. Pero el tiempo que existe entre las acciones y la propagación no es la única preocupación posible. Es probable que la propagación no sea uniforme. Por lo tanto, sus clientes pueden llegar a ver contenidos diversos en momentos diferentes. Amazon garantiza la consistencia del servidor (es decir que sus clientes no tendrán acceso a datos corruptos, algo que usted debería tener en cuenta al evaluar S3). Por lo tanto, cuando suba, modifique o borre una imagen, no espere que esto se lleve a cabo de manera inmediata.

Hay bibliotecas Perl para acceder a S3 en CPAN (vea Resources). Net::Amazon::S3 es una buena opción, pero existe la posibilidad de que muchas otras opciones figuren en la página de recursos de S3 de Amazon. No necesitaremos utilizarlos, ya que nuestra integración S3 usa características de S3 para pasar por alto los códigos Perl cuando se suben contenidos. Además, existen muchas herramientas excelentes para acceder a S3 (como, por ejemplo, JungleDisk o S3Fox, una ampliación para Firefox) que hacen que sea fácil y conveniente gestionar sus datos sin utilizar Perl.


Ejemplo de Amazon S3

Ahora, pasemos a lo que le ofrece S3. Los archivos (denominados objetos por S3) se almacenan en sectores de almacenamiento. En cada sector de almacenamiento, el nombre del archivo (su clave) tiene que ser único. Usted puede agregar atributos al archivo (como "color" o "idioma"), pero estos no forman parte del nombre del archivo.

Supongamos que almacena una foto de la bandera norteamericana con el nombre "images/flag.png" en el sector de almacenamiento denominado "us.images.share.lifelogs.com" y la foto de la bandera alemana con el nombre "images/flag.png" en el sector de almacenamiento denominado "de.images.share.lifelogs.com". Ambas imágenes tienen el mismo nombre pero se encuentran en sectores de almacenamiento diferentes. Por lo tanto, sus usuarios pueden dirigirse a http://us.images.share.lifelogs.com.s3.amazonaws.com/images/flag.png para ver la bandera norteamericana o a http://de.images.share.lifelogs.com.s3.amazonaws.com/images/flag.png para ver la bandera alemana. Además, usted puede unir a de.images.share.lifelogs.com con de.images.share.lifelogs.com.s3.amazonaws.com en DNS (y hacer lo mismo para us.images.share.lifelogs.com), con el objetivo de que los usuarios ingresen sólo a http://us.images.share.lifelogs.com/images/flag.png o a http://de.images.share.lifelogs.com/images/flag.png para ver ambas banderas.

Tenga en cuenta que los nombres de los sectores de almacenamiento tienen que ser únicos en todas las cuentas de Amazon S3. Por lo tanto, no se recomienda usar nombres al estilo de "test" y "default". Califique el nombre del sector de almacenamiento utilizando el nombre completo del dominio de ser posible. Esto hace que sea más fácil identificar el sector de almacenamiento y usarlo en DNS. Además, los nombres de los sectores de almacenamiento son bastante limitados. Por lo tanto, no intente escribir una novela y hacerla pasar por el nombre del sector de almacenamiento. Utilice los mismos caracteres que usaría para el nombre de un dominio.

S3 es un servicio complejo. Por lo tanto, les recomiendo que lean la página de Internet de S3 antes de continuar.


Generalidades de Amazon

Esta es la parte en la que los disertantes profesionales y los profesores universitarios dicen una frase a los gritos con el objetivo de despertar a la persona que está roncando en primera fila porque se quedó hasta las 3 de la mañana tomando tequila: ¡LAS BASES DE DATOS SON IMPORTANTES!

¿Está despierto?

El flujo de datos (ordenados, filtrados, agregados, promediados o analizados) con el que tenemos que trabajar todos los días se puede transformar en un torrente de información imposible de gestionar. El hosting de estos datos es un trabajo de tiempo completo para los profesionales de IT. Necesitan contar con espacio libre, energía, copias de seguridad y muchos otros recursos. Es posible que el uso de bases de datos albergadas como SimpleDB valga la pena para su negocio como decisión financiera. Sólo explicaré los aspectos técnicos.

Un ejemplo simple de una base de datos es una lista de quehaceres sobre la puerta de la heladera. Cada uno de los puntos de la lista figura en una línea independiente. Además, algunos de estos puntos tienen una tilde al lado y otros están tachados. En las bases de datos relacionales tradicionales, esto puede tener la forma de dos tablas con dos columnas cada una:

Tabla 1. Tabla todo_foreign
ítemstatuscode (FK a status.statuscode, predeterminado, 0)
llamar a mamá0
llamar a IRS2
comprar leche1
Tabla 2. Tabla de estado
statuscodestatusdesc
0activo
1terminado
2borrado

Pero usted puede decir: "¡Un momento! ¿Qué pasa con la fecha en la que se completó o se modificó la tarea, la persona que la modificó y los tipos de datos?" Después de todo, para eso entrenamos administradores de bases de datos (DBA) poderosos e inteligentes. Ellos saben todo sobre los formularios normales, las claves extrañas y SQL. Seguramente ahora usted necesita que uno de ellos vea su diseño, ¿no es así?

"Sí. Gracias, Sr. Inteligente, pero deje mi ejemplo simple en paz. Luego, consuélese acariciando una copia de "Secretos de los dioses de SQL y RDBMS para tontos".

Amazon SimpleDB es una base de datos con atributos clave ampliamente distribuida. Queda claro que no sirve para todos los negocios y existen muchas restricciones al rendimiento y a la escalabilidad. Los atributos se limitan a 1 KB cada uno. Por lo tanto, el nombre de cada quehacer no puede pesar más de un kilobyte.

La seguridad también es importante. El sistema de control de acceso de SimpleDB es similar al sistema de S3. Un sitio social igual al sitio simple que usted creó gracias a este manual puede progresar con SimpleDB como el back-end de la base de datos. Sin embargo, usted debe evaluar sus requisitos de negocios, su presupuesto y sus necesidades de almacenamiento de datos para determinar si SimpleDB sirve para todo esto.

El problema de latencia de actualización de S3 que mencioné con anterioridad también afecta a SimpleDB. Sus actualizaciones no tienen efecto inmediato en todos los lugares.

Utilizando nuestro ejemplo de una base de datos simple, la estructura en SimpleDB sería:

Tabla 3. Estructura de quehaceres en SimpleDB
ÍtemEstado
llamar a mamáactivo
llamar al IRSborrado
comprar lecheterminado

Hasta ahora, todo esto está bastante claro. Esto es más simple que el primer ejemplo, ¿no? Entonces agreguemos otro punto:

get cowactive

Como puede observar, el estado está duplicado. La palabra activo ahora aparece dos veces en la base de datos. Esto puede resultar bastante grave en lo que se refiere al almacenamiento y al rendimiento en el caso de las tablas grandes. Por otra parte, cada columna del SimpleDB es autosuficiente gracias a su diseño. Cuando se observa una línea, se puede ver todo lo que contiene. No es necesario buscar la descripción del estado. Debido a la latencia de actualización de SimpleDB, esto es importante.


Más listas de quehaceres en SimpleDB

Supongamos que decide agregar un nuevo código de estado (wait until tomorrow) y aplicarlo a uno de los puntos que figuran en la tabla todo_foreign (Tabla 1, con las claves extrañas). Por lo tanto, ahora hay dos actualizaciones (una a la tabla de estado y una a la tabla todo_foreign). Si la actualización de la tabla de estado (Tabla 2) ocurre luego de la actualización de la tabla todo_foreign, usted obtendrá datos inconsistentes. Recuerde lo siguiente: SimpleDB no garantiza que sus actualizaciones aparezcan de manera inmediata en el orden que las realizó. Por lo tanto, además de cómo esto afecta al rendimiento, usted tendrá que realizar dos búsquedas (una para encontrar el punto en cuestión y otra para encontrar la descripción del código de estado). Por lo tanto, también es probable que obtenga datos inconsistentes.

Ésta es la clave de SimpleDB: Olvídese de las columnas en todo_simple (Tabla 2). ¡No tiene columnas! Lo que sí tiene son atributos para cada fila. Estos atributos no son estáticos y, por lo tanto, usted los puede agregar o borrar cuando lo desee. ¿Desea que sus quehaceres tengan una fecha de creación y una fecha de borrado? Simplemente, incluya esos atributos. En todo_foreign, se necesitarían dos columnas para hacer eso. Es probable que la fecha de borrado sea nula para así indicar que el punto en cuestión todavía está activo. Agreguemos otra columna para la fecha en la que se cumplió con el quehacer en cuestión. O quizá sólo se debería utilizar un código de estado y considerar a la fecha de borrado como la fecha en la que se cumplió con el quehacer en cuestión. ¿Qué hacemos entonces?

SimpleDB. ¿Necesita una fecha de creación? Incluya un atributo created_date. ¿Necesita una fecha de borrado? Asigne dicho atributo sólo a los puntos que se hayan borrado. La presencia del atributo nos indica que aplica a este punto.

Pare de pensar en columnas. Las filas de SimpleDB son más parecidas a los hash de Perl. Cada clave es una cadena. Cada valor es una cadena o un conjunto de cadenas. Probemos nuestro diseño una vez más:

Lista 1. todo_freeform
{ punto: "llamar a mamá" } 
{ punto: "llamar al IRS", deleted_date: "2009-03-01" } 
{ punto: "comprar leche", done_date: "2009-03-02" }

Tenga en cuenta que SimpleDB Item Name que, en este caso, sería el quehacer en cuestión en la forma de una cadena. Por ejemplo:

Lista 2. Lista de quehaceres en SimpleDB
"llamar a mamá" {  } 
"llamar al IRS" { deleted_date: "2009-03-01" } 
"comprar leche" { done_date: "2009-03-02" }

SimpleDB no permite la existencia de objetos que no tengan atributos. Por lo tanto, otorgue un atributo de created_date a todos los objetos. Por ejemplo:

Lista 3. Lista de quehaceres en SimpleDB con atributo de created_date
"llamar a mamá" { created_date: "2009-02-01" } 
"llamar al IRS" { created_date: "2009-02-01", deleted_date: "2009-03-01" } 
"comprar leche" { created_date: "2009-02-01", done_date: "2009-03-02" }

Pero usted puede decir: "Un momento. ¿Todo es una cadena? ¿No se ingresan datos de manera rígida? ¡Ah! ¡Ahora sí!"

Sí. Todo es una cadena. ¿No es genial?

Y también puede agregar un atributo de delete areas a cualquier punto borrado en esta tabla tres meses después de su puesta en vivo. No se va a romper nada y sólo los nuevos códigos que conozcan este atributo tendrán que utilizarlo.

Voy a hacer una pausa dramática en este momento para que los DBA se tomen un par de aspirinas. Mientras tanto, los programadores de Perl les ofrecen vasos de agua por la simple razón de que somos excelentes personas.

Continuemos con el ejemplo. Lo más importante ahora consiste en dilucidar las preguntas que resultarán en puntos activos, borrados o hechos. Esto es bastante simple. Usted puede buscar todas las opciones de preguntas en la documentación de SimpleDB. Utilizaremos SELECCIONAR idioma. También está la función para seleccionar el idioma de las PREGUNTAS pero SELECCIONAR está más cerca de SQL y, por lo tanto, es más fácil que la mayoría de los lectores comprendan esta función.

Lista 4. Preguntas de todo_freeform
-- Elija active select * de todo_freeform, donde done_date es nulo y deleted_date es nulo
-- Elija deleted select * de todo_freeform, donde deleted_date no es nulo 
-- Elija done select * de todo_freeform, donde done_date no es nulo

Eso es todo. Ahora, juntemos SimpleDB y S3.


¿Cómo integrar servicios y compartir fotos?

Es muy probable que la próxima pregunta que se esté haciendo sea la siguiente: ¿Cómo puedo conectar SimpleDB con S3? Estos servicios no están conectados de manera innata excepto por el modelo de control de acceso que utilizan. La respuesta es bastante simple: Usted puede almacenar el sector de almacenamiento y el nombre correspondientes a un objeto de S3 en SimpleDB. En cualquier caso, ya hablamos suficiente de la lista de quehaceres. Ahora, pasemos a diseñar el sitio para compartir fotos.

Es necesario que el sitio almacene las fotos en S3 y los comentarios de los usuarios en SimpleDB. ¿Y qué pasa con las cuentas de los usuarios? Debemos convivir con la naturaleza distribuida de SimpleDB. Esto significa que, a veces, existirán usuarios inválidos (como, por ejemplo, cuando no se expulsó a un usuario pero sí a la línea que se refiere a dicho usuario). Sin embargo, mantendremos a los usuarios en SimpleDB para esta aplicación. No dependerá de ninguna base de datos externa, ya que el objetivo consiste en ser capaz de configurar el sitio rápidamente en cualquier lugar utilizando Perl (mod_perl), mientras que toda la acción real ocurre en S3 y SimpleDB.

En primer lugar, necesitará una tabla de fotos. Es probable que los registros sean así:

Lista 5. Registros de tabla de fotos; share_photos
"http://developer.amazonwebservices.com/connect/images/amazon/logo_aws.gif"  
{ usuario: "ted", nombre: "Amazon Logo"} "http://images.share.lifelogs.com/funny.jpg"  
{ usuario: "bob", nombre: "Funny Picture", sector de almacenamiento S3: 
"images.share.lifelogs.com" }

Luego, necesitará una tabla de usuarios:

Lista 6. Tabla de usuarios; share_users
"ted" { nombre: "Ted", apellido: "Zlatanov" } 
"bob" { nombre: "Bob", apellido: "Leech" }

Y comentarios:

Lista 7. Comentarios; share_comments
"random-string" 
{   
url: "http://images.share.lifelogs.com/funny.jpg",  
comentario: "Ja ja",   
posted_when: "2009-03-01T19:00:00+05"  
}  

"random-string2" 
{  
 usuario: "ted",  
url: "http://developer.amazonwebservices.com/connect/images/amazon/logo_aws.gif",   
comentario: "No",   posted_when: "2009-03-01T20:00:01+05"  
}  

"random-string3" 
{   
url: "http://developer.amazonwebservices.com/connect/images/amazon/logo_aws.gif",   
comentario: "No",   
reply_to: "random-string2",   
posted_when: "2009-03-01T20:00:01+05"  
}

A tener en cuenta

Google le ofrece algunos servicios comparables. Este manual no pretende comparar los servicios de Google con los servicios de Amazon. Puede encontrar muchísimas comparaciones en Internet. Este manual tampoco pretende discutir otras ofertas de Amazon, como Elastic Compute Cloud (EC2), aunque son interesantes y útiles y podrían resultar de gran ayuda para crear una página de Internet. Por último, existen otras bases de datos con valores clave distribuidos (como es el caso de CouchDB) que se pueden comparar de manera favorable con SimpleDB. Recomiendo que también busquen más información sobre ellas.

Vincularemos los comentarios utilizando la clave reply to Cada post tendrá una cadena aleatoria como su clave única.

Por favor, tenga en cuenta que hemos establecido algunas convenciones para estos casos:

  • La falta de un atributo de usuario significa que el comentario es anónimo.
  • El URL de la foto une todos los comentarios. Por lo tanto, no se permite modificar el URL de la foto.
  • Los objetos de S3 también tendrán una URL con un nombre de sector de almacenamiento para identificarlos como objetos de S3.
  • No se permitirá la existencia de URLs duplicadas, ya que la URL es la clave del objeto.

Ésta no es la versión final del diseño de la tabla (recuerde que SimpleDB es muy flexible), pero es más que suficiente para empezar.


Resumen

Ya pudo observar los beneficios y los contratiempos que tienen S3 y SimpleDB en detalle. Aunque el tema no está completo, esta discusión le debería ayudar a determinar si los servicios S3 y SimpleDB de Amazon son lo que necesita para su proyecto.

Luego de incluir un ejemplo simple de una lista de quehaceres en SimpleDB, usted pudo ver cómo comenzar a diseñar la disposición de las tablas de usuarios, fotos y comentarios. En la Parte 2, configuró la página de Internet (Apache con mod_perl) y las bibliotecas necesarias para trabajar con S3 y SimpleDB.

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 inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de 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=Rational, SOA y servicios web
ArticleID=963223
ArticleTitle=Cultured Perl: Perl y la nube Amazon - Parte 1
publish-date=07292011