go / expert
Snippet
Request Collapsing mit singleflight
Das singleflight-Paket bietet einen Mechanismus zur Unterdrückung doppelter Funktionsaufrufe. Es stellt sicher, dass für einen bestimmten Schlüssel jeweils nur eine Ausführung einer Funktion aktiv ist. Wenn mehrere Goroutinen gleichzeitig Do mit demselben Schlüssel aufrufen, löst die erste die Funktionsausführung aus, während die anderen warten, um genau dasselbe Ergebnis zu erhalten, sobald es fertig ist. Dies verhindert effektiv 'Thundering Herd'-Probleme bei nachgelagerten Diensten.
snippet.go
1
2
3
4
5
6
7
8
9
10
11
var g singleflight.Groupfunc fetchData(key string) (interface{}, error) {v, err, shared := g.Do(key, func() (interface{}, error) {return callExpensiveAPI(key)})if shared {log.Printf("Result for %s was shared", key)}return v, err}
Erklärung
1
g.Do(key, func()
Führt Aufrufe für den angegebenen Schlüssel aus und unterdrückt Duplikate.
2
shared
Ein Boolean, der angibt, ob das Ergebnis an mehrere Aufrufer zurückgegeben wurde.