Verrouillage avec S3
Quelle est la méthode recommandée pour mettre en œuvre un simple mécanisme de verrouillage pour être utilisé en conjonction avec le S3?
Exemple de ce que je veux faire:
- acquérir verrouillage par id d'objet
- objet lire à partir de S3
- modifier les données
- écrire objet S3
- verrouillage
Idéalement à la recherche d'un nuage en fonction du mécanisme de verrouillage. Je pourrais utiliser memcached localement, mais ensuite, je dois traiter avec mise à l'échelle. Je ne vois pas d'une manière évidente à mettre en œuvre léger verrouillage avec n'importe quel Api AWS, mais il semble comme un problème commun.
Je me demande si vous pourriez utiliser SimpleDB pour faire atomique acquérir le fonctionnement de la serrure. Quelqu'un a essayé?
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai passé un peu de temps ce matin de jouer avec boto et je pense que j'ai une solution qui fonctionne à l'aide SimpleDB. Vous aurez besoin de la dernière boto libération de sorte que la condition de vente et des lectures cohérentes sont pris en charge.
Exemple de code ici: http://pastebin.com/3XzhPqfY
S'il vous plaît poster des commentaires/suggestions. Je crois que ce code devrait être assez fort -- mon test dans main() essaie avec 10 fils.
Une chose que je n'ai pas la réponse, c'est que S3 lit ne sont pas compatibles (à droite?), donc, en théorie, un thread peut être en fonctionnement sur une ancienne copie de la S3 valeur. On dirait qu'il ya peut-être une solution pour que, comme décrit ici:
http://www.shlomoswidler.com/2009/12/read-after-write-consistency-in-amazon.html
je ne pense pas que vous pouvez faire cela en utilisant S3 uniquement, à l'aide de simpleDB la cohérence des améliorations que james a dit, est une bonne façon qui fonctionne
vous pouvez chercher des exemples ici : Amazon SimpleDB La Cohérence Des Améliorations
une autre approche pourrait être de l'amende est à l'aide de la fonctionnalité de gestion des versions de S3
donc, fondamentalement, de stocker un objet id/id de version de la paire en simpleDB comme le plus "valide" version
s'assurer que toutes les requêtes GET permettra de récupérer cette version
après avoir réussi à METTRE une modification de l'objet, mise à jour le numéro de version dans la DB
de cette façon, vous pouvez également utiliser la capacité de récupérer les versions précédentes d'un objet pour la restauration si nécessaire.