Skip to content

Commit dc4c49f

Browse files
store: support hedged requests (#7860)
* support hedged requests in store Signed-off-by: milinddethe15 <[email protected]> * hedged roundtripper with tdigest for dynamic delay Signed-off-by: milinddethe15 <[email protected]> * refactor struct and fix lint Signed-off-by: milinddethe15 <[email protected]> * Improve hedging implementation Signed-off-by: milinddethe15 <[email protected]> * Improved hedging implementation Signed-off-by: milinddethe15 <[email protected]> * Update store doc Signed-off-by: milinddethe15 <[email protected]> * fix white space Signed-off-by: milinddethe15 <[email protected]> * add enabled field Signed-off-by: milinddethe15 <[email protected]> --------- Signed-off-by: milinddethe15 <[email protected]>
1 parent f9da21e commit dc4c49f

File tree

16 files changed

+177
-40
lines changed

16 files changed

+177
-40
lines changed

cmd/thanos/compact.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ func runCompact(
206206
return err
207207
}
208208

209-
bkt, err := client.NewBucket(logger, confContentYaml, component.String())
209+
bkt, err := client.NewBucket(logger, confContentYaml, component.String(), nil)
210210
if err != nil {
211211
return err
212212
}

cmd/thanos/downsample.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func RunDownsample(
8484
return err
8585
}
8686

87-
bkt, err := client.NewBucket(logger, confContentYaml, component.Downsample.String())
87+
bkt, err := client.NewBucket(logger, confContentYaml, component.Downsample.String(), nil)
8888
if err != nil {
8989
return err
9090
}

cmd/thanos/receive.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ func runReceive(
193193
}
194194
// The background shipper continuously scans the data directory and uploads
195195
// new blocks to object storage service.
196-
bkt, err = client.NewBucket(logger, confContentYaml, comp.String())
196+
bkt, err = client.NewBucket(logger, confContentYaml, comp.String(), nil)
197197
if err != nil {
198198
return err
199199
}

cmd/thanos/rule.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ func runRule(
842842
if len(confContentYaml) > 0 {
843843
// The background shipper continuously scans the data directory and uploads
844844
// new blocks to Google Cloud Storage or an S3-compatible storage service.
845-
bkt, err := client.NewBucket(logger, confContentYaml, component.Rule.String())
845+
bkt, err := client.NewBucket(logger, confContentYaml, component.Rule.String(), nil)
846846
if err != nil {
847847
return err
848848
}

cmd/thanos/sidecar.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ func runSidecar(
380380
if uploads {
381381
// The background shipper continuously scans the data directory and uploads
382382
// new blocks to Google Cloud Storage or an S3-compatible storage service.
383-
bkt, err := client.NewBucket(logger, confContentYaml, component.Sidecar.String())
383+
bkt, err := client.NewBucket(logger, confContentYaml, component.Sidecar.String(), nil)
384384
if err != nil {
385385
return err
386386
}

cmd/thanos/store.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/prometheus/client_golang/prometheus"
2222
commonmodel "github.com/prometheus/common/model"
2323
"github.com/prometheus/common/route"
24+
"gopkg.in/yaml.v2"
2425

2526
"github.com/thanos-io/objstore"
2627
"github.com/thanos-io/objstore/client"
@@ -32,6 +33,7 @@ import (
3233
"github.com/thanos-io/thanos/pkg/block/metadata"
3334
"github.com/thanos-io/thanos/pkg/component"
3435
hidden "github.com/thanos-io/thanos/pkg/extflag"
36+
"github.com/thanos-io/thanos/pkg/exthttp"
3537
"github.com/thanos-io/thanos/pkg/extkingpin"
3638
"github.com/thanos-io/thanos/pkg/extprom"
3739
extpromhttp "github.com/thanos-io/thanos/pkg/extprom/http"
@@ -308,8 +310,11 @@ func runStore(
308310
if err != nil {
309311
return err
310312
}
311-
312-
bkt, err := client.NewBucket(logger, confContentYaml, conf.component.String())
313+
customBktConfig := exthttp.DefaultCustomBucketConfig()
314+
if err := yaml.Unmarshal(confContentYaml, &customBktConfig); err != nil {
315+
return errors.Wrap(err, "parsing config YAML file")
316+
}
317+
bkt, err := client.NewBucket(logger, confContentYaml, conf.component.String(), exthttp.CreateHedgedTransportWithConfig(customBktConfig))
313318
if err != nil {
314319
return err
315320
}

cmd/thanos/tools_bucket.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ func registerBucketVerify(app extkingpin.AppClause, objStoreConfig *extflag.Path
327327
return err
328328
}
329329

330-
bkt, err := client.NewBucket(logger, confContentYaml, component.Bucket.String())
330+
bkt, err := client.NewBucket(logger, confContentYaml, component.Bucket.String(), nil)
331331
if err != nil {
332332
return err
333333
}
@@ -346,7 +346,7 @@ func registerBucketVerify(app extkingpin.AppClause, objStoreConfig *extflag.Path
346346
}
347347
} else {
348348
// nil Prometheus registerer: don't create conflicting metrics.
349-
backupBkt, err = client.NewBucket(logger, backupconfContentYaml, component.Bucket.String())
349+
backupBkt, err = client.NewBucket(logger, backupconfContentYaml, component.Bucket.String(), nil)
350350
if err != nil {
351351
return err
352352
}
@@ -411,7 +411,7 @@ func registerBucketLs(app extkingpin.AppClause, objStoreConfig *extflag.PathOrCo
411411
return err
412412
}
413413

414-
bkt, err := client.NewBucket(logger, confContentYaml, component.Bucket.String())
414+
bkt, err := client.NewBucket(logger, confContentYaml, component.Bucket.String(), nil)
415415
if err != nil {
416416
return err
417417
}
@@ -519,7 +519,7 @@ func registerBucketInspect(app extkingpin.AppClause, objStoreConfig *extflag.Pat
519519
return err
520520
}
521521

522-
bkt, err := client.NewBucket(logger, confContentYaml, component.Bucket.String())
522+
bkt, err := client.NewBucket(logger, confContentYaml, component.Bucket.String(), nil)
523523
if err != nil {
524524
return err
525525
}
@@ -629,7 +629,7 @@ func registerBucketWeb(app extkingpin.AppClause, objStoreConfig *extflag.PathOrC
629629
return err
630630
}
631631

632-
bkt, err := client.NewBucket(logger, confContentYaml, component.Bucket.String())
632+
bkt, err := client.NewBucket(logger, confContentYaml, component.Bucket.String(), nil)
633633
if err != nil {
634634
return errors.Wrap(err, "bucket client")
635635
}
@@ -826,7 +826,7 @@ func registerBucketCleanup(app extkingpin.AppClause, objStoreConfig *extflag.Pat
826826
return err
827827
}
828828

829-
bkt, err := client.NewBucket(logger, confContentYaml, component.Cleanup.String())
829+
bkt, err := client.NewBucket(logger, confContentYaml, component.Cleanup.String(), nil)
830830
if err != nil {
831831
return err
832832
}
@@ -1084,7 +1084,7 @@ func registerBucketMarkBlock(app extkingpin.AppClause, objStoreConfig *extflag.P
10841084
return err
10851085
}
10861086

1087-
bkt, err := client.NewBucket(logger, confContentYaml, component.Mark.String())
1087+
bkt, err := client.NewBucket(logger, confContentYaml, component.Mark.String(), nil)
10881088
if err != nil {
10891089
return err
10901090
}
@@ -1164,7 +1164,7 @@ func registerBucketRewrite(app extkingpin.AppClause, objStoreConfig *extflag.Pat
11641164
return err
11651165
}
11661166

1167-
bkt, err := client.NewBucket(logger, confContentYaml, component.Rewrite.String())
1167+
bkt, err := client.NewBucket(logger, confContentYaml, component.Rewrite.String(), nil)
11681168
if err != nil {
11691169
return err
11701170
}
@@ -1372,7 +1372,7 @@ func registerBucketRetention(app extkingpin.AppClause, objStoreConfig *extflag.P
13721372
return err
13731373
}
13741374

1375-
bkt, err := client.NewBucket(logger, confContentYaml, component.Retention.String())
1375+
bkt, err := client.NewBucket(logger, confContentYaml, component.Retention.String(), nil)
13761376
if err != nil {
13771377
return err
13781378
}
@@ -1462,7 +1462,7 @@ func registerBucketUploadBlocks(app extkingpin.AppClause, objStoreConfig *extfla
14621462
return errors.Wrap(err, "unable to parse objstore config")
14631463
}
14641464

1465-
bkt, err := client.NewBucket(logger, confContentYaml, component.Upload.String())
1465+
bkt, err := client.NewBucket(logger, confContentYaml, component.Upload.String(), nil)
14661466
if err != nil {
14671467
return errors.Wrap(err, "unable to create bucket")
14681468
}

docs/components/store.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,33 @@ Note that there must be no trailing slash in the `peers` configuration i.e. one
576576

577577
If timeout is set to zero then there is no timeout for fetching and fetching's lifetime is equal to the lifetime to the original request's lifetime. It is recommended to keep it higher than zero. It is generally preferred to keep this value higher because the fetching operation potentially includes loading of data from remote object storage.
578578

579+
## Hedged Requests
580+
581+
Thanos Store Gateway supports `hedged requests` to enhance performance and reliability, particularly in high-latency environments. This feature addresses `long-tail latency issues` that can occur between the Thanos Store Gateway and an external cache, reducing the impact of slower response times on overall performance.
582+
583+
The configuration options for hedged requests allow for tuning based on latency tolerance and cost considerations, as some providers may charge per request.
584+
585+
In the `bucket.yml` file, you can specify the following fields under `hedging_config`:
586+
587+
- `enabled`: bool to enable hedged requests.
588+
- `up_to`: maximum number of hedged requests allowed for each initial request.
589+
- **Purpose**: controls the redundancy level of hedged requests to improve response times.
590+
- **Cost vs. Benefit**: increasing up_to can reduce latency but may increase costs, as some providers charge per request. Higher values provide diminishing returns on latency beyond a certain level.
591+
- `quantile`: latency threshold, specified as a quantile (e.g., percentile), which determines when additional hedged requests should be sent.
592+
- **Purpose**: controls when hedged requests are triggered based on response time distribution.
593+
- **Cost vs. Benefit**: lower quantile (e.g., 0.7) initiates hedged requests sooner, potentially raising costs while lowering latency variance. A higher quantile (e.g., 0.95) will initiate hedged requests later, reducing cost by limiting redundancy.
594+
595+
By default, `hedging_config` is set as follows:
596+
597+
```yaml
598+
hedging_config:
599+
enabled: false
600+
up_to: 3
601+
quantile: 0.9
602+
```
603+
604+
This configuration sends up to three additional requests if the initial request response time exceeds the 90th percentile.
605+
579606
## Index Header
580607

581608
In order to query series inside blocks from object storage, Store Gateway has to know certain initial info from each block index. In order to achieve so, on startup the Gateway builds an `index-header` for each block and stores it on local disk; such `index-header` is build by downloading specific pieces of original block's index, stored on local disk and then mmaped and used by Store Gateway.

go.mod

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,15 @@ require (
5353
github.com/pkg/errors v0.9.1
5454
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
5555
github.com/prometheus/alertmanager v0.27.0
56-
github.com/prometheus/client_golang v1.20.4
56+
github.com/prometheus/client_golang v1.20.5
5757
github.com/prometheus/client_model v0.6.1
5858
github.com/prometheus/common v0.60.0
5959
github.com/prometheus/exporter-toolkit v0.12.0
6060
// Prometheus maps version 2.x.y to tags v0.x.y.
6161
github.com/prometheus/prometheus v0.55.1-0.20241102120812-a6fd22b9d2c8
6262
github.com/sony/gobreaker v0.5.0
6363
github.com/stretchr/testify v1.9.0
64-
github.com/thanos-io/objstore v0.0.0-20240913074259-63feed0da069
64+
github.com/thanos-io/objstore v0.0.0-20241024120700-168679cbbf20
6565
github.com/thanos-io/promql-engine v0.0.0-20240921092401-37747eddbd31
6666
github.com/uber/jaeger-client-go v2.30.0+incompatible
6767
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
@@ -144,6 +144,7 @@ require (
144144
github.com/google/s2a-go v0.1.8 // indirect
145145
github.com/huaweicloud/huaweicloud-sdk-go-obs v3.23.3+incompatible // indirect
146146
github.com/jcchavezs/porto v0.1.0 // indirect
147+
github.com/leesper/go_rng v0.0.0-20190531154944-a612b043e353 // indirect
147148
github.com/mdlayher/socket v0.4.1 // indirect
148149
github.com/mdlayher/vsock v1.2.1 // indirect
149150
github.com/metalmatze/signal v0.0.0-20210307161603-1c9aa721a97a // indirect
@@ -191,10 +192,12 @@ require (
191192
github.com/aws/smithy-go v1.11.1 // indirect
192193
github.com/baidubce/bce-sdk-go v0.9.111 // indirect
193194
github.com/beorn7/perks v1.0.1 // indirect
195+
github.com/caio/go-tdigest v3.1.0+incompatible
194196
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
195197
github.com/chromedp/sysutil v1.0.0 // indirect
196198
github.com/clbanning/mxj v1.8.4 // indirect
197199
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
200+
github.com/cristalhq/hedgedhttp v0.9.1
198201
github.com/dennwc/varint v1.0.0 // indirect
199202
github.com/edsrzf/mmap-go v1.1.0 // indirect
200203
github.com/elastic/go-sysinfo v1.8.1 // indirect

go.sum

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1452,6 +1452,8 @@ github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw=
14521452
github.com/bluele/gcache v0.0.2/go.mod h1:m15KV+ECjptwSPxKhOhQoAFQVtUFjTVkc3H8o0t/fp0=
14531453
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
14541454
github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
1455+
github.com/caio/go-tdigest v3.1.0+incompatible h1:uoVMJ3Q5lXmVLCCqaMGHLBWnbGoN6Lpu7OAUPR60cds=
1456+
github.com/caio/go-tdigest v3.1.0+incompatible/go.mod h1:sHQM/ubZStBUmF1WbB8FAm8q9GjDajLC5T7ydxE3JHI=
14551457
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
14561458
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
14571459
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
@@ -1508,6 +1510,8 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
15081510
github.com/cortexproject/promqlsmith v0.0.0-20240506042652-6cfdd9739a5e h1:nOWmgQD3L/Z0bmm29iDxB7nlqjMnh7yD/PNOx9rnZmA=
15091511
github.com/cortexproject/promqlsmith v0.0.0-20240506042652-6cfdd9739a5e/go.mod h1:+bSqRETXJ1uk2S93m//htzTVqu8DJPvlGEb3bSE9PzI=
15101512
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
1513+
github.com/cristalhq/hedgedhttp v0.9.1 h1:g68L9cf8uUyQKQJwciD0A1Vgbsz+QgCjuB1I8FAsCDs=
1514+
github.com/cristalhq/hedgedhttp v0.9.1/go.mod h1:XkqWU6qVMutbhW68NnzjWrGtH8NUx1UfYqGYtHVKIsI=
15111515
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
15121516
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
15131517
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -1970,6 +1974,8 @@ github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7
19701974
github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8=
19711975
github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80 h1:6Yzfa6GP0rIo/kULo2bwGEkFvCePZ3qHDDTC3/J9Swo=
19721976
github.com/ledongthuc/pdf v0.0.0-20220302134840-0c2507a12d80/go.mod h1:imJHygn/1yfhB7XSJJKlFZKl/J+dCPAknuiaGOshXAs=
1977+
github.com/leesper/go_rng v0.0.0-20190531154944-a612b043e353 h1:X/79QL0b4YJVO5+OsPH9rF2u428CIrGL/jLmPsoOQQ4=
1978+
github.com/leesper/go_rng v0.0.0-20190531154944-a612b043e353/go.mod h1:N0SVk0uhy+E1PZ3C9ctsPRlvOPAFPkCNlcPBDkt0N3U=
19731979
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
19741980
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20210210170715-a8dfcb80d3a7 h1:YjW+hUb8Fh2S58z4av4t/0cBMK/Q0aP48RocCFsC8yI=
19751981
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20210210170715-a8dfcb80d3a7/go.mod h1:Spd59icnvRxSKuyijbbwe5AemzvcyXAUBgApa7VybMw=
@@ -2136,8 +2142,8 @@ github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrb
21362142
github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
21372143
github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y=
21382144
github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk=
2139-
github.com/prometheus/client_golang v1.20.4 h1:Tgh3Yr67PaOv/uTqloMsCEdeuFTatm5zIq5+qNN23vI=
2140-
github.com/prometheus/client_golang v1.20.4/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
2145+
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
2146+
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
21412147
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
21422148
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
21432149
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -2249,8 +2255,8 @@ github.com/tencentyun/cos-go-sdk-v5 v0.7.40 h1:W6vDGKCHe4wBACI1d2UgE6+50sJFhRWU4
22492255
github.com/tencentyun/cos-go-sdk-v5 v0.7.40/go.mod h1:4dCEtLHGh8QPxHEkgq+nFaky7yZxQuYwgSJM87icDaw=
22502256
github.com/thanos-community/galaxycache v0.0.0-20211122094458-3a32041a1f1e h1:f1Zsv7OAU9iQhZwigp50Yl38W10g/vd5NC8Rdk1Jzng=
22512257
github.com/thanos-community/galaxycache v0.0.0-20211122094458-3a32041a1f1e/go.mod h1:jXcofnrSln/cLI6/dhlBxPQZEEQHVPCcFaH75M+nSzM=
2252-
github.com/thanos-io/objstore v0.0.0-20240913074259-63feed0da069 h1:TUPZ6euAh8I62KrpDnBIg7k2C5HjgXQnVHoUUMacGwM=
2253-
github.com/thanos-io/objstore v0.0.0-20240913074259-63feed0da069/go.mod h1:Cba80S8NbVBBdyZKzra7San/jXvpAxArbpFymWzIZhg=
2258+
github.com/thanos-io/objstore v0.0.0-20241024120700-168679cbbf20 h1:NmVMYAsXPnj9zRG5dDj0SGqrHfbs/1parMRZTvwB8YE=
2259+
github.com/thanos-io/objstore v0.0.0-20241024120700-168679cbbf20/go.mod h1:/ZMUxFcp/nT6oYV5WslH9k07NU/+86+aibgZRmMMr/4=
22542260
github.com/thanos-io/promql-engine v0.0.0-20240921092401-37747eddbd31 h1:xPaP58g+3EPohdw4cv+6jv5+LcX6LynhHvQcYwTAMxQ=
22552261
github.com/thanos-io/promql-engine v0.0.0-20240921092401-37747eddbd31/go.mod h1:wx0JlRZtsB2S10JYUgeg5GqLfMxw31SzArP+28yyE00=
22562262
github.com/themihai/gomemcache v0.0.0-20180902122335-24332e2d58ab h1:7ZR3hmisBWw77ZpO1/o86g+JV3VKlk3d48jopJxzTjU=

0 commit comments

Comments
 (0)