LoadShed
LoadShed 미들웨어는 Fiber를 위해 설계되었으며, 특정 로드 기준에 따라 요청을 차단하여 서버 로드를 관리하는데 도움을 줍니다.
참고: Go 1.19 이상 필요
Installation
이 미들웨어는 Fiber v2를 지원합니다.
go get -u github.com/gofiber/fiber/v2
go get -u github.com/gofiber/contrib/loadshed
Signatures
loadshed.New(config ...loadshed.Config) fiber.Handler
Examples
Fiber 애플리케이션에서 LoadShed 미들웨어를 사용하려면 임포트하고 Fiber 앱에 적용하세요. 다음은 예제입니다:
package main
import (
"github.com/gofiber/fiber/v2"
loadshed "github.com/gofiber/contrib/loadshed"
)
func main() {
app := fiber.New()
// LoadShed 미들웨어 구성 및 사용
app.Use(loadshed.New(loadshed.Config{
Criteria: &loadshed.CPULoadCriteria{
LowerThreshold: 0.75, // 자신만의 하한값 설정
UpperThreshold: 0.90, // 자신만의 상한값 설정
Interval: 10 * time.Second,
Getter: &loadshed.DefaultCPUPercentGetter{},
},
}))
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString("Welcome!")
})
app.Listen(":3000")
}
Config
Fiber의 LoadShed 미들웨어는 애플리케이션의 요구사항에 따라 로드 제한 동작을 조정할 수 있는 다양한 구성 옵션을 제공합니다.
Next
func(*fiber.Ctx) bool
true를 반환할 때 이 미들웨어를 건너뛰는 함수.
nil
Criteria
LoadCriteria
로드 제한 기준을 정의하기 위한 인터페이스.
&CPULoadCriteria{...}
LoadCriteria
LoadCriteria는 LoadShed 미들웨어의 인터페이스로, 시스템에서 로드를 제한할 시기를 결정하는 기준을 정의합니다. 이 인터페이스의 다른 구현은 다양한 메트릭과 알고리즘을 사용하여 시스템 성능을 유지하기 위해 들어오는 요청을 언제 그리고 어떻게 제한할지 결정할 수 있습니다.
CPULoadCriteria
CPULoadCriteria
는 CPU 로드를 메트릭으로 사용하여 요청을 제한할지 여부를 결정하는 LoadCriteria
인터페이스의 구현입니다.
Properties
LowerThreshold
float64
분수 형태의 하한 CPU 사용률 (0.0에서 1.0). CPU 사용률이 이 임계값을 초과하면 요청이 제한 대상으로 간주됩니다.
UpperThreshold
float64
분수 형태의 상한 CPU 사용률 (0.0에서 1.0). CPU 사용률이 이 임계값을 초과하면 모든 요청이 제한됩니다.
Interval
time.Duration
CPU 사용률을 평균화하여 결정을 내리는 시간 간격입니다.
Getter
CPUPercentGetter
CPU 사용률 퍼센트를 가져오는 인터페이스.
작동 방식
CPULoadCriteria
는 CPU 사용률을 기반으로 시스템의 로드를 결정하고 들어오는 요청을 제한할지 여부를 결정합니다. 다음과 같은 원칙으로 작동합니다:
CPU 사용률 측정: 지정된 간격 동안 CPU 사용률을 측정합니다.
임계값: 요청 제한을 시작할 시점을 결정하기 위해
LowerThreshold
와UpperThreshold
값을 사용합니다.비례 거부 확률:
LowerThreshold
미만: 시스템이 허용 가능한 로드 아래에 있는 것으로 간주되므로 요청이 거부되지 않습니다.LowerThreshold
와UpperThreshold
사이: CPU 사용률이UpperThreshold
에 접근함에 따라 요청이 거부될 확률이 높아집니다. 이는 다음 공식을 사용하여 계산됩니다:rejectionProbability := (cpuUsage - LowerThreshold*100) / (UpperThreshold - LowerThreshold)
UpperThreshold
초과: 시스템 과부하를 방지하기 위해 모든 요청이 거부됩니다.
이 메커니즘은 시스템이 다양한 트래픽 조건에서 안정성과 성능을 유지하면서 로드를 적응적으로 관리할 수 있도록 합니다.
기본 구성
다음은 LoadShed 미들웨어의 LoadCriteria
에 대한 기본 구성입니다.
var ConfigDefault = Config{
Next: nil,
Criteria: &CPULoadCriteria{
LowerThreshold: 0.90, // 90% CPU 사용률을 제한 고려 시작점으로 설정
UpperThreshold: 0.95, // 95% CPU 사용률을 모든 요청 제한 시점으로 설정
Interval: 10 * time.Second, // CPU 사용률을 10초 동안 평균화
Getter: &DefaultCPUPercentGetter{}, // CPU 사용률을 가져오는 기본 방법
},
}
Last updated