When the object is not immediately found, it's an occurrence of observed eventual consistency. In a strongly consistent model, that will never happen (by contract). The author generalized the experiment across creating, updating, and deleting objects, followed by either reading or listing objects.
Operations on eventually consistent systems can behave in an outwardly similar way to strongly consistent systems in the average or happy case: when they manage to reach consistency faster than your application can follow up with its next request. The consistency model tells you whether this is guaranteed.
A number of eventually consistent systems do a pretty good job of providing apparent strong consistency in the typical case, such that eventual consistency only occurs when recovering from a hardware failure or network partition.
Ahh -- "observed instances of eventual consistency" as in "able to observe poorer than strong consistency". I was imagining it as able to eventually confirm _consistency_. However, was dumbfounded by the lack of information on delay before check.
I wonder if the experiment normalizes for the client origin. The farther the client is from the actual server, the more time it takes to do a round trip, and less chance for an observed instance of eventual consistency.
Yes, I was wondering about this too. I examined the source code in the GitHub repository and found that all the follow-up operations are immediate. No consideration of or measurement of latency.
> I wonder if the experiment normalizes for the client origin.
Unfortunately it does not. As you imply, a high round trip time, or just high latency of the storage operations in general, could easily affect the apparent consistency with the current experiment design.
In an enhanced version of this experiment I think it would be helpful to have latency measurements, such as total time from beginning of write until end of read (average and percentiles); and as you suggested round trip time measurements. Luckily the code is available, so I suppose it's on us to reproduce the results and extend them! Fortunately the code is also pretty short, since a lot of the storage system specific logic is encapsulated within the Apache JClouds library.
(To clarify, I don't question the accuracy of the results they are about what I'd expect. I'm mostly being pedantic in drilling into these concerns, and wondering what more information we might be able to extract from the experiment.)
However, as they say, reality is relative. If the tests they ran are "realistic" in the sense that most people use the systems in the same way they tested, then it's all good.
I suppose we need to agree on what's realistic / acceptable. I would say just minimize client-server RTT and that's a good setup, which they may have.
It is also possible that S3 somehow tries to pin requests from the same client to the same storage nodes. A better test setup would coordinate writing and reading across multiple clients, but is beyond the scope of this experiment. http://www.researchgate.net/publication/259541556_Eventual_C... describes such a system and their results.
Be careful about running experiments from "t"-class instance types. Due to their ability to "burst" and consume extra CPU, the amount of system resources available to them is not consistent. This poses an experiment design challenge of ensuring that available system resources do not vary. It may be easier to run reliable experiments from another type.
> Traditional Amazon EC2 instance types provide fixed performance, while T2 instances provide a baseline level of CPU performance with the ability to burst above that baseline level. They are intended for workloads that don't use the full CPU often or consistently, but occasionally need to burst.
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/t2-instan...
I am not sure if this will have meaningfully affected the accuracy of the results (probably not), but I thought I'd point it out for future reference.