Commit 4e78a45
authored
ref(server): Replace bandwidth EWMA with lock-free GCRA buckets (#554)
Bandwidth rate limiting now uses debt-based GCRA (Generic Cell Rate
Algorithm) buckets instead of EWMA estimation. Each bucket tracks a
single atomic timestamp — the point at which all recorded traffic is
"paid off." Admission checks compare this deadline against wall-clock
time plus a configurable burst tolerance, with no background estimation
task required.
This removes the 50ms EWMA tick and its associated state
(per-scope/per-usecase shadow EWMA maps, the `EwmaEstimator` struct),
replacing them with lock-free `AtomicU64::update` operations that are
both simpler and more responsive — debt is visible immediately after
bytes are recorded rather than after the next estimation tick. The
`burst_ms` config parameter (default: 1000ms) controls how much
transient overshoot is tolerated before rejection.
EWMA gauges are removed from the KEDA endpoint since the monotonic
counters with `irate()` are strictly more responsive. The throughput
background task is simplified to emit only the limit and map-size gauges
at 1s intervals. The bandwidth limit gauge is now emitted once at
construction.1 parent b74a53a commit 4e78a45
6 files changed
Lines changed: 386 additions & 409 deletions
File tree
- objectstore-server
- docs
- src
- endpoints
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
182 | 182 | | |
183 | 183 | | |
184 | 184 | | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | | - | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
189 | 192 | | |
190 | 193 | | |
191 | 194 | | |
192 | 195 | | |
193 | 196 | | |
194 | 197 | | |
195 | 198 | | |
196 | | - | |
197 | | - | |
198 | | - | |
199 | | - | |
200 | | - | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
201 | 202 | | |
202 | 203 | | |
203 | | - | |
204 | | - | |
| 204 | + | |
| 205 | + | |
205 | 206 | | |
206 | 207 | | |
207 | 208 | | |
| |||
244 | 245 | | |
245 | 246 | | |
246 | 247 | | |
247 | | - | |
248 | | - | |
249 | | - | |
| 248 | + | |
250 | 249 | | |
251 | 250 | | |
252 | 251 | | |
253 | | - | |
254 | | - | |
255 | 252 | | |
256 | 253 | | |
257 | 254 | | |
258 | | - | |
259 | | - | |
260 | | - | |
| 255 | + | |
261 | 256 | | |
262 | 257 | | |
263 | 258 | | |
| |||
269 | 264 | | |
270 | 265 | | |
271 | 266 | | |
272 | | - | |
273 | | - | |
274 | | - | |
275 | | - | |
276 | | - | |
277 | | - | |
278 | | - | |
279 | | - | |
280 | | - | |
281 | | - | |
282 | | - | |
283 | | - | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
289 | | - | |
290 | | - | |
291 | | - | |
292 | | - | |
293 | | - | |
| 267 | + | |
294 | 268 | | |
295 | | - | |
| 269 | + | |
| 270 | + | |
296 | 271 | | |
297 | 272 | | |
298 | 273 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1040 | 1040 | | |
1041 | 1041 | | |
1042 | 1042 | | |
| 1043 | + | |
1043 | 1044 | | |
1044 | 1045 | | |
1045 | 1046 | | |
| |||
1074 | 1075 | | |
1075 | 1076 | | |
1076 | 1077 | | |
| 1078 | + | |
1077 | 1079 | | |
1078 | 1080 | | |
1079 | 1081 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
6 | | - | |
7 | 5 | | |
8 | 6 | | |
9 | 7 | | |
| |||
21 | 19 | | |
22 | 20 | | |
23 | 21 | | |
24 | | - | |
25 | 22 | | |
26 | 23 | | |
27 | | - | |
28 | 24 | | |
29 | 25 | | |
30 | 26 | | |
| |||
36 | 32 | | |
37 | 33 | | |
38 | 34 | | |
39 | | - | |
40 | | - | |
41 | | - | |
42 | 35 | | |
43 | 36 | | |
44 | 37 | | |
45 | | - | |
46 | | - | |
47 | | - | |
48 | 38 | | |
49 | 39 | | |
50 | 40 | | |
| |||
0 commit comments