SlideShare a Scribd company logo
1 of 196
Download to read offline
To Cloud or not Cloud, That is the Question! 22 Noviembre de 2010, 9:00-14:00 BizkaiaEnpresaDigitala, Parque Tecnológico de Zamudio. Edificio ESI, #204 Dr. Diego Lz. de Ipiña Glz. de Artazadipina@deusto.eshttp://paginaspersonales.deusto.es/dipinahttp://www.slideshare.net/dipina,[object Object]
Agenda,[object Object],Introducción a Cloud Computing (30’),[object Object],Concepto y campos relacionados,[object Object],Diferentes manifestaciones (SaaS, PaaS e IaaS),[object Object],Ejemplos de servicios, infraestructura y aplicaciones en la nube,[object Object],Ejemplo de IaaS: Amazon Web Services (AWS) (90’ + 60’),[object Object],Introducción,[object Object],Amazon Elastic Cloud (EC2),[object Object],Amazon Simple Storage Service (S3) y CloudFront,[object Object],Amazon Simple DB y RDS,[object Object],Desarrollo de una aplicación de ejemplo sobre AWS,[object Object]
Agenda,[object Object],Ejemplo de PaaS: Google AppEngine (60’ + 90’),[object Object],Introducción,[object Object],DataStore API y GQL,[object Object],Memcache y Cron,[object Object],Versiones Python y Java de Google AppEngine,[object Object],Desarrollo de una aplicación de ejemplo sobre GoogleApp,[object Object],Conclusiones (30’),[object Object],Comparativa AWS, Google AppEngine y Azure,[object Object],Patrones de diseño,[object Object],Cuándo y cómo adoptaré Cloud Computing en mi empresa,[object Object],Ejemplos en: http://dl.dropbox.com/u/2763621/CursoCloudComputingUDEUSTO/CloudComputing_examples.zip,[object Object]
Misión de la Future Internet (FI),[object Object],Ofrecer a todos los usuarios un entorno seguro, eficiente, confiable y robusto, que: ,[object Object],Permita un acceso abierto, dinámico y descentralizado a la red y a su información y,[object Object],Sea escalable, flexible y adapte su rendimiento a las necesidades de los usuarios y su contexto,[object Object]
Arquitectura de la Internet del Futuro,[object Object]
Internet de los Servicios,[object Object],Una multitud de servicios IT conectados, que son ofrecidos, comprados, vendidos, utilizados, adaptados y compuestos por una red universal de proveedores, consumidores y agregadores de servicios o brokers,[object Object],- resultando en -,[object Object],una nueva manera de ofrecer, utilizar, y organizar funcionalidad soportada por IT,[object Object],Adapted from SAP Research, 2008, and SEEKDA, 2008,[object Object]
Campos de Actuación de la Internet de los Servicios,[object Object],Cloud computing: virtualización de servicios y optimización de recursos tanto en capacidad de procesamiento como almacenamiento,[object Object],Open serviceplatforms: modularidad de servicios para facilitar su integración por usuarios finales,[object Object],Autonomiccomputing: sistemas autogestionados,[object Object],Green IT: optimización del consumo energético ,[object Object]
El Futuro del Desarrollo Software,[object Object]
Infraestructura Virtualizada:Cloud Computing,[object Object],	Un paradigma de computación emergente donde los datos y servicios residen en centros de datos muy escalables que pueden ser accedidos ubicuamente desde cualquier dispositivo conectado a Internet1,[object Object],Merrill Lynch: ,[object Object],Cloud computing market opportunity by 2011 =,[object Object],$95bn in business and productivity apps +,[object Object],$65bn in online advertising = ,[object Object],$160bn,[object Object],(1) Source: IBM,[object Object]
Cloud Computing es …,[object Object],… capacidad computacional y almacenamiento virtualizadaexpuesta mediante infraestructura agnóstica a la plataforma y accedida por Internet ,[object Object],Recursos IT compartidos en demanda, creados y eliminados eficientemente y de modo escalable a través de una variedad de interfaces programáticos facturados en base a su uso,[object Object]
Forrester Research,[object Object],“A pool of abstracted, highly scalable, and managed compute infrastructure capable of hosting end-customer applications and billed by consumption1”,[object Object],1- “Is Cloud Computing Ready for The Enterprise?” Forrester Research, Inc.,[object Object]
The “Cloud” = 10X Improvement,[object Object],[object Object],Escalable: controla tu infraestructura con tu aplicación,[object Object],Riesgo: nada que comprar, cancela inmediatamente,[object Object],Robustez: basado en gran hardware empresarial,[object Object],Coste: paga sólo por lo que uses,[object Object]
Evolución hacia Cloud Computing,[object Object],La coexistencia y limitaciones de clustercomputing y supercomputing dieron lugar a gridcomputing,[object Object],De gridcomputing progresamos hacia utilitycomputing, i.e. Servicios computacionales empaquetados como agua, electricidad, etc.,[object Object],Esto derivó en Cloud Computing, es decir, todo como servicio (XaaS) :,[object Object],[object Object]
Software como Servicio
Infraestructura como Servicio,[object Object]
Múltiples Descripciones Gráficas de la “Cloud”,[object Object]
Arquitectura Cloud Computing,[object Object]
Características de Cloud,[object Object],Tipos de despliegue,[object Object],Manifestaciones ,[object Object],Cloud privada,[object Object],Propiedad de o alquilada por una empresa (centros de datos,…),[object Object],Cloud comunitaria,[object Object],Infraestructura compartida por una comunidad específica,[object Object],Cloud pública,[object Object],Vendida al público, gran escala (ec2, S3,…),[object Object],Cloud híbrida,[object Object],Composición de dos o más clouds,[object Object],Cloud Software as a Service (SaaS) ,[object Object],Uso de la aplicación del proveedor sobre la red, e.j., Salesforce.com,…,[object Object],Cloud Platform as a Service (PaaS) ,[object Object],Despliega aplicaciones creadas por los clientes a la nube, e.j. Google AppEngine, Microsoft Azure, … ,[object Object],Cloud Infrastructure as a Service (IaaS),[object Object],Alquilar procesamiento, almacenamiento, capacidad de red y otros recursos computacionales e.j., EC2 – Elastic Compute Cloud, S3 – Simple Storage Service, Simple DB,… ,[object Object]
Diferentes Manifestaciones,[object Object]
Cloud Computing vs. Centros de Datos Tradicionales,[object Object]
Componentes de Cloud Computing,[object Object]
Taxonomía de Cloud Computing,[object Object]
Evolución de Tecnologías de Cloud Computing,[object Object],Maduración de tecnología de virtualización,[object Object],La virtualización permite nubes de computación,[object Object],Las nubes de computación demandan nubes de almacenamiento,[object Object],Las nubes de almacenamiento y computación crean infraestructura cloud,[object Object],La infraestructura cloud da lugar a plataformas y aplicaciones cloud,[object Object],Diferentes tipos de cloud dan lugar a Cloud Aggregators,[object Object],Nichos de requisitos dan lugar a Cloud Extenders,[object Object]
Aplicaciones Cloud,[object Object],Corresponden con lo que se denomina como SaaS,[object Object],Manifestación de cloud más popular,[object Object],Ejemplos: SalesForce, Gmail, Yahoo! Mail, rememberthemilk, doodle, Google Docs, DropBox, picnik, Panda Cloud Antivirus, scribd, slideshare,[object Object],Ventajas: Libre, Fácil, Adopción de consumo,[object Object],Desventajas: funcionalidad limitada, no hay control de acceso a la tecnología subyacente,[object Object]
Plataformas Cloud,[object Object],Contenedores de aplicaciones,[object Object],Entornos cerrados,[object Object],Ejemplos: Google AppEngine, Microsoft Azure, Heroku, Mosso, Engine Yard, Joyent o Force.com,[object Object],Ventajas: buenas para desarrolladores, más control que en las aplicaciones cloud, configuradas estrechamente,[object Object],Desventajas: restringidas a lo que está disponible, otras dependencias, dependencia tecnológica,[object Object]
Infraestructura Cloud,[object Object],Proveen nubes de computación y almacenamiento,[object Object],Ofrecen capas de virtualización (hardware/software),[object Object],Ejemplos: Amazon EC2, GoGrid, Amazon S3, Nirvanix, Linode, Arsys Cloud Flexible, EyeOS,[object Object],Ventajas: control completo del entorno y la infraestructura,[object Object],Desventajas: precio premium, competencia limitada,[object Object]
Extensores de la Cloud,[object Object],Proveen extensiones a infraestructura y plataformas cloud con funcionalidad básica,[object Object],Ejemplos: Amazon SimpleDB, Amazon SQS, Google BigTable,[object Object],Ventajas: extienden la funcionalidad de las nubes de computación y almacenamiento para integrar sistemas heredados u otras cloud,[object Object],Desventajas: a veces requieren el uso de plataformas o infraestructura específica,[object Object]
Agregadores Cloud,[object Object],Se apoyan en varias infraestructuras cloud para su gestión,[object Object],Ejemplos: RightScale, Appistry,[object Object],Ventajas: proveen más opciones para entornos cloud,[object Object],Desventajas: dependientes de proveedores de cloud,[object Object]
¿Qué framework o plataforma usar para mis aplicaciones Cloud?,[object Object]
Amazon Web Services (AWS),[object Object],AWS proporciona una infraestructura de servicios elástica donde alojar computación, almacenamiento o sistemas empresariales,[object Object],Amazon Elastic Cloud (EC2) – permite configurar y ejecutar un Amazon Machine Instance (AMI) – servidores en demanda,[object Object],Amazon Simple Storage Service (S3) – permite guardar y recuperar datos en la nube,[object Object],Amazon SimpleDB– proporciona la funcionalidad de una base de datos sobre S3 – basada en pares clave-valor,[object Object],Amazon Simple Queue Service (SQS) – servicio de mensajería para encolar tareas y mensajes,[object Object],Amazon RelationalDatabase Service (RDS) – servicio web para crear, operar y escalar una base de datos en la nube,[object Object],Amazon CloudFront– copias de tus objetos más populares son cacheados en una red de nodos alrededor del mundo,[object Object],…,[object Object],Documentación: http://aws.amazon.com/documentation/,[object Object]
Amazon Web Services (AWS),[object Object]
Amazon Web Services (AWS),[object Object]
Amazon Elastic Compute Cloud: EC2,[object Object],Permite ejecutar varios servidores Linux o Windows virtuales en demanda, facilitando tantos ordenadores como necesites para procesar tus datos o ejecutar una aplicación,[object Object],Otorga acceso root al sistema operativo de cada servidor, un cortafuegos para gestionar el acceso a la red y la libertad para instalar cualquier software,[object Object],Una vez configurado un servidor adecuadamente, se guarda como Amazon Machine Image (AMI) que puede ser lanzada para crear máquinas virtuales en demanda ,[object Object],La EC2 API (Query o SOAP) ofrece funcionalidad para empezar y parar instancias de servidor, aplicar permisos de acceso y red o gestionar tus imágenes de servidor. ,[object Object],Cada servidor individual se gestiona usando herramientas Linux o Windows sobre una sesión de shell segura.,[object Object],Se factura en función de los recursos consumidos : CPU y datos transferidos,[object Object],Más información en: http://aws.amazon.com/products/ec2,[object Object]
Conceptos EC2,[object Object],AMI (Amazon Machine Instance),[object Object],Basadas en XEN,[object Object],Instancia: AMI en ejecución,[object Object],Es necesario crear instancias EBS si queremos pararlas y reiniciarlas,[object Object],Dos IPs: IP pública e IP elástica,[object Object],Volúmenes EBS (Elastic Block Storage): almacenamiento para las instancias,[object Object],Conceptos de credenciales:,[object Object],Access Key ID y Secret Access Key,[object Object],X.509 certificate  y clave privada (SOAP y EC2 Tools),[object Object],IP Elástica – asociada a tu cuenta no una instancia, te permite controlar a qué instancia o instancias apunta (útil por robustez).,[object Object],Conceptos y herramientas para usar EC2 en: ,[object Object],http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html,[object Object]
EC2: Regiones y Zonas de Disponibilidad,[object Object],Las instancias en EC2 se pueden colocar en diferentes localizaciones:,[object Object],Las regiones están dispersas geográficamente (ver tabla debajo),[object Object],Las zonas de disponibilidad son localizaciones diferentes dentro de una Región que están aisladas de fallos en otras zonas y facilitan conectividad de red económica, de baja latencia a otras zonas de disponibilidad dentro de la Región,[object Object]
CloudWatch,[object Object],Amazon CloudWatches un servicio que proporciona monitorización para recursos gestionados por AWS,[object Object],Muestra utilización de recursos como CPU, lecturas y escrituras de disco o tráfico de red,[object Object],http://aws.amazon.com/cloudwatch/,[object Object],http://awsdocs.s3.amazonaws.com/AmazonCloudWatch/latest/acw-dg.pdf,[object Object],http://awsdocs.s3.amazonaws.com/AmazonCloudWatch/latest/acw-qrc.pdf,[object Object],Elastic Load Balancingdistribuye automáticamente el tráfico de aplicación entrante entre varias instancias EC2,[object Object],http://aws.amazon.com/elasticloadbalancing/,[object Object],http://awsdocs.s3.amazonaws.com/ElasticLoadBalancing/latest/elb-dg.pdf,[object Object],http://awsdocs.s3.amazonaws.com/ElasticLoadBalancing/latest/elb-qrc.pdf,[object Object],Auto Scalingpermite escalar automáticamente hacia arriba o abajo tu capacidad EC2 en función de triggers que defines,[object Object],http://aws.amazon.com/autoscaling/,[object Object],http://awsdocs.s3.amazonaws.com/AutoScaling/latest/as-qrc.pdf,[object Object]
CloudWatch en Funcionamiento,[object Object]
CloudWatch en Funcionamiento,[object Object]
Elastic Load Balancing en Funcionamiento,[object Object]
Autoscaling en Funcionamiento,[object Object]
Amazon Simple Storage Service: S3,[object Object],Ofrece espacio de almacenamiento seguro para cualquier tipo de datos en los data centers de Amazon,[object Object],Es una alternativa a construir, mantener y utilizar tus propios sistemas de almacenamiento ,[object Object],No tiene límites sobre cuánta información, por cuánto tiempo y con qué ancho de banda puede transferirse. ,[object Object],Ofrece una simple API agnóstica a la información a guardar,[object Object],Depende de ti qué datos y qué representación interna tienen,[object Object],El modelo de datos interno consta de dos tipos de recursos de almacenamiento:,[object Object],Objects: guardan datos y metadatos,[object Object],Buckets: contenedores que pueden contener infinidad de objetos,[object Object],Incorpora mecanismos de control de acceso (ACL) que pueden aplicarse a objetos y buckets,[object Object]
Amazon Simple Storage Service: S3,[object Object],Los recursos en S3 se identifican mediante URIs:,[object Object],http://<s3-repository>.amazonaws.com/<bucket-name>/<folder-name>/<s3object-name>,[object Object],Ejemplo: https://s3-eu-west-1.amazonaws.com/misimages/oct2010/image1.png,[object Object],Algunas características de su arquitectura son:,[object Object],Los objetos S3 no pueden ser manipulados como ficheros estándar,[object Object],Los cambios sobre ellos tardan en propagarse,[object Object],Las peticiones a objetos pueden fallar ocasionalmente,[object Object],Permite guardar versiones,[object Object],Se deben resolver las direcciones IP de los nombres DNS de S3 periódicamente ,[object Object],Se pueden guardar infinitos objetos de hasta 5GB en tamaño	,[object Object],Se paga por almacenamiento, transferencia y operaciones,[object Object],Algunos posibles usos de S3:,[object Object],Compartir grandes ficheros,[object Object],Como repositorio de back-up de tus ficheros,[object Object],Sistema de ficheros mapeado sobre S3 (ElasticDrive),[object Object],Más información en: ,[object Object],http://aws.amazon.com/s3/,,[object Object]
Amazon CloudFront,[object Object],Mientras que en Amazon S3 se guardan contenidos (ficheros) con CloudFront se garantiza que tus objetos en S3 buckets son servidos rápidamente. ,[object Object],Lo hace copiando los ficheros en buckets S3 a diferentes edgelocationsque sirven contenidos a los usuarios finales.,[object Object],Tales edgelocationsse distribuyen por el planeta asegurándose que los contenidos son servidos del servidor Amazon más cercano,[object Object],Es ventajoso porque el 80-90% del tiempo invertido esperando a una respuesta web se debe a la descarga de los componentes de la página: imágenes, hojas de estilo, scripts, Flash, etc. ,[object Object],La clave es colocar la parte estática de nuestra web en una red de distribución de contenidos como Akamai. ,[object Object],Con CloudFront hay que pagar las transferencias desde S3 a las localizaciones de los bordes. ,[object Object],Más información en: http://aws.amazon.com/cloudfront/,[object Object]
¿Cómo usar CloudFront?,[object Object],Las redes de distribución de contenidos tienen servidores distribuidos por Internet y determinan la ruta más rápida y corta entre el servidor que aloja el contenido y el usuario final,[object Object],Los 4 sencillos pasos que hay que seguir para utilizar CloudFront han sido extraídos del artículo: http://www.labnol.org/internet/setup-content-delivery-network-with-amazon-s3-cloudfront/5446,[object Object],Get the S3 Fox add-on for Firefox and log-in to your Amazon S3 account. Now right-click your S3 bucket and select "Manage Distributions.“,[object Object],Next we’ll associate a CNAME (some easy to remember sub-domain name) with our S3 bucket so it become easy to link to the files from our web pages. In this example, I use the web address "cache.labnol.org" and then click Create Distribution.,[object Object],The status will change from "In Progress" to "Deployed". Now copy the resource URL to the clipboard which is of the format xyz.cloudfront.net,[object Object],Log in to your account on your web hosting service’s website, and go to the DNS management page. Create a new CNAME record as shown in the screenshot.,[object Object]
Amazon SimpleDB,[object Object],Almacén de claves/valor: trabaja con los conceptos domain, item y attribute,[object Object],Diseñado para minimizar la complejidad y el coste de mantenimiento de tus datos ,[object Object],Guarda pequeñas piezas de información textual en una estructura de base de datos sencilla simple de gestionar, modificar y buscar,[object Object],Ofrece su propio lenguaje de consultas de datos,[object Object],Ejemplos de consultas sencillas:,[object Object],['Date' > '2007-07-01' and Not 'Date' starts-with '2007-07-04'],[object Object],['Suburb' = 'Newtown'] or['Price' < '100000'] intersection ['Bedrooms' = '3'] ,[object Object],Si tus aplicaciones están basadas en bases de datos simples, este servicio puede reemplazar a tu RDBMS dejándote con una pieza de infraestructura menos que comprar y mantener,[object Object],No exige la especificación de un schema previo, tú puedes modificar la estructura y contenidos de tu base de datos cuando quieras,[object Object],Indexa cada pieza almacenada,[object Object],Guarda tu información de modo seguro, y redundante en la red de data centers de Amazon,[object Object],Pagas por almacenamiento, datos transferidos y operaciones,[object Object],Más información en: http://aws.amazon.com/simpledb/,[object Object]
Amazon SimpleDB,[object Object],Ofrece tres recursos principales:,[object Object],Dominios: nombre de un contenedor con información relacionada (similar a base de datos),[object Object],Solamente se procesan consultas dentro de un dominio,[object Object],Elementos: es una colección con nombre de los atributos que representan un objeto de datos,[object Object],Atributos: es una categoría individual de información guardada dentro de un elemento. Identificado por un nombre contiene una colección de valores de tipo string, obligatorio que tenga al menos un valor. ,[object Object],Es una base de datos sencilla, no un RDBMS:,[object Object],Los elementos se guardan en una estructura jerárquica, no una tabla,[object Object],Todos los datos se guardan como texto,[object Object],Capacidades de consulta limitadas,[object Object],La consistencia de la información depende de retardos de propagación,[object Object],Los valores de atributos pueden ser colecciones y alcanzar hasta 1024 bytes,[object Object],SimpleDB está concebido para usarse en conjunción con S3,[object Object]
Amazon SimpleDB,[object Object]
ExampleDataSet con SimpleDB,[object Object]
Ejemplos de Consultas,[object Object]
Amazon RelationalDatabase Service (Amazon RDS),[object Object],Es un servicio web que facilita la instalación, operación y escalabilidad de una base de datos relacional en la nube,[object Object],Te da completo acceso a las capacidades de una base de datos MySQL,[object Object],Las aplicaciones que ya funcionan con MySQL también lo harán con Amazon RDS,[object Object],Amazon RDS modifica el software MySQL para programar la creación de back-ups o garantizar la escalabilidad, todo ello controlado a través de una API sencilla.,[object Object],Solamente se paga por los recursos utilizados. ,[object Object],Más información en: http://aws.amazon.com/rds,[object Object],Herramienta: Amazon RDS Command Line Toolkit,[object Object],http://developer.amazonwebservices.com/connect/entry.jspa?externalID=2928&categoryID=294,[object Object],Tutorial en: http://docs.amazonwebservices.com/AmazonRDS/latest/GettingStartedGuide/,[object Object]
Amazon SQS,[object Object],Implementa el servicio de mensajería basado en colas,[object Object],Los mensajes son siempre strings,[object Object],Útil para crear trabajos asíncronos y descargar de actividad a un web server,[object Object],Se paga por mensajes y datos transferidos,[object Object],Más información en: http://aws.amazon.com/sqs,[object Object]
Registro y Documentación,[object Object],Se puede ver en detalle cómo acceder a AWS: ,[object Object],http://www.slideshare.net/ronaldbradford/getting-started-with-mysql-in-amazon-web-services?src=related_normal&rel=3462501,[object Object],http://docs.amazonwebservices.com/AWSEC2/2009-11-30/GettingStartedGuide/,[object Object],http://aws.amazon.com/free/ (Free usagetier),[object Object]
AWS Free UserTier,[object Object],La condiciones de uso son las siguientes:,[object Object],AWS Free Usage Tier (Per Month):,[object Object],750 hours of Amazon EC2 Linux Micro Instance usage (613 MB of memory and 32-bit and 64-bit platform support) – enough hours to run continuously each month*,[object Object],750 hours of an Elastic Load Balancer plus 15 GB data processing*,[object Object],10 GB of Amazon Elastic Block Storage, plus 1 million I/Os, 1 GB of snapshot storage, 10,000 snapshot Get Requests and 1,000 snapshot Put Requests*,[object Object],5 GB of Amazon S3 storage, 20,000 Get Requests, and 2,000 Put Requests*,[object Object],30 GB per of internet data transfer (15 GB of data transfer “in” and 15 GB of data transfer “out” across all services except Amazon CloudFront)*,[object Object],25 Amazon SimpleDB Machine Hours and 1 GB of Storage**,[object Object],100,000 Requests of Amazon Simple Queue Service**,[object Object],100,000 Requests, 100,000 HTTP notifications and 1,000 email notifications for Amazon Simple Notification Service**,[object Object],In addition to these services, the AWS Management Console is available at no charge to help you build and manage your application on AWS.,[object Object]
Proceso para usar AWS EC2,[object Object],Vamos a seguir el siguiente workflow para aprender a usar EC2, crear instancias y conectarnos a ellas, tanto desde Windows como UNIX.,[object Object]
Fase 1: Registro en AWS,[object Object],Para utilizar Amazon EC2, necesitasunacuenta Amazon AWS,[object Object],Ir a http://aws.amazon.com/ec2 y hacer click en Sign Up for Amazon EC2.,[object Object],Seguir las instrucciones de pantalla,[object Object],Pasarás a estar suscrito también a Amazon Simple Storage and Amazon Virtual Private Cloud,[object Object],Recibirás una llamada donde introducir el PIN que te asignan vía web,[object Object]
Fase 1: Registro en AWS,[object Object]
Fase 1: Registro en AWS,[object Object]
Fase 1: Registro en AWS,[object Object]
Fase 1: Registro en AWS,[object Object]
Fase 1: Registro en AWS,[object Object]
Fase 1: Obteniendo los Identificadores de Acceso,[object Object],Vete a http://aws.amazon.com/account/, logueate, haz click en Security Credentials y recupera:,[object Object],Access Key ID y Access Key, pestaña Access Keys,[object Object],Accountnumber se ve en la parte derecha, superior de la página de Security Credentials,[object Object],X.509 Private Key File (pestaña X.509 Certificates),[object Object],X.509 CertificateFile (pestaña KeyPairs),[object Object],Los siguientes pantallazos muestran cómo obtener estos datos ,[object Object],Guárdalos en ficheros para luego usarlos en tus aplicaciones,[object Object]
Fase 1: Obteniendo los Identificadores de Acceso,[object Object]
Fase 1: Obteniendo los Identificadores de Acceso,[object Object]
Fase 1: Registrarse para EC2 y S3,[object Object],Acceder a la consola de administración de AWS en: http://aws.amazon.com/console,[object Object],Logearse o ,[object Object],Registrarse,[object Object],Durante el registro se solicitan los datos de cargo bancario,[object Object],Recibirás un email de confirmación tanto para EC2 como S3,[object Object],Alternativamente puedes registrarte individualmente en los diferentes productos yendo al enlace Products y seleccionando el servicio concreto en: http://aws.amazon.com/account/,[object Object]
Fase 1: Registrarse para EC2 y S3,[object Object]
Fase 1: Registrarse para EC2 y S3,[object Object]
Fase 2: Lanzar una Instancia de EC2,[object Object],Iniciar el “dashboard”, panel de control de AWS Console y realizar los siguientes pasos:,[object Object],https://console.aws.amazon.com,[object Object],Pulsar el botón de nueva instancia,[object Object],Seleccionar una instancia concreta,[object Object],Fedora LAMP Web Server para ejemplo completo,[object Object],Instancia AMI de Windows básica,[object Object],Instancia AMI de UNIX básica,[object Object],Generar o reutilizar un par de claves,[object Object],Guardar las claves,[object Object],Configurar el firewall,[object Object],Revisar los detalles de la instancia desplegada,[object Object],Lanzar la instancia y comprobar que está en ejecución,[object Object]
Paso 2.1: Lanzar una Nueva Instancia,[object Object]
Paso 2.2: Seleccionar la instancia,[object Object]
Paso 2.3: Configurar la Instancia,[object Object]
Paso 2.4: Asignar Par de Claves,[object Object]
Paso 2.5: Configurar el Firewall,[object Object]
Paso 2.6: Revisar los Detalles de la Instancia Configurada,[object Object]
Paso 2.7: Lanzar la Instancia y Operar sobre Ella,[object Object]
Detalles de la Instancia Creada,[object Object]
Fase 2: Lanzando Otras Instancias,[object Object],Vamos a lanzar otra instancia en Windows y otra en UNIX con soporte EBS:,[object Object],Accede a AWS Management Console: http://aws.amazon.com/console/ y regístrate,[object Object],Desde EC2 ConsoleDashboard, haz click en LaunchInstance,[object Object],Elige un AMI, vamos a trabajar bien con Fedora 8 Core o Microsoft Windows Server 2008,[object Object],Selecciona y acepta los detalles de la instancia,[object Object],Crea un par de claves, que es un credencial utilizado para conectarse a una instancia,[object Object],Crea un grupo de seguridad que define reglas de firewall para tu instancia,[object Object],Revisa tus configuraciones y pulsa el botón Launch,[object Object]
Fase 3: Accediendo a la instancia vía web (Servidor LAMP Fedora),[object Object]
Fase 3: Modificando la Página por Defecto,[object Object],Pasos a seguir en cliente UNIX:,[object Object],Logeo en el servidor remoto:,[object Object],ssh -i <instancia> root@public_dns,[object Object],ssh –i ami-f04f6484 root@ec2-79-125-61-32.eu-west-1.compute.amazonaws.com,[object Object],Vamos al directorio htdocs,[object Object],cd /home/webuser/helloworld/htdocs,[object Object],Modificamos la página index.php (ver contenido siguiente trasparencia) ,[object Object]
Fase 3: Ejemplo de contenido para index.php,[object Object],<html>,[object Object],	<head>,[object Object],		<title>Nuestro propio Servidor Web</title>,[object Object],		<meta http-equiv="Content-Type" content="text/html; charset-ISO-8859-1">,[object Object],	</head>,[object Object],	<body>,[object Object],		<Nuestro propio Servidor Web ejecut&aacute;ndose en AWS</h1>,[object Object],		<p>Unademostraci&oacute;n del curso To Cloud or not To Cloud. That is the question! en EnpresaDigitala.</p>,[object Object],		<p>Ejemplo adaptado de ,[object Object],			<a href="http://www.slideshare.net/ronaldbradford/getting-started-with-mysql-in-amazon-web-services">,[object Object],				http://www.slideshare.net/ronaldbradford/getting-started-with-mysql-in-amazon-web-services,[object Object],			</a>,[object Object],		</p>,[object Object],	</body>,[object Object],</html>,[object Object]
Fase 3: Herramientas para Conectarse a Instancia UNIX desde Windows,[object Object],Software necesario (cygwin también valdría):,[object Object],Putty – Putty es un terminal cliente de SSH, descargable de: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html,[object Object],PuttyGen – programa que convierte la clave privada de Amazon al formato PPK usado por putty,[object Object],Se descarga de la misma página que putty,[object Object],WinSCP – cliente de SFTP y SSH para Windows que permite la transferencia segura de ficheros entre ordenadores. Soporta los protocols SSH, FTP y SCP. ,[object Object],Se descarga desde: http://sourceforge.net/projects/winscp/,[object Object],Tutorial detallado en: ,[object Object],http://it.toolbox.com/blogs/managing-infosec/connecting-to-amazon-aws-from-windows-to-a-linux-ami-30656,[object Object], ,[object Object]
Fase 3: Conectándose a UNIX AMI desde Windows – Conversión de Clave para putty,[object Object],Cargar el fichero LAMPServerFedora.pem y pulsar en SavePrivate Key que guardará un fichero con extensión ppk que usa putty,[object Object]
Fase 3: Conectándose a UNIX AMI desde Windows – Logeo en Windows con putty,[object Object],Arrancar putty,[object Object],Introducir el nombre público DNS del servidor (ec2-79-125-61-32.eu-west-1.compute.amazonaws.com),[object Object],Ir a al menú ssh->Auth->Browse y cargar clave privada LAMPServerFedora.ppk,[object Object],Loguéate como root,[object Object]
Fase 3: Accediendo a ficheros en UNIX AMI desde Windows – Edición de index.php con WinSCP,[object Object]
Página Final en Instancia EC2,[object Object]
Fase 3: Conectándose a una Instancia de Windows,[object Object],Obteniendo la contraseña,[object Object],Haz click con el botón derecho del ratón sobre la instancia Windows y selecciona “Get Windows Password”,[object Object],Aparece el diálogo Retrieve Default Windows AdministratorPassword, pega ahí la privatekey obtenida antes, parte del fichero de claves entre BEGIN RSA PRIVATE KEY y END RSA PRIVATE KEY,[object Object],Selecciona descrifrar clave,[object Object],Conectarse a la instancia usando Remote Desktop Connection,[object Object],Start AllPrograms  Accessories,[object Object],Introduce el nombre DNS de la instancia,[object Object],Logéate como Administrator/<password-recuperada>,[object Object]
Fase 4: Terminar Instancia,[object Object],No es lo mismo “parar” (stop) que “terminar” (terminate) en AWS,[object Object],Cuando terminas una instancia no la puedes reiniciar, ¡dejas de pagar!,[object Object],Sólo la puedes parar si tiene un EBS asociado,[object Object],Para terminar una instancia en la AWS Console, haz click con el botón derecho del ratón y selecciona terminate,[object Object]
Probando S3,[object Object]
Probando SimpleDB,[object Object],ScratchpadforSimpleDB es una aplicación web que permite usar Amazon SimpleDB sin necesidad de realizar programación,[object Object],http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1137,[object Object],Te permite:,[object Object],Crear dominios ,[object Object],Poblarlos con datos,[object Object],Consultarlos,[object Object],Modificarlos,[object Object],Borrar el dominio,[object Object]
Probando SimpleDB,[object Object]
Probando RDS,[object Object],Para utilizarlo hay que seguir los siguientes pasos:,[object Object],Ir a http://aws.amazon.com/rds y registrarte con Amazon RDS,[object Object],Lanzar la instancia y rellenar los datos de tamaño, tipo de base de datos, nombre y clave de usuario,[object Object],Asignar accesos a la instancia de la base de datos, se utiliza CIDR (Classless Inter-DomainRouting) para indicar sólo una dirección IP o un conjunto de direcciones desde las que se permite la conexión,[object Object],Acceso total: 0.0.0.0/0,[object Object],Conectarse a la instancia usando la herramienta mysql, en la descripción de la instancia en AWS Console aparecerá el string de conexión,[object Object],mysql -h <nombre-host-amazon-rds> -u <username> -p,[object Object],Terminar la instancia para que dejen de facturarnos por su uso,[object Object]
Probando SQS,[object Object],El Simple Queue Service (SQS) puede probarse con una sencilla herramienta: JavaScriptScratchpadfor Amazon SQS,[object Object],http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1254&categoryID=122,[object Object]
Probando CloudFront,[object Object],Ejemplo de uso desde consola de administración de Amazon,[object Object]
Desregistro de un Servicio,[object Object],Para cancelar un servicio:,[object Object],Firma en AWS,[object Object],Haz click en YourAccount y luego en AccountActivity.,[object Object],Selecciona View/Edit Service debajo del servicio que quieres cancelar,[object Object],Haz click en el enlace cancel thisservice.,[object Object]
Calculadora de Costes en Amazon,[object Object],La siguiente herramienta te permite estimar costes de consumo de servicios en Amazon: ,[object Object],http://calculator.s3.amazonaws.com/calc5.html,[object Object],Además, desde la página http://aws.amazon.com/account, se puede acceder al menú “AccountActivity” que ilustra el gasto actual incurrido. ,[object Object]
APIs web: SOAP vs. REST,[object Object],SOAP: Simple Object Access Protocol,[object Object],[object Object]
Deriva de un protocolo creado por David Winer en 1998, llamado XML-RPC.
Fue creado por Microsoft, IBM, y otros y actualmente se encuentra bajo el auspicio de la W3C.
Su arquitectura consiste en varias capas de especificaciones para formato de mensajes:
Message Exchange Patterns (MEP)
Protocolos de transporte (SMTP y HTTP/S)
Modelos de procesado de mensajes
Protocolo de extensibilidad
WS-*REST: RepresantionalState Transfer,[object Object],[object Object]
Introducido en la tésis doctoral de Roy Fielding en el año 2000.
Se refiere a una colección de principios de arquitectura de red, que marcan cómo definir e invocar los recursos.
El término se usa a veces para describir una simple interfaz que transmite datos de un dominio específico por HTTP sin capas adicionales como SOAP o uso de cookies.
Los sistemas que cumplen los principios marcados por Fielding suelen ser referidos como sistemas RESTful.,[object Object]
APIs Disponibles por Servicio AWS,[object Object]
Revisión APIs de los Principales Servicios,[object Object],EC2:,[object Object],http://aws.amazon.com/documentation/ec2/ (mirar quickreferencecard),[object Object],http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/,[object Object],S3: ,[object Object],http://aws.amazon.com/documentation/s3/,[object Object],http://docs.amazonwebservices.com/AmazonS3/latest/gsg/index.html?WorkingWithS3.html,[object Object],http://docs.amazonwebservices.com/AmazonS3/2006-03-01/API/,[object Object],SimpleDB:,[object Object],http://aws.amazon.com/documentation/simpledb/,[object Object],http://docs.amazonwebservices.com/AmazonSimpleDB/latest/GettingStartedGuide/index.html,[object Object],http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/,[object Object],SQS Documentation:,[object Object],http://aws.amazon.com/documentation/sqs/,[object Object],http://docs.amazonwebservices.com/AWSSimpleQueueService/latest/APIReference/,[object Object],RDS,[object Object],http://aws.amazon.com/documentation/rds,[object Object],http://docs.amazonwebservices.com/AmazonRDS/latest/APIReference/,[object Object]
Invocación de Servicios Web AWS,[object Object],Recetas para el uso de la API SOAP desde Java:,[object Object],Recipe 27.5 Getting Set Up with Amazon's Web Services API,[object Object],http://g168.net/txt/servlet/0596005725_jsvltjspckbk-chp-27-sect-5.html#jsvltjspckbk-CHP-27-SECT-5,[object Object],Recipe 27.6 Creating a JavaBean to Connect with Amazon,[object Object],http://g168.net/txt/servlet/0596005725_jsvltjspckbk-chp-27-sect-6.html#jsvltjspckbk-CHP-27-SECT-6,[object Object],Recipe 27.7 Using a Servlet to Connect with Amazon,[object Object],http://g168.net/txt/servlet/0596005725_jsvltjspckbk-chp-27-sect-7.html,[object Object]
AWS SDK for Java,[object Object],Ofrece una API basada en Java para acceder a los servicios de infraestructura de AWS, haciendo sencillo el desarrollo de aplicaciones que usan las características de la nube AWS: eficiente en costes, escalable y robusta,[object Object],Descargar de:  http://aws.amazon.com/sdkforjava, incluye:,[object Object],AWS Java Library,[object Object],Ejemplos de código,[object Object],Soporte para Eclipse,[object Object],Soporta los siguientes servicios: Amazon Elastic Compute Cloud (EC2), Amazon Simple Storage Service (S3), Amazon Virtual Private Cloud, Amazon SimpleDB, Amazon RelationalDatabase Service, Amazon Simple Notification Service, Amazon Simple Queue Service, Amazon ElasticMapReduce, Amazon CloudWatch, Elastic Load Balancing, Auto Scaling ,[object Object],Documentación: ,[object Object],http://developer.amazonwebservices.com/connect/entry.jspa?externalID=3586,[object Object],http://developer.amazonwebservices.com/connect/entry.jspa?externalID=848&categoryID=152,[object Object]
Usando AWS SDK for Java,[object Object],Se puede obtener documentación detallada en:,[object Object],http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/,[object Object],Antes de empezar, debes registrarte en cada servicio que quieras utilizar.,[object Object],Necesitas obtener tus credenciales de seguridad de: http://aws.amazon.com/security-credentials,[object Object],Previamente puede que tengas que firmar en http://aws.amazon.com/products,[object Object],Los credenciales son un par de claves públicas y privadas que contienen:,[object Object],Access Key ID,[object Object],Secret Access Key,[object Object],Revisar ejemplos en carpeta examples/aws,[object Object]
Herramientas para Usar Amazon,[object Object],ScratchPadforSimpleDB y SQS ,[object Object],http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1137&categoryID=189,[object Object],http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1254,[object Object],ElasticDrive – http://www.elasticdrive.com/,[object Object],ElasticFox – http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609,[object Object],S3 Fox – plugin para Firefox, http://www.s3fox.net/,[object Object],Amazon EC2 API Tools,[object Object],Programas de línea de comandos para intermediar con Amazon EC2,[object Object],Sirven para registrar, lanzar instancias, manipular grupos de seguridad y más,[object Object],http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351&categoryID=88,[object Object]
Caso práctico de Álbum de Fotos,[object Object],Álbum de fotos que permite subir fotos, organizarlas y visualizarlas,[object Object],Arquitectura tradicional:,[object Object]
Caso práctico de Álbum de Fotos,[object Object],Solución Cloud con: S3, SDB, SQS y CloudFront,[object Object],Ejemplo descrito en:,[object Object],http://www.slideshare.net/javasymposium/developing-with-amazon-web-services-highly-scalable-services-that-are-someone-elses-headache-to-maintain-and-develop,[object Object]
Caso práctico de Álbum de Fotos,[object Object]
Despliegue de Django en EC2,[object Object],Seguir los pasos indicados en:,[object Object],http://www.dottostring.com/2009/10/django-deployment-on-amazon-ec2-step-by-step-tutorial/,[object Object]
Soporte para Otros Lenguajes,[object Object],Existe soporte para otros lenguajes como Python, Ruby, PHP o .NET,[object Object],PHP: Tarzan AWS (http://code.google.com/p/tarzan-aws/),[object Object],http://www.slideshare.net/federicof/cloudify-your-applications-with-amazon-web-services?src=related_normal&rel=3462501,[object Object],Más información en:,[object Object],http://developer.amazonwebservices.com,[object Object]
Ejemplo Plataforma Cloud: Google App Engine,[object Object],Google AppEngine es una herramienta para el alojamiento de aplicaciones web escalables sobre la infraestructura de Google,[object Object],Su misión es permitir al desarrollador web crear fácilmente aplicaciones web escalables sin ser un experto en sistemas,[object Object],Aporta las siguientes características a los desarrolladores:,[object Object],Limita la responsabilidad del programador al desarrollo y primer despliegue –  Google AppEngine provee recursos computacionales dinámicamente según son necesarios,[object Object],Toma control de los picos de tráfico – si nuestro portal crece en popularidad no es necesario actualizar nuestra infraestructura (servidores, BBDD),[object Object],Ofrece replicación y balanceo de carga automática apoyado en componentes como Bigtable,[object Object],Fácilmente integrable con otros servicios de Google – los desarrolladores pueden hacer uso de componentes existentes y la librería de APIs de Google (email, autenticación, pagos, etc.),[object Object]
Google AppEngine:Características,[object Object],Ofrece una plataforma completa para el alojamiento y escalado automático de aplicaciones, consistiendo en:,[object Object],Servidores de aplicaciones Python y Java,[object Object],La base de datos BigTable,[object Object],El sistema de ficheros GFS,[object Object],Como desarrollador simplemente tienes que subir tu código Python o Java compilado a Google, lanzar la aplicación y monitorizar el uso y otras métricas,[object Object],Google AppEngine incluye la librería estándar de Python 2.5 y soporta Java 1.6,[object Object],No todas las acciones se permiten (acceso a ficheros, llamadas al SO, algunas llamadas de red),[object Object],Se ejecuta en un entorno restringido para permitir que las aplicaciones escalen,[object Object],Ejemplo: ,[object Object],https://appengine.google.com,[object Object],http://enpresadigitala.appspot.com/encuestas,[object Object],http://code.google.com/intl/en/appengine/docs/,[object Object]
Facturación Google AppEngine,[object Object],[object Object]
Página de presupuestado y facturación de recursos: http://code.google.com/intl/es/appengine/docs/billing.html
Detalles sobre las cuotas en: http://code.google.com/intl/es/appengine/docs/quotas.html,[object Object]
Google AppEngine: Python y Java,[object Object],Vamos a revisar primero (brevemente) cómo realizar aplicaciones con Python,[object Object],Luego nos centraremos en cómo hacerlo desde Java en mayor grado de detalle,[object Object]
GAE forPython: Instalación,[object Object],Descargar Google AppEngine SDK para Python de: http://code.google.com/appengine/downloads.html,[object Object],Herramientas de la SDK para Python:,[object Object],dev_appserver.py, el servidor web de desarrollo,[object Object],appcfg.py, sirve para subir tu aplicación a App Engine,[object Object],Herramienta de descarga de datos – esunaherramientasencillaquetepermitesubirdatos en ficheros CSV al almacen de datos de appengine,[object Object],http://code.google.com/intl/es/appengine/docs/python/tools/uploadingdata.html,[object Object]
Principios,[object Object],Una aplicación de AppEngine se comunica con el servidor que la aloja a través de CGI,[object Object],Cuando recibe una petición el servidor lee de la entrada estándar y de las variables de entorno,[object Object],Cuando genera una respuesta escribe a la salida estándar,[object Object]
Mi primera aplicación,[object Object],Crear el directorio helloworld,[object Object],Crea el fichero helloworld.py dentro de él con el siguiente contenido, que corresponde a una respuesta HTTP:,[object Object],print 'Content-Type: text/plain',[object Object],print '',[object Object],print 'Hello, world!‘,[object Object],Crea el fichero de configuración requerido por toda aplicación AppEngine denominado app.yaml, en formato YAML (http://www.yaml.org/):,[object Object],http://code.google.com/appengine/docs/configuringanapp.html,[object Object],application: helloworld,[object Object],version: 1,[object Object],runtime: python,[object Object],api_version: 1,[object Object],handlers:,[object Object],- url: /.*,[object Object],  script: helloworld.py,[object Object],Arranca el servidor con el comando:dev_appserver.py helloworld/,[object Object],[object Object],Vete a la siguiente URL para probarlo: http://localhost:8080/,[object Object]
Ejecutando Hola Mundo en Google App Engine ,[object Object]
Opciones Avanzadas para GAE forPython,[object Object],Framework webapp que soporta el estándar WSGI ,[object Object],Acceso a datos de usuarios mediante la Users API,[object Object],DataStore API,[object Object],Plantillas en Google AppEngine,[object Object]
Usando el Almacén de Datos de Google AppEngine,[object Object],Guardar datos en una aplicación web escalable puede ser difícil,[object Object],La infraestructura de AppEngine se encarga de la distribución, replicación y balanceo de carga de los datos detrás de una API sencilla que también ofrece un motor de consultas y transacciones,[object Object],App Engine incluye una API de modelado de datos para Python,[object Object],Se asemeja a la API de Django pero utiliza el servidor de datos escalable BigTable por detrás.,[object Object],No esrelacional, todaslasentidades de un mismotipotienenlasmismaspropiedades,[object Object],Unapropiedadpuedeteneruno o variosvalores,[object Object],El siguiente import nos da acceso a la base de datos de Google AppEngine: ,[object Object],fromgoogle.appengine.extimportdb,[object Object],Para más detalles sobre el DataStore API ir a: http://code.google.com/appengine/docs/datastore/,[object Object]
La API del DataStore,[object Object],Incluye una API de modelado de datos y un lenguaje similar a SQL que NO permite JOINs y que se llama GQL, haciendo el desarrollo de aplicaciones escalables basadas en datos muy sencillo.,[object Object],fromgoogle.appengine.extimportdbfromgoogle.appengine.apiimportusersclassPet(db.Model):  name = db.StringProperty(required=True)  type = db.StringProperty(required=True, choices=set(["cat", "dog", "bird"]))  birthdate = db.DateProperty()  weight_in_pounds = db.IntegerProperty()  spayed_or_neutered = db.BooleanProperty()  owner = db.UserProperty()pet = Pet(name="Fluffy",          type="cat",          owner=users.get_current_user())pet.weight_in_pounds = 24pet.put(),[object Object]
GQL Query Language,[object Object],Para limpiar la base de datos creada: dev_appserver.py --clear_datastorehelloworld/,[object Object],Ejemplo GQL:,[object Object],ifusers.get_current_user():,[object Object],user_pets = db.GqlQuery("SELECT * FROM Pet WHERE pet.owner = :1“, users.get_current_user()),[object Object],forpet in user_pets:,[object Object],pet.spayed_or_neutered = True,[object Object],  db.put(user_pets),[object Object]
Usando plantillas en Google App Engine,[object Object],Empotrar HTML en código es algo lioso y difícil de mantener.,[object Object],Los sistemas de plantillas están diseñados para mantener HTML aparte en otro fichero donde elementos con sintaxis especial indican dónde deberían aparecer los datos de la aplicación,[object Object],Dentro de AppEngine puede utilizarse cualquier motor de plantillas empaquetándolo con el código de tu aplicación, webapp incluye el mecanismo de plantillas de Django, donde se pueden pasar objetos del modelo datos ,[object Object],Para utilizarlo hay que incluir los dos siguientes imports:,[object Object],import os,[object Object],fromgoogle.appengine.ext.webappimporttemplate,[object Object],Además reemplazar las sentenciasself.response.out.write por la sentencia template.render(path, template_values), quetomacomoparámetros de entrada:,[object Object],El camino al fichero de la plantilla,[object Object],Un diccionario de valores,[object Object],Y retorna:,[object Object],El texto a renderizar,[object Object]
Registrando la aplicación,[object Object]
Verificación de tu cuenta,[object Object]
Verificación de tu Cuenta,[object Object]
Registrando la aplicación en appengine.google.com,[object Object]
Registrando la applicación,[object Object]
Subiendo la aplicación,[object Object],Es necesario realizar los siguientes pasos:,[object Object],Editar el fichero app.yaml file y cambiar el valor de la aplicación: de helloworld al nombre de id de aplicación (enpresadigitala),[object Object],Ejecutar el siguiente comando: appcfg.py updatehelloworld/ ,[object Object],Acceder a la aplicación en http://application-id.appspot.com, por ejemplo en http://enpresadigitala.appspot.com/,[object Object]
Subiendo la aplicación,[object Object]
Accediendo a la aplicación,[object Object]
Programando Google App Engine con Django,[object Object],Google AppEngine y Django tienen la habilidad de usar el estándar WSGI para ejecutar aplicaciones,[object Object],Como consecuencia podemos utilizar la pila de Django en Google AppEngine, incluso su parte de middleware,[object Object],Lo único que tenemos que hacer es cambiar los modelos de datos de Django para que usen la DataStore API de Google AppEngine,[object Object],Como ambas APIs son muy similares, tenemos la misma flexibilidad usando la potencia de BigTable, es trivial adaptar un modelo Django a Google AppEngine,[object Object],Además como Google AppEngine ya incluye Django, solamente hay que importar los módulos que utilizarías normalmente,[object Object],Para usar el gestor WSGI tenemos que realizar los siguientes pasos:,[object Object],Importar util de google.appengine.ext.webapp,[object Object],Importar WSGI handler de Django,[object Object],[OPCIONAL] Redirigir los logs a la AdminConsole de Google AppEngine,[object Object],Es conveniente cambiar las siguientes configuraciones en Django:,[object Object],Dejar vacías las variables DATABASE_* de settings.py,[object Object],Deshabilitar el middleware de session y autenticación que hace uso de los modelos Django,[object Object],Más info en: http://code.google.com/appengine/articles/django.html,[object Object],Revisar ejemplo de encuestas programado en Django para AppEngine en: examples/googleappengine/python/djangosolopsiteappengine,[object Object]
Ejemplo Django Compleja sobre AppEngine,[object Object]
AppEngine para Java,[object Object],Crea aplicaciones web a través de tecnologías estándar de Java y las ejecuta en la infraestructura escalable Google,[object Object],Usa JVM Java 6, interfaz de servlets Java y la compatibilidad de interfaces estándar como JDO, JPA, JavaMail y JCache,[object Object],AppEngine utiliza el estándar Java Servlet para aplicaciones web,[object Object],JVM se ejecuta en un entorno seguro de la "zona de pruebas" para aislar tu aplicación por servicio y seguridad. ,[object Object],Una aplicación en GAE sólo pueda realizar acciones que no interfieran con el rendimiento ni con la escalabilidad de otras aplicaciones. ,[object Object]
Funcionalidad de AppEnginefor Java,[object Object],AppEngine proporciona un conjunto de servicios escalables que pueden utilizar las aplicaciones para:,[object Object],Almacenar datos persistentes. En Java, el almacén de datos admite 2 interfaces Java estándar: los objetos de datos Java (JDO) 2.3 y el API de persistencia de Java (JPA) 1.0.,[object Object],Acceder a recursos en la red. A través de la URL Fectch API. ,[object Object],Cachear información. Memcache de AppEngine proporciona un almacenamiento en caché distribuido, transitorio y rápido de los resultados de cálculos y consultas de almacén de datos. La interfaz Java implementa JCache (JSR 107).,[object Object],Enviar email. Da soporte de JavaMail para el envío de correos,[object Object],Procesar imágenes. A través de la Images Java API, permite a las aplicaciones transformar y manipular datos de imágenes en varios formatos.,[object Object],Gestionar usuarios. A través de la Users Java API permite utilizar Cuentas de Google para la autenticación del usuario.,[object Object],Lanzar tareas planificadas o en background. Mediante la TaskQueue Java API y la gestión de tareas por Cron.,[object Object]
Instalación de AppEnginefor Java,[object Object],Descargar el fichero de:,[object Object],http://code.google.com/intl/es/appengine/downloads.html#Google_App_Engine_SDK_for_Java,[object Object],Descomprimir el fichero .zip,[object Object],Crear una variable de entorno APPENGINE_JAVA_SDK que apunte al directorio raíz de instalación de la SDK,[object Object],Incluir el directorio %APPENGINE_JAVA_SDK%inen la variable de entorno PATH,[object Object]
Pasos para crear una Aplicación con Google AppEngine para Java,[object Object],Crear el proyecto de la aplicación,[object Object],Crear la clase servlet,[object Object],Crear el fichero de despliegue de la aplicación: web.xml,[object Object],Crear el archivo appengine-web.xml,[object Object],Ejecutar el proyecto,[object Object],Probar el proyecto: http://localhost:8080/<nombre-aplicación> ,[object Object],Subir la aplicación al dominio appspot.com,[object Object]
Configuración del Entorno,[object Object],Instalar java,[object Object],Descomprimir la distribución de GAE for Java a una carpeta de tu disco duro,[object Object],Modificar la variable de entorno APPENGINE_JAVA_SDK para que apunte a ese directorio,[object Object],Modificar la variable de entorno PATH para que apunte a %APPENGINE_JAVA_SDK%in,[object Object],Descomprimir el fichero downloadspache-ant-1.8.1-bin.zip,[object Object],Modificar la variable de entorno PATH para que apunte a <ANT_DIR>in,[object Object],cdexamplesoogleappengineavauestbook,[object Object],ant,[object Object]
Paso 1: Creando la estructura del proyecto,[object Object],Dos opciones:,[object Object],Usar el plug-in para Eclipse: http://code.google.com/intl/es/appengine/docs/java/tools/eclipse.html,[object Object],Usar la plantilla de proyecto disponible en %APP_ENGINE_HOME%emosew_project_template,[object Object],Las aplicaciones Java de AppEngine utilizan el API Java Servlet para interactuar con el servidor web. ,[object Object],Un servlet HTTP es una clase de aplicación que puede procesar y responder solicitudes web. Esta clase amplía la clase javax.servlet.GenericServlet o a la clase javax.servlet.http.HttpServlet.,[object Object],La estructura del directorio de trabajo será la siguiente:,[object Object],Guestbook/ ,[object Object],src/ ,[object Object],     ...Java sourcecode... ,[object Object],     META-INF/ ,[object Object],        ...otherconfiguration... ,[object Object],war/ ,[object Object],    ...JSPs, images, data files... ,[object Object],    WEB-INF/ ,[object Object],       ...appconfiguration... ,[object Object],classes/ ,[object Object],       ...compiledclasses... ,[object Object],lib/ ,[object Object],       ...JARsforlibraries...,[object Object]
Paso 2: Creando la clase Servlet,[object Object],Crear en el directorio src/guestbook/ un fichero denominado GuestbookServlet.java con el siguiente contenido:,[object Object],packageguestbook;importjava.io.IOException;importjavax.servlet.http.*;publicclassGuestbookServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestreq, HttpServletResponseresp) throwsIOException {      resp.setContentType("text/plain");      resp.getWriter().println("Hello, world");   }},[object Object]
Paso 3: Creando el fichero de despliegue – web.xml,[object Object],Cuando el servidor web recibe una solicitud, decide qué clase de servlet ejecutar mediante un archivo de configuración conocido como "descriptor de implementación de la aplicación web". ,[object Object],Este archivo se denomina web.xml y se ubica en el directorio war/WEB-INF/ del directorio que contiene los ficheros de una aplicación web en Java,[object Object],<?xmlversion="1.0" encoding="utf-8"?>,[object Object],<!DOCTYPE web-app PUBLIC,[object Object], "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN",[object Object], "http://java.sun.com/dtd/web-app_2_3.dtd">,[object Object],<web-appxmlns="http://java.sun.com/xml/ns/javaee" version="2.5">,[object Object],<servlet>,[object Object],        <servlet-name>guestbook</servlet-name>,[object Object],        <servlet-class>guestbook.GuestbookServlet</servlet-class>,[object Object],    </servlet>,[object Object],    <servlet-mapping>,[object Object],        <servlet-name>guestbook</servlet-name>,[object Object],        <url-pattern>/guestbook</url-pattern>,[object Object],    </servlet-mapping>,[object Object],    <welcome-file-list>,[object Object],        <welcome-file>index.html</welcome-file>,[object Object],    </welcome-file-list>,[object Object],</web-app>,[object Object]
Paso 4: Crear el fichero de configuración de aplicación GAE: appengine-web.xml,[object Object],AppEngine necesita un archivo de configuración adicional para poder desarrollar y ejecutar la aplicación, denominado appengine-web.xml ,[object Object],Se ubica en WEB-INF/ junto a web.xml. ,[object Object],Incluye la ID registrada de la aplicación, el número de versión de la aplicación y listas de archivos que se deben tratar como archivos estáticos (por ejemplo, imágenes y CSS) y archivos de recursos (por ejemplo, JSP y otros datos de aplicación).,[object Object],El directorio war/WEB-INF/ incluye un archivo denominado appengine-web.xml que contiene lo siguiente:,[object Object],<?xmlversion="1.0" encoding="utf-8"?>,[object Object],<appengine-web-appxmlns="http://appengine.google.com/ns/1.0">,[object Object],<application>librocitas</application>,[object Object],    <version>1</version>,[object Object],</appengine-web-app>,[object Object]
Paso 5: Ejecución del Proyecto,[object Object],El SDK de AppEngine incluye un servidor web de pruebas para depurar tu aplicación.,[object Object],El servidor simula los servicios y el entorno AppEngine, que incluyen restricciones en la zona de pruebas, el almacén de datos y los servicios.,[object Object],Con el fichero ant ejecuta: antrunserver,[object Object],Puedes detenerlo con Ctrl-C,[object Object]
Paso 6: Subiendo la aplicación,[object Object],Puedes crear y administrar aplicaciones web AppEngine con la consola de administración de AppEngine a través de la siguiente URL: http://appengine.google.com/,[object Object],Para crear una nueva aplicación, haz clic en el botón "CreateanApplication" (Crear aplicación),[object Object],Edita el archivo appengine-web.xml y, a continuación, cambia el valor del elemento <application> para que sea la ID registrada de tu aplicación (librocitas).,[object Object],Ejecuta el siguiente comando en línea de comandos para subir la aplicación: $ appcfg update www,[object Object],Vete a: http://librocitas.appspot.com/,[object Object]
El fichero de Ant,[object Object],Apache Ant facilita la administración de tu proyecto desde la línea de comandos o desde otros entornos de desarrollo integrados (IDE) compatibles con Ant.,[object Object],El SDK de Java incluye un conjunto de macros de Ant para realizar tareas de desarrollo de AppEngine, entre las que se incluyen:,[object Object],El inicio del servidor de desarrollo y ,[object Object],La subida de la aplicación a AppEngine,[object Object],Algunos problemas con el build.xml suministrado por new-project-template,[object Object],Fichero adaptado en examples/guestbook/build.xml:,[object Object],Hay que definir variable de entorno APP_ENGINE_SDK para desligar build.xml de su localización en disco,[object Object],Introducir tarea para copiar jars con dependencias,[object Object]
Usando el Servicio de Usuarios,[object Object],Google AppEngine ofrece varios servicios útiles basados en la infraestructura de Google a los que se puede acceder a través de aplicaciones utilizando una serie de bibliotecas incluidas en el kit de desarrollo de software (SDK),[object Object],Por ejemplo, el servicio de usuarios te permite integrar tu aplicación con cuentas de usuarios de Google,[object Object],packageguestbook;importjava.io.IOException;importjavax.servlet.http.*;importcom.google.appengine.api.users.User;importcom.google.appengine.api.users.UserService;importcom.google.appengine.api.users.UserServiceFactory;publicclassGuestbookServletextendsHttpServlet {    publicvoiddoGet(HttpServletRequestreq, HttpServletResponseresp)              throwsIOException {        UserServiceuserService = UserServiceFactory.getUserService();        Useruser = userService.getCurrentUser();        if (user != null) {            resp.setContentType("text/plain");            resp.getWriter().println("Hello, " + user.getNickname());        } else {            resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));        }    }},[object Object]
Uso de un JSP,[object Object],Aunque podríamos generar el código HTML para la interfaz de usuario directamente a partir del código Java del servlet, no sería algo fácil de mantener, ya que el código HTML se complica,[object Object],Es más conveniente utilizar un sistema de plantillas, en el que la interfaz de usuario esté diseñada e implementada en archivos independientes con marcadores y lógica para insertar datos proporcionados por la aplicación.,[object Object],Pasos:,[object Object],En el directorio war/, crea un archivo llamado guestbook.jsp con el contenido de la siguiente transparencia,[object Object],Modificar el fichero web.xml para que el welcome-file apunte a guestbook.jsp,[object Object],Acceder a la ruta: http://localhost:8080/guestbook.jsp o http://localhost:8080/,[object Object],Al cargar una JSP por primera vez, el servidor de desarrollo lo convierte en código fuente Java y, a continuación, compila este código en código de bytes de Java,[object Object],Al subir la aplicación a AppEngine, el SDK compila todas las JSP en código de bytes y únicamente sube el código de bytes.,[object Object]
Uso de un JSP,[object Object],<%@ page contentType="text/html;charset=UTF-8" language="java" %>,[object Object],<%@ page import="com.google.appengine.api.users.User" %>,[object Object],<%@ page import="com.google.appengine.api.users.UserService" %>,[object Object],<%@ page import="com.google.appengine.api.users.UserServiceFactory" %>,[object Object],<html>  ,[object Object], <body><% ,[object Object],UserServiceuserService = UserServiceFactory.getUserService();   ,[object Object],Useruser = userService.getCurrentUser();    ,[object Object],if (user != null) {%>,[object Object],      <p>Hello, <%= user.getNickname() %>! (You can<a href="<%= userService.createLogoutURL(request.getRequestURI()) %>">signout</a>.)</p><%    ,[object Object],    } else {%>,[object Object],      <p>Hello!<a href="<%= userService.createLoginURL(request.getRequestURI()) %>">Sign in</a>toincludeyournamewithgreetingsyou post.</p><%    ,[object Object],    }%>  ,[object Object],</body>,[object Object]
Formulario Libro Invitados,[object Object],La aplicación de libro de invitados necesita un formulario web para que el usuario publique un nuevo saludo, así como una forma de procesar ese formulario,[object Object],El código HTML del formulario se inserta en la JSP guestbook.jsp:,[object Object],<form action="/sign" method="post"> ,[object Object],  <div><textarea name="content" rows="3" cols="60"></textarea></div> ,[object Object],  <div><input type="submit" value="Post Greeting" /></div> ,[object Object],</form> ,[object Object],El destino del formulario es una nueva URL, /sign, controlada por una nueva clase de servlet,SignGuestbookServlet que procesa el formulario y redirige a: /guestbook.jsp,[object Object],Es necesario modificar web.xml para crear una nueva entrada para este servlet, con los siguientes datos:,[object Object],<servlet> ,[object Object],<servlet-name>sign</servlet-name> ,[object Object],  <servlet-class>guestbook.SignGuestbookServlet</servlet-class> ,[object Object],</servlet> ,[object Object],<servlet-mapping> ,[object Object],  <servlet-name>sign</servlet-name> ,[object Object],  <url-pattern>/sign</url-pattern> ,[object Object],</servlet-mapping> ,[object Object]
El Servlet que Procesa una Nueva Entrada en Libro,[object Object],packageguestbook;,[object Object],importjava.io.IOException;,[object Object],importjava.util.logging.Logger;,[object Object],importjavax.servlet.http.*;,[object Object],importcom.google.appengine.api.users.User;,[object Object],importcom.google.appengine.api.users.UserService;,[object Object],importcom.google.appengine.api.users.UserServiceFactory;,[object Object],publicclassSignGuestbookServletextendsHttpServlet {,[object Object],privatestatic final Logger log = Logger.getLogger(SignGuestbookServlet.class.getName());,[object Object],publicvoiddoPost(HttpServletRequestreq, HttpServletResponseresp)				throwsIOException{,[object Object],UserServiceuserService = UserServiceFactory.getUserService();		,[object Object],Useruser = userService.getCurrentUser();		,[object Object],Stringcontent = req.getParameter("content");	,[object Object],if (content == null) {			,[object Object],content = "(No greeting)";		,[object Object],    }		,[object Object],if (user != null) {			,[object Object],      log.info("Greetingpostedbyuser " + user.getNickname() + ": " + content);,[object Object],    } else {			,[object Object],      log.info("Greetingpostedanonymously: " + content);		,[object Object],    }		,[object Object],resp.sendRedirect("guestbook.jsp");	,[object Object],  },[object Object],},[object Object]
Logeo de Información con AppEngine,[object Object],El nuevo servlet utiliza la clase java.util.logging.Logger para escribir mensajes en el registro.,[object Object],Puedes controlar el comportamiento de esta clase a través de un archivo logging.properties y de un conjunto de propiedades del sistema en el archivo appengine-web.xml de la aplicación.,[object Object],Copia el archivo de ejemplo del SDK appengine-java-sdk/config/user/logging.properties en el directorio war/WEB-INF/ de la aplicación,[object Object], Para modificar el nivel de registro de todas las clases del paquete guestbook, edita el archivo logging.properties y añade una entrada para guestbook.level, como se muestra a continuación:,[object Object],.level = WARNING,[object Object],guestbook.level = INFO,[object Object],A continuación edita el archivo war/WEB-INF/appengine-web.xml de la aplicación como se indica:,[object Object],<appengine-web-appxmlns="http://appengine.google.com/ns/1.0"> ... ,[object Object],  <system-properties> ,[object Object],    <propertyname="java.util.logging.config.file" value="WEB-INF/logging.properties"/> ,[object Object],  </system-properties>,[object Object],</appengine-web-app>,[object Object],Los ficheros de logeo se descargan con la consola de administración o la aplicación ,[object Object],appcfg de AppEngine: https://appengine.google.com/logs,[object Object]
Uso del Almacen de Datos JDO,[object Object],La infraestructura de AppEngine se encarga de todas las tareas de distribución, replicación y balanceo de carga de los datos de un API sencilla, además de ofrecer un potente motor de consulta y transacciones.,[object Object],Ofrece dos API: un API estándar y otra de nivel inferior.,[object Object],AppEnginefor Java permite el uso de dos estándares de API diferentes para el almacén de datos: Objetos de datos Java (JDO) y API de persistencia Java (JPA).,[object Object],Estas interfaces las proporciona DataNucleus Access Platform, una implementación de software libre de varios estándares de persistencia Java, con un adaptador para Google DataStore,[object Object],Utilizaremos la interfaz JDO para la recuperación y la publicación de los mensajes de los usuarios en el almacén de datos de AppEngine.,[object Object],Access Platformnecesita un archivo de configuración que le indique que debe utilizar el almacén de datos de AppEngine como servidor para la implementación de JDO: META-INF/jdoconfig.xml,[object Object],Documentación detallada de JDO puede encontrarse en: http://code.google.com/appengine/docs/java/datastore/,[object Object]
Funcionamiento de JDO,[object Object],Al crear clases JDO, debes utilizar anotaciones Java para describir cómo se deben guardar las instancias en el almacén de datos y cómo se deben volver a crear al recuperarlas de dicho almacén. ,[object Object],Access Platform conecta las clases de datos a la implementación mediante un paso de procesamiento posterior a la compilación, que DataNucleus denomina "mejora" de las clases.,[object Object],JDO permite almacenar objetos Java (a veces denominados "objetos Java antiguos y simples" o POJO) en cualquier almacén de datos con un adaptador compatible con JDO, como DataNucleus Access Platform,[object Object],El complemento Access Platform para el almacén de datos de AppEngine permite almacenar instancias de clases definidas en el almacén de datos de AppEngine,[object Object],Ejemplo: la clase Greeting representará mensajes individuales publicados en el libro de invitados de nuestra aplicación,[object Object]
La Clase de Persistencia Greeting,[object Object],packageguestbook;,[object Object],importjava.util.Date;,[object Object],importjavax.jdo.annotations.IdGeneratorStrategy;,[object Object],importjavax.jdo.annotations.IdentityType;,[object Object],importjavax.jdo.annotations.PersistenceCapable;,[object Object],importjavax.jdo.annotations.Persistent;,[object Object],importjavax.jdo.annotations.PrimaryKey;,[object Object],importcom.google.appengine.api.users.User;,[object Object],@PersistenceCapable(identityType = IdentityType.APPLICATION),[object Object],publicclassGreeting {    ,[object Object],@PrimaryKey,[object Object],  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)    ,[object Object],private Long id;    ,[object Object],@Persistent,[object Object],privateUserauthor;    ,[object Object],  @Persistent,[object Object],privateStringcontent;    ,[object Object],@Persistent,[object Object],private Date date;    ,[object Object],publicGreeting(Userauthor, Stringcontent, Date date) {        ,[object Object],this.author = author;        ,[object Object],this.content = content;        ,[object Object],this.date = date;    ,[object Object],  }    ,[object Object],  ...,[object Object],},[object Object]
La Clase de Persistencia Greeting,[object Object],Esta sencilla clase define tres propiedades para un saludo: author, content y date,[object Object],Estos tres campos privados presentan la anotación @Persistent, que indica a DataNucleus que debe almacenarlos como propiedades de objetos en el almacén de datos de AppEngine.,[object Object],La clase también define un campo llamado id, una clave Long que presenta dos anotaciones: @Persistent y @PrimaryKey. ,[object Object],El almacén de datos de AppEngine tiene una noción de las claves de entidades y puede representar las claves de varias formas en un objeto.,[object Object],Más información sobre cómo definir modelos de datos puede encontrarse en: http://code.google.com/intl/es/appengine/docs/java/datastore/dataclasses.html,[object Object]
Serializando datos con JDO,[object Object],Cada solicitud que utiliza el almacén de datos crea una nueva instancia de la clase PersistenceManager que se obtiene a través de PersistenceManagerFactory,[object Object],Una instancia de PersistenceManagerFactory tarda algún tiempo en inicializarse,[object Object],Afortunadamente, sólo se necesita una instancia para cada aplicación,[object Object],Creamos la clase singletonPMF para resolverlo:,[object Object],packageguestbook;,[object Object],importjavax.jdo.JDOHelper;,[object Object],importjavax.jdo.PersistenceManagerFactory;,[object Object],public final class PMF {	,[object Object],privatestatic final PersistenceManagerFactorypmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional");	,[object Object],private PMF() {}	,[object Object],publicstaticPersistenceManagerFactoryget() {	returnpmfInstance;	,[object Object],  },[object Object],},[object Object],Para usarlo creamos una nueva instancia de Greeting mediante la ejecución del constructor. ,[object Object],Para guardar la instancia en el almacén de datos, crea una clase PersistenceManager a través de PMF.get() e invocamos sobre él makePersistent(),[object Object]
Serializando datos con JDO,[object Object],Dentro del fichero SignGuestBookServlet introduciríamos los siguientes cambios para serializar los saludos en AppEngineDataStore, a través de JDO:,[object Object],Stringcontent = req.getParameter("content");		,[object Object],Date date = new Date();        ,[object Object],Greetinggreeting = new Greeting(user, content, date);		,[object Object],PersistenceManager pm = PMF.get().getPersistenceManager();		,[object Object],try {			,[object Object],pm.makePersistent(greeting);		,[object Object],} finally {			,[object Object],pm.close();		,[object Object],},[object Object]
Consultando datos con JDO,[object Object],El estándar JDO define un mecanismo para consultas de objetos persistentes denominado JDOQL. ,[object Object],Modificaremos guestbook.jsp para realizar la consulta introduciendo los siguientes cambios:,[object Object],<%@ page import="java.util.List" %><%@ page import="javax.jdo.PersistenceManager" %><%@ page import="guestbook.Greeting" %><%@ page import="guestbook.PMF" %>,[object Object],…,[object Object],<%		,[object Object],PersistenceManager pm = PMF.get().getPersistenceManager();,[object Object],String query = "select from " + Greeting.class.getName() + " order by date desc range 0,5"; ,[object Object],List<Greeting> greetings = (List<Greeting>) pm.newQuery(query).execute();		,[object Object],if (greetings.isEmpty()) { %>			,[object Object],  <p>Theguestbook has no messages.</p> <%		,[object Object],} else {			,[object Object],for (Greeting g : greetings) {				,[object Object],if (g.getAuthor() == null) { %>					,[object Object],      <p>Ananonymouspersonwrote:</p> <%				,[object Object],    } else { %>					,[object Object],      <p><b><%= g.getAuthor().getNickname() %></b> wrote:</p> <%		 ,[object Object],    } %>				,[object Object],    <blockquote><%= g.getContent() %></blockquote>	<%			,[object Object],  }		,[object Object],}		,[object Object],pm.close();		,[object Object],%>,[object Object]
Usando Ficheros Estáticos,[object Object],Hay muchos casos en los que querrás mostrar los archivos estáticos directamente en el navegador web: imágenes, vídeos,[object Object],Para una mayor eficiencia, AppEngine muestra los archivos estáticos desde servidores independientes en lugar de los que ejecutan servlets.,[object Object],AppEngine considera todos los archivos del directorio WAR como archivos estáticos, salvo JSP y los archivos de WEB-INF/,[object Object],Cualquier solicitud de una URL cuya ruta coincida con un archivo estático lo muestra ,[object Object],Puedes configurar los archivos que quieres que AppEngine considere como archivos estáticos a través del archivo appengine-web.xml,[object Object],La siguiente página da más información al respecto: http://code.google.com/intl/es/appengine/docs/java/config/appconfig.html,[object Object],Para este ejemplo:,[object Object],Crear main.css con el siguiente contenido:,[object Object],body { font-family: Verdana, Helvetica, sans-serif; background-color: #FFFFCC; },[object Object],Añadir a guestbook.jsp lo siguiente: ,[object Object],<head> <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" /> </head>,[object Object]
Creando de Objetos y Claves,[object Object],Para almacenar un objeto de datos sencillo en el almacén de datos, ejecuta el método makePersistent() del PersistenceManager y transfiérelo a la instancia.,[object Object],PersistenceManager pm = PMF.get().getPersistenceManager();,[object Object],Employee e = new Employee("Alfred", "Smith", new Date());,[object Object],try {,[object Object],pm.makePersistent(e);,[object Object],} finally {,[object Object],pm.close();,[object Object],},[object Object],Las claves más sencillas están basadas en los tipos Long o String, pero también se pueden crear con la clase Key. ,[object Object],importcom.google.appengine.api.datastore.Key;,[object Object],importcom.google.appengine.api.datastore.KeyFactory;,[object Object],// ...,[object Object],Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");,[object Object],Para recuperar un elemento por clave podemos usar lo siguiente, se puede pasar como segundo argumento una clave, un entero o un string:,[object Object],Employee e = pm.getObjectById(Employee.class, "Alfred.Smith@example.com");,[object Object]
Actualización y Borrado de Objetos,[object Object],El siguiente código muestra cómo actualizar un objeto persistente:,[object Object],publicvoidupdateEmployeeTitle(Useruser, StringnewTitle) {,[object Object],PersistenceManager pm = PMF.get().getPersistenceManager(); try {    Employee e = pm.getObjectById(Employee.class, user.getEmail());    if (titleChangeIsAuthorized(e, newTitle) {       e.setTitle(newTitle);    } else {       throw new UnauthorizedTitleChangeException(e, newTitle);    } } finally {    pm.close(); },[object Object],},[object Object],El siguiente ejemplo muestra cómo borrar un objeto:,[object Object],pm.deletePersistent(e);,[object Object]
Realizando Consultas con JDO,[object Object],JDOQL es similar a SQL, aunque es más adecuado para bases de datos relacionadas con objetos, como, por ejemplo, el almacén de datos de AppEngine.,[object Object],Dos usos diferentes:,[object Object],Puedes especificar parte o la totalidad de la consulta mediante métodos de ejecución en el objeto de consulta,[object Object],importjava.util.List;,[object Object],importjavax.jdo.Query;,[object Object],// ...,[object Object],Queryquery = pm.newQuery(Employee.class);,[object Object],query.setFilter("lastName == lastNameParam");,[object Object],query.setOrdering("hireDatedesc");,[object Object],query.declareParameters("StringlastNameParam");,[object Object],try {,[object Object],   List<Employee> results = (List<Employee>) query.execute("Smith");,[object Object],if (results.iterator().hasNext()) {,[object Object],for (Employee e : results) {,[object Object],	   // ...,[object Object],	   },[object Object],	} else {,[object Object],	   // ... no results ...,[object Object],	},[object Object],} finally {,[object Object],query.closeAll();,[object Object],},[object Object]
Realizando Consultas con JDO,[object Object],Puedes especificar una consulta completa en una cadena mediante la sintaxis de cadena JDOQL:,[object Object],Queryquery = pm.newQuery("selectfromEmployee " +    "wherelastName == lastNameParam " +    "orderbyhireDatedesc " +    "parametersStringlastNameParam");,[object Object],List<Employee> results = (List<Employee>) query.execute("Smith");,[object Object],Otro modo:,[object Object],Queryquery = pm.newQuery(Employee.class,    "lastName == lastNameParamorderbyhireDatedesc");,[object Object],query.declareParameters("StringlastNameParam");,[object Object],List<Employee> results = (List<Employee>) query.execute("Smith");,[object Object],Query query = pm.newQuery(Employee.class,    "lastName == 'Smith' order by hireDatedesc");,[object Object]
Filtros y Restricciones en Consultas JDO sobre AppEngine,[object Object],Algunos ejemplos de filtros son:,[object Object],query.setFilter("lastName == 'Smith' && hireDate > hireDateMinimum");,[object Object],query.declareParameters("Date hireDateMinimum");,[object Object],Queryquery = pm.newQuery(Employee.class,    "(lastName == 'Smith' || lastName == 'Jones')" +    " && firstName == 'Harold'");,[object Object],ATENCIÓN: importantes restricciones en las consultas, revisar:,[object Object],http://code.google.com/intl/es/appengine/docs/java/datastore/queriesandindexes.html#Restrictions_on_Queries,[object Object],Ejemplo: Los filtros de desigualdad sólo están permitidos en una propiedad,[object Object]
Ejemplo Objeto Serializable,[object Object],La siguiente clase define un objeto que puede serializarse en JDO:,[object Object],importjava.io.Serializable;,[object Object],publicclassDownloadableFileimplementsSerializable{,[object Object],private byte[] content;,[object Object],privateStringfilename;,[object Object],privateStringmimeType; // ... accessors ...,[object Object],},[object Object],La siguiente clase define cómo usarlo:,[object Object],importjavax.jdo.annotations.Persistent;,[object Object],importDownloadableFile;,[object Object],// ...,[object Object],@Persistent(serialized = "true");,[object Object],privateDownloadableFilefile;,[object Object]
Ejemplo Relación 1 a 1 entre Entidades,[object Object],importcom.google.appengine.api.datastore.Key;,[object Object],// ... imports ...,[object Object],@PersistenceCapable,[object Object],publicclassContactInfo {,[object Object],   @PrimaryKey,[object Object],   @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY),[object Object],private Key key;,[object Object],   @Persistent,[object Object],privateStringstreetAddress;,[object Object],   @Persistent,[object Object],privateStringcity;,[object Object],   @Persistent,[object Object],privateStringstateOrProvince;,[object Object],   @Persistent,[object Object],privateStringzipCode;,[object Object],   // ... accessors ...,[object Object],},[object Object],importContactInfo;,[object Object],// ... imports ...,[object Object],@PersistenceCapable,[object Object],publicclassEmployee {,[object Object],    @PrimaryKey,[object Object],    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY),[object Object],private Key key;,[object Object],    @Persistent,[object Object],privateContactInfomyContactInfo;,[object Object],    // ... accessors ...,[object Object],},[object Object]
Relaciones Uno a Varios,[object Object],Ejemplo de relación bidireccional uno a varios:,[object Object],// Employee.java,[object Object],importjava.util.List;,[object Object],// ...,[object Object],@Persistent,[object Object],private List<ContactInfo> contactInfoSets;,[object Object],// ContactInfo.java,[object Object],importEmployee;,[object Object],// ...,[object Object],@Persistent,[object Object],privateEmployeeemployee;,[object Object]
Relaciones Varios a Varios,[object Object],Ejemplo de relación varios a varios, sólo se puede hacer guardando colecciones de claves en ambas relaciones implicadas:,[object Object],//Person.java,[object Object],importjava.util.Set;,[object Object],importcom.google.appengine.api.datastore.Key;,[object Object],// ...,[object Object],@Persistent,[object Object],private Set<Key> favoriteFoods;,[object Object],//Food.java,[object Object],importjava.util.Set;,[object Object],importcom.google.appengine.api.datastore.Key;,[object Object],// ...,[object Object],@Persistent,[object Object],private Set<Key> foodFans;,[object Object],// Album.java,[object Object],// ...,[object Object],publicvoidaddFavoriteFood(Foodfood) {,[object Object],    favoriteFoods.add(food.getKey());,[object Object],food.getFoodFans().add(getKey());,[object Object],},[object Object],publicvoidremoveFavoriteFood(Foodfood) {,[object Object],favoriteFoods.remove(food.getKey());,[object Object],food.getFoodFans().remove(getKey());,[object Object],},[object Object]
Características Avanzadas de Google AppEngine,[object Object],Planificación de tareas con Cron for Java,[object Object],http://code.google.com/appengine/docs/java/config/cron.html,[object Object],Memcache Java API,[object Object],http://code.google.com/appengine/docs/java/memcache/overview.html,[object Object],URL Fech Java API,[object Object],http://code.google.com/appengine/docs/java/urlfetch/overview.html,[object Object],Envío de mensajes instantáneos con XMPP e email ,[object Object],http://code.google.com/appengine/docs/java/xmpp/overview.html,[object Object],Colas de tareas – permite ejecutar asíncronamente tareas,[object Object],http://code.google.com/appengine/docs/java/taskqueue/overview.html,[object Object]
Planificación de Tareas con Cron,[object Object],El servicio AppEngine Cron Service permite planificar tareas que se ejecutan en un momento o periodos determinados.,[object Object],Los trabajos cron (cron jobs) son ejecutados por AppEngine Cron Service,[object Object],Algunos ejemplos de uso serían:,[object Object],Envío de email con informe diario,[object Object],Actualización de tu caché de datos cada 10 minutos,[object Object],Documentación en: http://code.google.com/appengine/docs/java/config/cron.html,[object Object],Formato de las planificaciones:,[object Object],("every"|ordinal) (days) ["of" (monthspec)] (time),[object Object]
Planificación de Tareas con Cron,[object Object],El fichero WEB-INFron.xmlcontrolacronparatuaplicación:,[object Object],<?xmlversion="1.0" encoding="UTF-8"?>,[object Object],<cronentries>,[object Object],<cron>  <url>/recache</url>  <description>Repopulatethe cache every 2 minutes</description>  <schedule>every 2 minutes</schedule></cron><cron>  <url>/weeklyreport</url>  <description>Mail out a weeklyreport</description>  <schedule>everymonday 08:30</schedule>  <timezone>America/New_York</timezone></cron>,[object Object],</cronentries>,[object Object]
Memcache Java API,[object Object],Las aplicaciones web escalables de alto rendimiento utilizan a menudo una caché distribuida de datos integrados en memoria delante o en lugar de un sistema de almacenamiento complejo permanente para algunas tareas,[object Object],AppEngine incluye un servicio de memoria caché,[object Object],El API Java de Memcache implementa la interfaz JCache (javax.cache), un estándar en formato borrador descrito en JSR 107,[object Object],JCache proporciona una interfaz en forma de mapa para recopilar datos,[object Object],Puedes almacenar y recuperar valores de la memoria caché mediante las claves,[object Object],Controlar cuándo los valores vencen en la memoria caché,[object Object],Inspeccionar el contenido de la memoria caché y obtener estadísticas sobre ella,[object Object],Utilizar "funciones de escucha" para añadir un comportamiento personalizado al establecer y borrar valores.,[object Object]
Pasos para Hacer uso de Memcache,[object Object],Obtención y configuración de una instancia de Cache, para ello hay que configurar los parámetros del método createCache,[object Object],importjavax.cache.Cache;,[object Object],importjavax.cache.CacheException;,[object Object],importjavax.cache.CacheFactory;,[object Object],// ...,[object Object],Cache cache;,[object Object],try {,[object Object],Mapprops = new Map;,[object Object],   props.put(GCacheFactory.EXPIRATION_DELTA, 3600);,[object Object],   props.put(MemcacheService.SetPolicy.ADD_ONLY_IF_NOT_PRESENT, true);,[object Object],CacheFactorycacheFactory = CacheManager.getInstance().getCacheFactory();,[object Object],   // cache = cacheFactory.createCache(Collections.emptyMap());,[object Object],   cache = cacheFactory.createCache(props);,[object Object],} catch (CacheException e) { // ... },[object Object],Establecimiento y obtención de valores.  ,[object Object],Se comporta como un mapa,[object Object],Puedes almacenar claves y valores a través del método put() y recuperar valores con el método get(),[object Object],Otros métodos de interés son: remove(), clear(), containsKey(), isEmpty() y size(),[object Object],Más documentación en: http://code.google.com/intl/es/appengine/docs/java/memcache/usingjcache.html,[object Object]
URL Fetch Java API,[object Object],GAE permite realizar conexiones HTTP y HTTPS a través del servicio URL Fetch, que en el caso de GAE for Java se implementa  mediante la clase java.net.URLConnection,[object Object],La funcionalidad que da es:,[object Object],Acceso sencillo a los contenidos de una página mediante java.net.URL y el método openStream(),[object Object],El método openConnection() de java.net.URL devuelve una instancia de HttpURLConnection, sobre la que se puede hacer getInputStream() y getOutputStream(),[object Object],Se pueden cambiar propiedades de la conexión como:,[object Object],Añadir cabeceras: connection.setRequestProperty("X-MyApp-Version", "2.7.3");,[object Object],Modificar el hecho de que las peticiones se redirijan directamente: connection.setRequestProperty("X-MyApp-Version", "2.7.3");,[object Object],Más detalles en: http://code.google.com/intl/en/appengine/docs/java/urlfetch/usingjavanet.html,[object Object]
Mail Java API,[object Object],Una aplicación en AppEngine puede enviar mensajes en representación del administrador de la página o de usuarios autorizados con cuentas Google,[object Object],La Mail Service Java API hace uso de javax.mail,[object Object],Se puede configurar tu aplicación para recibir mensajes en una dirección con el formato string@appid.appspotmail.com,[object Object],Cuando una aplicación se ejecuta en el servidor de desarrollo, el mensaje enviado se imprime en el log, no se envía,[object Object]
Enviando un Mensaje,[object Object],...,[object Object],importjava.util.Properties;,[object Object],importjavax.mail.Message;,[object Object],importjavax.mail.MessagingException;,[object Object],importjavax.mail.Session;,[object Object],importjavax.mail.Transport;,[object Object],importjavax.mail.internet.AddressException;,[object Object],importjavax.mail.internet.InternetAddress;,[object Object],importjavax.mail.internet.MimeMessage;,[object Object],// ... ,[object Object],Propertiesprops = new Properties();,[object Object],Sessionsession = Session.getDefaultInstance(props, null);,[object Object],StringmsgBody = "...“;,[object Object],try {,[object Object],Messagemsg = new MimeMessage(session);,[object Object],msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));,[object Object],msg.addRecipient(Message.RecipientType.TO,                             new InternetAddress("user@example.com", "Mr. User"));,[object Object],msg.setSubject("Your Example.com account has beenactivated");,[object Object],msg.setText(msgBody);,[object Object],Transport.send(msg);,[object Object],} catch (AddressException e) {,[object Object],   // ...,[object Object],} catch (MessagingException e) {,[object Object],   // ...,[object Object],},[object Object]
Recibiendo un Mensaje,[object Object],Los pasos a seguir son:,[object Object],Configurar tu aplicación para ser receptora de email en la dirección: string@appid.appspotmail.com,[object Object],Modificando el fichero appengine-web.xml: ,[object Object],<inbound-services>,[object Object],   <service>mail</service>,[object Object],</inbound-services>,[object Object],Modificando el fichero web.xml, que recibirá mensajes en la siguiente dirección: /_ah/mail/<address>,[object Object],<servlet>,[object Object],<servlet-name>mailhandler</servlet-name>,[object Object],    <servlet-class>MailHandlerServlet</servlet-class>,[object Object],  </servlet>,[object Object],<servlet-mapping>,[object Object],    <servlet-name>mailhandler</servlet-name>,[object Object],    <url-pattern>/_ah/mail/*</url-pattern>,[object Object],  </servlet-mapping>,[object Object],  <security-constraint>,[object Object],    <web-resource-collection>,[object Object],      <url-pattern>/_ah/mail/*</url-pattern>,[object Object],    </web-resource-collection>,[object Object],    <auth-constraint>,[object Object],      <role-name>admin</role-name>,[object Object],    </auth-constraint>,[object Object],  </security-constraint>,[object Object]
Recibiendo un Mensaje,[object Object],Los pasos a seguir son:,[object Object],Crear un servlet que reciba los mensajes,[object Object],importjava.io.IOException;,[object Object],importjava.util.Properties; ,[object Object],importjavax.mail.Session; ,[object Object],importjavax.mail.internet.MimeMessage; ,[object Object],importjavax.servlet.http.*; ,[object Object],publicclassMailHandlerServletextendsHttpServlet{,[object Object],publicvoiddoPost(HttpServletRequestreq,  HttpServletResponseresp) throwsIOException { ,[object Object],Propertiesprops = new Properties(); ,[object Object],Sessionsession = Session.getDefaultInstance(props, null);,[object Object],MimeMessagemessage = new MimeMessage(session, req.getInputStream());,[object Object],      …,[object Object],},[object Object]
TaskQueue API,[object Object],Una aplicación Java puede crear una cola configurada en el fichero de configuración WEB-INF/queue.xml ,[object Object],Para encolar una tarea, hay que obtener una instancia de Queue usando una QueueFactory y luego invocar el método add(),[object Object],Puedes obtener una cola por nombre declarada en el fichero queue.xml o la cola por defecto con el método getDefaultQueue(),[object Object],Se puede añadir una tarea a la cola pasando una instancia de TaskOptions al método add(),[object Object],Se invocará un servlet que será quien ejecute la tarea encolada (ver ejemplo siguiente trasparencia),[object Object],Espacio de nombres en versión beta: com.google.appengine.api.labs.taskqueue,[object Object]
Ejemplo de TaskQueue API,[object Object],El siguiente ejemplo muestra cómo añadir una tarea a una cola:,[object Object],importcom.google.appengine.api.labs.taskqueue.Queue;,[object Object],importcom.google.appengine.api.labs.taskqueue.QueueFactory;,[object Object],importstaticcom.google.appengine.api.labs.taskqueue.TaskOptions.Builder.*;,[object Object],// ...,[object Object],Queuequeue = QueueFactory.getDefaultQueue();,[object Object],queue.add(url("/worker").param("key", key));,[object Object]
Ejemplo de TaskQueue API,[object Object],Ejemplo de queue.xml, donde s indica segundos, m minutos, h horas y d días, es decir, la frecuencia con la que las tareas encoladas serían procesadas:,[object Object],<queue-entries>  <queue>    <name>default</name>    <rate>1/s</rate>  </queue>  <queue>    <name>mail-queue</name>    <rate>2000/d</rate>    <bucket-size>10</bucket-size>  </queue>  <queue>    <name>background-processing</name>    <rate>5/s</rate>  </queue></queue-entries>,[object Object]
Combinando Struts2 y GAE,[object Object],Revisar ejemplo: struts2tutorial,[object Object],Modificaciones a realizar en la distribución de struts2tutorial:,[object Object],Reimplementar la clase freemarker.core.TextBlock,[object Object],Inicializar a null el SecurityManager de OgnlRuntime,[object Object],Explicación de cómo hacerlo en: ,[object Object],http://whyjava.wordpress.com/2009/08/30/creating-struts2-application-on-google-app-engine-gae/,[object Object]
Pluginfor Eclipse for Java,[object Object],Instrucciones en: http://code.google.com/eclipse/docs/download.html,[object Object],Descarga Eclipse Galileo for Java Developers de: http://www.eclipse.org/downloads/,[object Object]
Importación y Exportación de Datos,[object Object],Se pueden acceder a datos detrás de tu Intranet desde una aplicación de Google AppEngine, con Google Secure Data Connector y el servicio urlfetch (com.google.appengine.api.urlfetch.*),[object Object],http://code.google.com/intl/en/securedataconnector/docs/1.3/tutorials/appengine.html,[object Object],Se pueden importar y exportar datos del datastore en forma de ficheros CSV,[object Object],Solamente disponible en Python de momento:,[object Object],http://code.google.com/appengine/docs/python/tools/uploadingdata.html,[object Object]
Google AppEnginefor Business,[object Object],Las aplicaciones generadas con AppEnginefor Business usan las APIs de Java y Python, pero permiten acceder al desarrollador a capacidades especiales (premium):,[object Object],Acceso a SSL y SQL,[object Object],Tendrán un coste adicional,[object Object],Mas información en: http://code.google.com/appengine/business/,[object Object]
Limitaciones Google AppEngine,[object Object],El servicio tiene varias limitaciones:,[object Object],Solo hasta recientemente no todo el mundo podía acceder a él,[object Object],Es gratis durante el periodo de pruebas, pero con límites de uso: 500 MB de almacenamiento, 200 millones de megaciclos/día y 10 Gb de ancho de banda,[object Object],Google cobra para webs que requieren alta escalabilidad,[object Object],Existen escasas aplicaciones comerciales desarrolladas en esta plataforma,[object Object],Repositorio de ejemplos: http://appgallery.appspot.com/,[object Object],VOSAO CMS - http://www.vosao.org/,[object Object],Limitaciones técnicas originales parcialmente resueltas:,[object Object],Los desarrolladores solamente tienen acceso de lectura al sistema de ficheros de AppEngine,[object Object],Solamente se puede ejecutar código a partir de una petición HTTP,[object Object],Solamente se puede subir código puramente Python (resuelto con soporte Java),[object Object],No se puede descargar o ejecutar scripts en su base de datos (remote_api),[object Object],Las aplicaciones deben ser escritas en Python o Java,[object Object],Guido van Rosum, creador de Python está detrás de Google AppEngine,[object Object]

More Related Content

What's hot

03 cómo el código abierto nos impide caer cautivos de nuestros proveedores de...
03 cómo el código abierto nos impide caer cautivos de nuestros proveedores de...03 cómo el código abierto nos impide caer cautivos de nuestros proveedores de...
03 cómo el código abierto nos impide caer cautivos de nuestros proveedores de...Neurowork
 
Database as a service con Oracle Cloud platform
Database as a service con Oracle Cloud platformDatabase as a service con Oracle Cloud platform
Database as a service con Oracle Cloud platformErick Vidal Bazini
 
Administracion y Despliegue a traves PowerShell Azure
Administracion y Despliegue a traves PowerShell Azure Administracion y Despliegue a traves PowerShell Azure
Administracion y Despliegue a traves PowerShell Azure Ivan Martinez
 
Conferencia integracion servicios azure empresarial
Conferencia integracion servicios azure empresarialConferencia integracion servicios azure empresarial
Conferencia integracion servicios azure empresarialIvan Martinez
 
Presentacion arquitectura de_la_nube_-_sistemas_de_informacion_financiera_-_g...
Presentacion arquitectura de_la_nube_-_sistemas_de_informacion_financiera_-_g...Presentacion arquitectura de_la_nube_-_sistemas_de_informacion_financiera_-_g...
Presentacion arquitectura de_la_nube_-_sistemas_de_informacion_financiera_-_g...Grissel Espinal
 
Arquitectura de la nube modelos de servicios y despliegue
Arquitectura de la nube modelos de servicios y despliegueArquitectura de la nube modelos de servicios y despliegue
Arquitectura de la nube modelos de servicios y despliegueNombre Apellidos
 
Computacion en la nube
Computacion en la nubeComputacion en la nube
Computacion en la nubeyamyenriquez30
 
Ejemplo de articulo cloud computing
Ejemplo de articulo cloud computingEjemplo de articulo cloud computing
Ejemplo de articulo cloud computingEvelynCor
 
Arquitectura en la nube
Arquitectura en la nubeArquitectura en la nube
Arquitectura en la nubeHugo Ardon
 
Arquitectura de la nube
Arquitectura de la nubeArquitectura de la nube
Arquitectura de la nubeNinfaFlores7
 
AWS Webinar Series Latinoamérica: Cómo salir de su datacenter y modernizar la...
AWS Webinar Series Latinoamérica: Cómo salir de su datacenter y modernizar la...AWS Webinar Series Latinoamérica: Cómo salir de su datacenter y modernizar la...
AWS Webinar Series Latinoamérica: Cómo salir de su datacenter y modernizar la...Amazon Web Services LATAM
 
Windows azure: Introducción a la Nube y HoL de Azure MICTT
Windows azure: Introducción a la Nube y HoL de Azure MICTTWindows azure: Introducción a la Nube y HoL de Azure MICTT
Windows azure: Introducción a la Nube y HoL de Azure MICTTMICTT Palma
 

What's hot (18)

03 cómo el código abierto nos impide caer cautivos de nuestros proveedores de...
03 cómo el código abierto nos impide caer cautivos de nuestros proveedores de...03 cómo el código abierto nos impide caer cautivos de nuestros proveedores de...
03 cómo el código abierto nos impide caer cautivos de nuestros proveedores de...
 
Database as a service con Oracle Cloud platform
Database as a service con Oracle Cloud platformDatabase as a service con Oracle Cloud platform
Database as a service con Oracle Cloud platform
 
Administracion y Despliegue a traves PowerShell Azure
Administracion y Despliegue a traves PowerShell Azure Administracion y Despliegue a traves PowerShell Azure
Administracion y Despliegue a traves PowerShell Azure
 
Conferencia integracion servicios azure empresarial
Conferencia integracion servicios azure empresarialConferencia integracion servicios azure empresarial
Conferencia integracion servicios azure empresarial
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
Presentacion arquitectura de_la_nube_-_sistemas_de_informacion_financiera_-_g...
Presentacion arquitectura de_la_nube_-_sistemas_de_informacion_financiera_-_g...Presentacion arquitectura de_la_nube_-_sistemas_de_informacion_financiera_-_g...
Presentacion arquitectura de_la_nube_-_sistemas_de_informacion_financiera_-_g...
 
Arquitectura de la nube modelos de servicios y despliegue
Arquitectura de la nube modelos de servicios y despliegueArquitectura de la nube modelos de servicios y despliegue
Arquitectura de la nube modelos de servicios y despliegue
 
Computacion en la nube
Computacion en la nubeComputacion en la nube
Computacion en la nube
 
Amazon S3 and EBS
Amazon S3 and EBSAmazon S3 and EBS
Amazon S3 and EBS
 
Ejemplo de articulo cloud computing
Ejemplo de articulo cloud computingEjemplo de articulo cloud computing
Ejemplo de articulo cloud computing
 
Arquitectura en la nube
Arquitectura en la nubeArquitectura en la nube
Arquitectura en la nube
 
Microsoft Azure
Microsoft AzureMicrosoft Azure
Microsoft Azure
 
tipos de nubes de redes en ofimática
tipos de nubes de redes en ofimática tipos de nubes de redes en ofimática
tipos de nubes de redes en ofimática
 
Arquitectura de la nube
Arquitectura de la nubeArquitectura de la nube
Arquitectura de la nube
 
Flisol amazon-ec2
Flisol amazon-ec2Flisol amazon-ec2
Flisol amazon-ec2
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
AWS Webinar Series Latinoamérica: Cómo salir de su datacenter y modernizar la...
AWS Webinar Series Latinoamérica: Cómo salir de su datacenter y modernizar la...AWS Webinar Series Latinoamérica: Cómo salir de su datacenter y modernizar la...
AWS Webinar Series Latinoamérica: Cómo salir de su datacenter y modernizar la...
 
Windows azure: Introducción a la Nube y HoL de Azure MICTT
Windows azure: Introducción a la Nube y HoL de Azure MICTTWindows azure: Introducción a la Nube y HoL de Azure MICTT
Windows azure: Introducción a la Nube y HoL de Azure MICTT
 

Viewers also liked

Ohl Concesiones2009anexos Oficial Ing
Ohl Concesiones2009anexos Oficial IngOhl Concesiones2009anexos Oficial Ing
Ohl Concesiones2009anexos Oficial IngArteris S.A.
 
Wicsa2011 cloud tutorial
Wicsa2011 cloud tutorialWicsa2011 cloud tutorial
Wicsa2011 cloud tutorialAnna Liu
 
AWS Cloud School | London - Part 1
AWS Cloud School | London - Part 1AWS Cloud School | London - Part 1
AWS Cloud School | London - Part 1Amazon Web Services
 
El Cloud Computing & Amazon Web Services
El Cloud Computing & Amazon Web ServicesEl Cloud Computing & Amazon Web Services
El Cloud Computing & Amazon Web Servicescloudimpulsion
 

Viewers also liked (6)

Ohl Concesiones2009anexos Oficial Ing
Ohl Concesiones2009anexos Oficial IngOhl Concesiones2009anexos Oficial Ing
Ohl Concesiones2009anexos Oficial Ing
 
Por.Apimec 2 T07
Por.Apimec 2 T07Por.Apimec 2 T07
Por.Apimec 2 T07
 
Wicsa2011 cloud tutorial
Wicsa2011 cloud tutorialWicsa2011 cloud tutorial
Wicsa2011 cloud tutorial
 
Introduction to AWS tools
Introduction to AWS toolsIntroduction to AWS tools
Introduction to AWS tools
 
AWS Cloud School | London - Part 1
AWS Cloud School | London - Part 1AWS Cloud School | London - Part 1
AWS Cloud School | London - Part 1
 
El Cloud Computing & Amazon Web Services
El Cloud Computing & Amazon Web ServicesEl Cloud Computing & Amazon Web Services
El Cloud Computing & Amazon Web Services
 

Similar to To Cloud or not To Cloud, That is the question!

Redes y seguridad en AWS - CongresoSSI
Redes y seguridad en AWS - CongresoSSIRedes y seguridad en AWS - CongresoSSI
Redes y seguridad en AWS - CongresoSSIKatherine Cancelado
 
Cloud Hosting: la nueva generación del hosting
Cloud Hosting: la nueva generación del hostingCloud Hosting: la nueva generación del hosting
Cloud Hosting: la nueva generación del hostingArsys
 
Virtualizacion - Virtualizacion_Cloud.pdf
Virtualizacion - Virtualizacion_Cloud.pdfVirtualizacion - Virtualizacion_Cloud.pdf
Virtualizacion - Virtualizacion_Cloud.pdfssuserbd237f
 
Los beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWSLos beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWSAmazon Web Services LATAM
 
Cloud computing
Cloud computingCloud computing
Cloud computingLiz Gomez
 
Cloudcomputingisummit
CloudcomputingisummitCloudcomputingisummit
CloudcomputingisummitUlises Diaz
 
Cloudcomputingisummit
CloudcomputingisummitCloudcomputingisummit
CloudcomputingisummitUlises Diaz
 
Cloudcomputingisummit
CloudcomputingisummitCloudcomputingisummit
CloudcomputingisummitUlises Diaz
 
Cloud computing
Cloud computingCloud computing
Cloud computingcarcass316
 

Similar to To Cloud or not To Cloud, That is the question! (20)

Bases de Datos No Relacionales (NoSQL)
Bases de Datos No Relacionales (NoSQL) Bases de Datos No Relacionales (NoSQL)
Bases de Datos No Relacionales (NoSQL)
 
Cloud Computing Amazon
Cloud Computing AmazonCloud Computing Amazon
Cloud Computing Amazon
 
Cloud Computing (Open Source)
Cloud Computing (Open Source)Cloud Computing (Open Source)
Cloud Computing (Open Source)
 
Cloud Computing: una perspectiva tecnológica
Cloud Computing: una perspectiva tecnológicaCloud Computing: una perspectiva tecnológica
Cloud Computing: una perspectiva tecnológica
 
2. Amazon Web Services
2.  Amazon Web Services2.  Amazon Web Services
2. Amazon Web Services
 
Sobrevolando AWS
Sobrevolando AWSSobrevolando AWS
Sobrevolando AWS
 
Servidores web: cloud
Servidores web: cloudServidores web: cloud
Servidores web: cloud
 
Redes y seguridad en AWS - CongresoSSI
Redes y seguridad en AWS - CongresoSSIRedes y seguridad en AWS - CongresoSSI
Redes y seguridad en AWS - CongresoSSI
 
Cloud Hosting: la nueva generación del hosting
Cloud Hosting: la nueva generación del hostingCloud Hosting: la nueva generación del hosting
Cloud Hosting: la nueva generación del hosting
 
Virtualizacion - Virtualizacion_Cloud.pdf
Virtualizacion - Virtualizacion_Cloud.pdfVirtualizacion - Virtualizacion_Cloud.pdf
Virtualizacion - Virtualizacion_Cloud.pdf
 
CLASE 2 ORACLE CLOUD
CLASE 2 ORACLE CLOUDCLASE 2 ORACLE CLOUD
CLASE 2 ORACLE CLOUD
 
Los beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWSLos beneficios de migrar sus cargas de trabajo de big data a AWS
Los beneficios de migrar sus cargas de trabajo de big data a AWS
 
Data Center as a Service
Data Center as a ServiceData Center as a Service
Data Center as a Service
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
Cloudcomputingisummit
CloudcomputingisummitCloudcomputingisummit
Cloudcomputingisummit
 
Cloudcomputingisummit
CloudcomputingisummitCloudcomputingisummit
Cloudcomputingisummit
 
Cloudcomputingisummit
CloudcomputingisummitCloudcomputingisummit
Cloudcomputingisummit
 
Proyectos de nubes de computación
Proyectos de nubes de computaciónProyectos de nubes de computación
Proyectos de nubes de computación
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
Semana 7 Instalación servicios OCI
Semana 7   Instalación servicios OCISemana 7   Instalación servicios OCI
Semana 7 Instalación servicios OCI
 

More from Diego López-de-Ipiña González-de-Artaza

Humanized Computing: the path towards higher collaboration and reciprocal lea...
Humanized Computing: the path towards higher collaboration and reciprocal lea...Humanized Computing: the path towards higher collaboration and reciprocal lea...
Humanized Computing: the path towards higher collaboration and reciprocal lea...Diego López-de-Ipiña González-de-Artaza
 
Ontological Infrastructure for Interoperable Research Information Systems: HE...
Ontological Infrastructure for Interoperable Research Information Systems: HE...Ontological Infrastructure for Interoperable Research Information Systems: HE...
Ontological Infrastructure for Interoperable Research Information Systems: HE...Diego López-de-Ipiña González-de-Artaza
 
Fostering multi-stakeholder collaboration through co-production and rewarding
Fostering multi-stakeholder collaboration through co-production and rewarding Fostering multi-stakeholder collaboration through co-production and rewarding
Fostering multi-stakeholder collaboration through co-production and rewarding Diego López-de-Ipiña González-de-Artaza
 
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...Diego López-de-Ipiña González-de-Artaza
 
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...Diego López-de-Ipiña González-de-Artaza
 
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...Diego López-de-Ipiña González-de-Artaza
 
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...Diego López-de-Ipiña González-de-Artaza
 
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...Diego López-de-Ipiña González-de-Artaza
 
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios EstándarROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios EstándarDiego López-de-Ipiña González-de-Artaza
 

More from Diego López-de-Ipiña González-de-Artaza (20)

Humanized Computing: the path towards higher collaboration and reciprocal lea...
Humanized Computing: the path towards higher collaboration and reciprocal lea...Humanized Computing: the path towards higher collaboration and reciprocal lea...
Humanized Computing: the path towards higher collaboration and reciprocal lea...
 
Generative AI How It's Changing Our World and What It Means for You_final.pdf
Generative AI How It's Changing Our World and What It Means for You_final.pdfGenerative AI How It's Changing Our World and What It Means for You_final.pdf
Generative AI How It's Changing Our World and What It Means for You_final.pdf
 
Democratizing Co-Production Of Sustainable Public Services
Democratizing Co-Production Of Sustainable Public Services Democratizing Co-Production Of Sustainable Public Services
Democratizing Co-Production Of Sustainable Public Services
 
Ontological Infrastructure for Interoperable Research Information Systems: HE...
Ontological Infrastructure for Interoperable Research Information Systems: HE...Ontological Infrastructure for Interoperable Research Information Systems: HE...
Ontological Infrastructure for Interoperable Research Information Systems: HE...
 
Fostering multi-stakeholder collaboration through co-production and rewarding
Fostering multi-stakeholder collaboration through co-production and rewarding Fostering multi-stakeholder collaboration through co-production and rewarding
Fostering multi-stakeholder collaboration through co-production and rewarding
 
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
A Collaborative Environment to Boost Sustainable Engaged Research & Co-Produc...
 
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
A Collaborative Environment to Boost Co-Production of Sustainable Public Serv...
 
PrácticaParticipación-INTERLINK-realizingcoproduction_final.pdf
PrácticaParticipación-INTERLINK-realizingcoproduction_final.pdfPrácticaParticipación-INTERLINK-realizingcoproduction_final.pdf
PrácticaParticipación-INTERLINK-realizingcoproduction_final.pdf
 
INTERLINK: Engaged Research through co-production
INTERLINK: Engaged Research through co-production INTERLINK: Engaged Research through co-production
INTERLINK: Engaged Research through co-production
 
Internet of People: towards a Human-centric computing for Social Good
Internet of People: towards a Human-centric computing for Social GoodInternet of People: towards a Human-centric computing for Social Good
Internet of People: towards a Human-centric computing for Social Good
 
Boosting data-driven innovation in Europe with the support of DIHs
Boosting data-driven innovation in Europe with the support of DIHs Boosting data-driven innovation in Europe with the support of DIHs
Boosting data-driven innovation in Europe with the support of DIHs
 
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
Social Coin: Blockchain-mediated incentivization of citizens for sustainable ...
 
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
Human-centric Collaborative Services : IoT, Broad Data, Crowdsourcing, Engage...
 
Role of Data Incubators shaping European Data Spaces: EDI & REACH cases
Role of Data Incubators shaping European Data Spaces: EDI & REACH casesRole of Data Incubators shaping European Data Spaces: EDI & REACH cases
Role of Data Incubators shaping European Data Spaces: EDI & REACH cases
 
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
Transiting to SMART COMMUNITIES by fostering Collaboration & CO-CREATION for ...
 
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios EstándarROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
ROH: Proceso de Ingeniería Ontológica & Uso y Extensión de Vocabularios Estándar
 
Introduction to FAIR Data and Research Objects
Introduction to FAIR Data and Research ObjectsIntroduction to FAIR Data and Research Objects
Introduction to FAIR Data and Research Objects
 
Introducción a Linked Open Data (espacios enlazados y enlazables)
Introducción a Linked Open Data (espacios enlazados y enlazables)Introducción a Linked Open Data (espacios enlazados y enlazables)
Introducción a Linked Open Data (espacios enlazados y enlazables)
 
Red Ontologías Hércules – ROH
Red Ontologías Hércules – ROHRed Ontologías Hércules – ROH
Red Ontologías Hércules – ROH
 
Internet de las cosas y datos de ciencia ciudadana para uso público
Internet de las cosas y datos de ciencia ciudadana para uso públicoInternet de las cosas y datos de ciencia ciudadana para uso público
Internet de las cosas y datos de ciencia ciudadana para uso público
 

Recently uploaded

Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...RaymondCode
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfJoseAlejandroPerezBa
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfalejandrogomezescoto
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosLCristinaForchue
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfymiranda2
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxPaolaCarolinaCarvaja
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfodalistar77
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx Emialexsolar
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidaddanik1023m
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfOBr.global
 
Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025Festibity
 

Recently uploaded (14)

Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
 
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier FolchBEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docx
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdf
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx E
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidad
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
 
Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025Hazte partner: Club Festibity 2024 - 2025
Hazte partner: Club Festibity 2024 - 2025
 
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura SilvaBEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
 

To Cloud or not To Cloud, That is the question!

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96. Deriva de un protocolo creado por David Winer en 1998, llamado XML-RPC.
  • 97. Fue creado por Microsoft, IBM, y otros y actualmente se encuentra bajo el auspicio de la W3C.
  • 98. Su arquitectura consiste en varias capas de especificaciones para formato de mensajes:
  • 100. Protocolos de transporte (SMTP y HTTP/S)
  • 101. Modelos de procesado de mensajes
  • 103.
  • 104. Introducido en la tésis doctoral de Roy Fielding en el año 2000.
  • 105. Se refiere a una colección de principios de arquitectura de red, que marcan cómo definir e invocar los recursos.
  • 106. El término se usa a veces para describir una simple interfaz que transmite datos de un dominio específico por HTTP sin capas adicionales como SOAP o uso de cookies.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122. Página de presupuestado y facturación de recursos: http://code.google.com/intl/es/appengine/docs/billing.html
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 185.
  • 186.
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.

Editor's Notes

  1. Message:The future consists of services (the boxes on the ring) and users of services (the others).All interaction is free without central controlStandards are needed for the interactionsIs there a need for a platform / infrastructure to coordinate interactions?SAP Services mantra: Services will become tradable, composed from services of different providers, be offered, delivered &amp; executed automatically &amp; supported by ITThe Internet of Services will offercustomized &amp; personalized servicescommunity involvement to improve services, both for providers &amp; consumers of services seamless &amp; smooth adaptation and integration of services into the user environment These network infrastructures need to support an Internet of dynamically combined services with worldwide service delivery platforms and flexibly enable the creation of opportunities for new market entrant. The &apos;third party generated service&apos; is emerging as a trend supporting the move towards user-centric services, as shown by the advances in Service-Oriented-Architectures and in service front-ends as the interface to users and communities. Virtualisation of resources remains an important research driver enabling the delivery of networked services independently from the underlying platform, an important issue for service providers. Advances in these domains also require breakthroughs in software engineering methods and architectures addressing complexity in distributed, heterogeneous and dynamically composed environments, as well as non-functional requirements.