Gelyktydigheid in Amazon S3

Ek is tans besig om 'n stelsel te bou waar S3 as 'n aanhoudende hash-stel (die S3-URL word uit die data afgelei) gebruik word deur baie rekenaars op die internet . As twee nodusse dieselfde data stoor, sal dit met dieselfde sleutel gestoor word en dit sal dus nie twee keer gestoor word nie. As 'n voorwerp verwyder word, moet ek weet of 'n ander node (s) ook daardie data gebruik. In daardie geval sal ek dit nie verwyder nie.

Op die oomblik het ek dit geïmplementeer deur 'n lys van die stoorknope toe te voeg as deel van die data wat na S3 geskryf is. Wanneer 'n node die data stoor, gebeur dit dus:

  1. Lees die voorwerp uit S3.
  2. Deserialiseer die voorwerp.
  3. Voeg die id van die nuwe node in die lys met stoorknope.
  4. Serialiseer die nuwe voorwerp (die data om op te slaan en die nodelys).
  5. Skryf die seriële data na S3.

Dit skep 'n vorm van idempotente verwysingstelling. Aangesien versoeke oor die internet redelik onbetroubaar kan wees, wil ek nie net die aantal stoorknope tel nie. Daarom stoor ek 'n lys in plaas van 'n teller (as 'n node dieselfde versoek> 1 keer stuur).

Hierdie benadering werk solank twee nodusse nie gelyktydig skryf nie. S3 bied (sover ek weet) geen manier om die voorwerp te sluit sodat al hierdie 5 stappe atoom word nie.

Hoe sou u hierdie probleem met gelyktydigheid oplos? Ek oorweeg dit om een ​​of ander vorm van optimistiese gelyktydigheid toe te pas. Hoe moet ek dit vir S3 doen? Moet ek miskien 'n heel ander benadering gebruik?

10
задан Yrlec 10 June 2011 в 11:01
поделиться