RecentChanges
|
FindPage
|
LikePages
|
BackLinks
View Source:
TmeS3
Note:
This page has been locked and cannot be edited.
!!! TME AWS : Amazon Web Services Objectif: comprendre les services de gestion de données: SQS, SimpleDB, et S3 !! Préparation * Vérifiez votre quota de stokage: il vous faut au moins 30 MO. * télécharger l'archive [aws-java-sdk-1.6.9_ETU.tgz | http://www-bd.lip6.fr/ens/abdr2013/extra/aws/aws-java-sdk-1.6.9_ETU.tgz] ** Comprendre l'exemple se trouvant dans : aws-java-sdk-1.6.9/samples/~AmazonSimpleQueueService ** Lire l'[API java|http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/overview-summary.html] de tous les services d'AWS (ou localement dans votre dossier aws-java-sdk-1.3.25/documentation/javadoc/index.html) * Configurer l'environnement linux: ** Aller dans le répertoire aws-java-sdk-1.6.9, puis saisir: ** source config-java-classpath-2013 ** dans Eclipse: aller dans les propriétés du projet, puis ''java build path'', puis ''add external jar''. Ajouter tous les jars se trouvant dans tous les sous-dossiers de third-party ainsi que tous les jars se trouvant dans le dossier lib. * configurer l'accès pour se connecter à AWS en passant par le proxy de l'UFR. ** host="proxy" et port=3128 ** voir l'exemple [[http://www-bd.lip6.fr/ens/abdr2012/extra/aws/S3Sample.java| S3Sample.java]] avec le proxy correctement configuré (lignes 26 puis 63 à 67) * Ne pas choisir de région : commenter la ligne setRegion !!!En 2013-2014, commencez par l'exercice 2 !!Exercice 1 : Cohérence des données avec SimpleDB * Lire l'exemple SimpleDBSample.java dans le dossier samples/AmazonSimpleDB. Le domaine utilisé est D11. Les droits dont vous disposez vous permettent de manipuler des objects (i.e., créer, modifier et supprimer un item). Par contre, vous n'avez pas les droits pour créer, lister ou supprimer un domaine. * Lire la [[http://aws.amazon.com/articles/1231 | syntaxe des requêtes]] ''SELECT FROM WHERE''. Voir en particulier la fonction __itemName()__ qui peut être utilisée dans une clause ''WHERE''. * Pour lire __un seul__ item, il est possible d'invoquer la méthode getAttributes(~GetAttributesRequest), sans poser de requête ''SELECT''. ** Lire la notice d'utilisation des lectures et écritures cohérentes : [SimpleDB Consistency Enhancements|http://aws.amazon.com/articles/3572] * Mettre en évidence des situations d'accès incohérent aux données, suivantes : ** On considère l'objet nommé NNN contenant les attributs (produit=1, quantite=0). Chaque étudiant choisit un nom NNN d'item différent. ** On considère l'opération Ajout qui consiste à ajouter 1 à la quantité de l'objet NNN. La séquence est : *** lire l'attribut ''quantite'' de l'objet nommé NNN. *** modifier la quantité de l'objet en remplaçant la quantité par la nouvelle valeur. ! 2.1) Lecture d'un état obsolète de la donnée. * Initialement, créer l'objet NNN avec les attribut (produit=1, quantite=0) * Ecrire un programme P1 qui effectue 10 opérations AJOUT successives (boucle for). Quelle est la quantité finale ? * Modifier P1 pour obtenir le programme P2 telle que la quantité finale soit correcte. Voir la méthode setConsistentRead. ! 2.2) Perte d'écriture lorsque 2 utilisateurs modifient la même donnée en même temps. * Initialement, l'objet NNN vaut (produit=1, quantite=0). Rmq: l'item est initialisé avant d'exécuter P2. P2 effectue seulement les 10 ajouts successifs. * Ouvrir 2 terminaux pour exécuter simultanément le programme P2. Quelle est la quantité obtenue ? * Modifier P2 pour obtenir P3 telle que la quantité finale soit bien la somme de tous les ajouts simultanés. ** Voir les classes ~PutAttributesRequest et ~UpdateCondition. ** Quelle condition garantit que la quantité peut être modifiée correctement? ** Préciser la stratégie adoptée lorsque cette condition n'est pas vérifiée. * Proposer une autre solution P4 qui consiste à obtenir un verrou sur l'item avant de lire et modifier la quantité du produit. ** Représenter le verrou par un attribut nommé ''lock'' valant 0 (libre) ou 1 (occupé). ** Peut-on relâcher le verrou en même temps qu'on écrit la nouvelle quantité ? ! 2.3) Compromis performance/cohérence * Chronométrer la durée moyenne pour effectuer une opération AJOUT. * Comparer la durée d'une lecture avec cohérence avec une lecture sans cohérence. Que concluez vous ? * Mesurer le temps de réponse obtenu avec P3, puis avec 2 P3 simultanés, puis avec 3 P3 et ainsi de suite. Que concluez vous ? !!!Exercice 2 : Le service de files d'attentes : SQS Lire et comprendre l'exemple F1.java dans samples/~AmazonSimpleQueueService Choisir un suffixe ETU (vos initiales) pour identifier vos files d'attente de manière unique. Créer une file nommée T_ETU et contenant les transactions à traiter. Créer une file nommée R_ETU et contenant la réponse d'une transaction traitée. Utiliser les 2 files entre l'application (A) et un gestionnaire de transactions (G). L'application A ajoute une demande dans la file T_ETU et attend une réponse qui arrivera dans la file R_ETU. Le gestionnaire G lit une demande dans la file T_ETU, traite la demande puis envoie une réponse dans la file R_ETU. Si nécessaire, modifier le délai d'attente pendant lequel une instruction de lecture attend que la file se remplisse (voir la méthode withWaitTimeSeconds). On suppose que les données sont réparties dans N stores. Proposer une solution pour répartir les demandes des applications dans N files. Voir la documentation [API de SQS| http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/index.html?com/amazonaws/services/sqs/model/package-summary.html] !!Exercice 3 (facultatif) * Proposer des éléments de solution pour stocker dans S3 les données suivantes : ** une relation quelconque (l'équivalent d'une table SQL) ** un réseau d'amis ** un flux de données RSS * Illustrer l'utilisation de S3 pour gérer le stock des produits d'un magasin : ** Magasin(magasinID, produitID, quantité) !!Exercice 4 : Comparaison S3 / SimpleDB Comparer le niveau de cohérence proposé par S3 avec ceux proposés par le SimpleDB. !!Documentation * Documentation de [SQS | http://aws.amazon.com/fr/sqs/] * [Prise en main de SimpleDB |http://docs.amazonwebservices.com/AmazonSimpleDB/latest/GettingStartedGuide/Welcome.html] * [Référence rapide |http://awsdocs.s3.amazonaws.com/SDB/latest/sdb-qrc.pdf] pour SimpleDB. * Le [[http://docs.amazonwebservices.com/AmazonS3/latest/dev/| guide de développement]] pour S3, en anglais * les [[http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?Introduction.html#CoreConcepts | concepts principaux]] de S3 * Lecture/modification conditionnelle de données : [SimpleDB Consistency Enhancements|http://aws.amazon.com/articles/3572] * Lire l'[API java|http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/overview-summary.html] de tous les services AWS. * AWS kit pour java [[http://aws.amazon.com/sdkforjava | AWS pour java]] ---- retour vers l'[Accueil], LesTme