feat: "hedging": issue two concurrent requests for HEAD and GET#6183
Open
feat: "hedging": issue two concurrent requests for HEAD and GET#6183
Conversation
We abandon the slower of the two. From the AnyBlob paper, Durner et al. "Exploiting Cloud Object Storage for High-Performance Analytics". VLDB Vol 16 Iss 11: > # 2.7 Tail Latency & Request Hedging > > Hedging against slow responses. Missing or slow responses from storage servers are a challenge for > users of cloud object stores. In our latency experiments, we see requests that have a considerable > tail latency. Some requests get lost without any notice. To mitigate these issues, cloud vendors > suggest restarting unresponsive requests,known as request hedging [ 10 , 34 ]. For example, the > typical 16 MiB request duration is below 600ms for AWS. However, less than 5% of objects are not > downloaded after 600ms. Missing responses can also be found by checking the first byte > latency. Similarly to the duration, less than 5% have a first byte latency above 200ms. Hedging > these requests does not introduce significant cost overhead. Signed-off-by: Daniel King <dan@spiraldb.com>
Merging this PR will improve performance by 10.45%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ⚡ | WallTime | u64_FoR[10M] |
387.9 µs | 351.2 µs | +10.45% |
Comparing dk/hedge-object-store (70ce09f) with develop (83664a0)
Footnotes
-
1323 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
Contributor
|
happy to play with it here, but I'm in favor of making it its own crate so its easier to share around, happy to pair on this once I wrap up some other stuff. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
There's a reasonable argument that this should either (a) be implemented via an object_store::HttpService or (b) implemented as a reqwest middleware. Either of those approaches can be upstreamed or made a separate open source library.
From the AnyBlob paper, Durner et al. "Exploiting Cloud Object Storage for High-Performance Analytics". VLDB Vol 16 Iss 11: