2010-08-07 21 views
21

S3 ile birlikte kullanılmak üzere basit bir kilitleme mekanizması uygulamak için önerilen yol nedir?S3 ile kilitleme

yapmak istediğim şeyin

Örnek:

  • bırakma kilidi
  • S3 verileri
  • yazma nesneyi değiştirmek

    • acquire kilit nesne kimliği ile
    • okuma nesnesi S3'ten

      İdeal olarak bulut tabanlı bir kilitleme mekanizması arıyoruz. Yerel olarak memcached kullanabilirdim, ama sonra bunu ölçeklendirmek zorundayım. Herhangi bir AWS API'si ile hafif kilitleme uygulamak için açık bir yol görmüyorum, ancak ortak bir sorun gibi görünüyor.

      Basit bir atomik kilit işlemi yapmak için SimpleDB'yi kullanıp kullanamayacağınızı merak ediyorum. Bunu deneyen var mı?

  • cevap

    10

    Tamam, bu sabah boto ile oynayarak biraz zaman geçirdim ve sanırım SimpleDB kullanarak çalışan bir çözümüm var. Koşullu koyar ve tutarlı okumaların desteklenmesi için en yeni boto sürümüne ihtiyacınız vardır. Burada

    örnek kod: http://pastebin.com/3XzhPqfY

    yorum/öneri gönderin. Bu kodun oldukça güvenli olması gerektiğine inanıyorum - ana() 'deki testim 10 iş parçacığıyla dener.

    Ele almamış olduğum bir şey, S3 okumalarının tutarlı olmadığıdır (sağ?), Dolayısıyla teoride bir iş parçacığı S3 değerinin eski bir kopyası üzerinde çalışıyor olabilir. Burada açıklandığı gibi bunun için bir geçici çözüm olabilir gibi görünüyor:

    http://www.shlomoswidler.com/2009/12/read-after-write-consistency-in-amazon.html

    i james söylediği gibi

    çalışır iyi bir yol SimpleDB en tutarlılık geliştirmeleri kullanılarak, yalnızca S3 kullanarak yapabilirsiniz zannetmem
    +0

    SimpleDB şimdi kullanımdan kaldırılmış gibi görünüyor; AWS konsolundan düştü ve artık 'Hizmetler ve Çözümler' arasında listelenmiyor. DynamoDB kullanan bir uygulama var mı? :) – pjz

    2

    burada bazı örneklere bakabilirsiniz: Amazon SimpleDB Consistency Enhancements

    S3
    ait versioning feature böylece temelde kullandığı ince olabilecek başka bir yaklaşım, en "geçerli" Versi olarak SimpleDB bir nesne kimliği/versiyon kimliği çifti depolamak
    üzerinde ve tüm GET isteklerinin, değiştirilmiş bir nesnenin başarılı bir PUT'sinin ardından
    sürümünün geri alınacağından emin olun, DB

    sürüm kimliğini güncelleştirin, böylece geri yüklemek için bir nesnenin önceki sürümlerini alma özelliğini kullanabilirsiniz gerekirse.