Go Fiber 한글 공식 문서
  • 🙇‍♀️안녕하세요
  • 🏠Home
    • 👋Welcome
    • 📁API
      • 📦Fiber
      • 🚀App
      • 🧠Ctx
      • 📋Constants
      • 🌎Client
      • 📃Log
      • 🧬Middleware
        • Adaptor
        • BasicAuth
        • Cache
        • Compress
        • CORS
        • CSRF
        • EarlyData
        • Encrypt Cookie
        • EnvVar
        • ETag
        • ExpVar
        • Favicon
        • FileSystem
        • Health Check
        • Helmet
        • Idempotency
        • Keyauth
        • Limiter
        • Logger
        • Monitor
        • Pprof
        • Proxy
        • Recover
        • Redirect
        • RequestID
        • Rewrite
        • Session
        • Skip
        • Timeout
    • 📁Guide
      • 🔌Routing
      • 🎭Grouping
      • 📝Templates
      • 🐛Error Handling
      • 🔎Validation
      • 🎣Hooks
      • ⚡Make Fiber Faster
    • 📁Extra
      • 🤔FAQ
      • 📊Benchmarks
  • 🧩Extra
    • 🧬Contrip
      • 👋Welcome
      • Casbin
      • Fgprof
      • Fiberi18n
      • Fibernewrelic
      • Fibersentry
      • Fiberzap
      • Fiberzerolog
      • JWT
      • LoadShed
      • Opafiber
      • Otelfiber
        • Example
      • Paseto
      • README
      • Swagger
      • Websocket
    • 📦Storage
      • 👋Welcome
      • ArangoDB
      • Azure Blob
      • Badger
      • Bbolt
      • Coherence
      • Couchbase
      • DynamoDB
      • Etcd
      • Memcache
      • Memory
      • Minio
      • MongoDB
      • MSSQL
      • MySQL
      • Nats
      • Pebble
      • Postgres
      • Redis
      • Ristretto
      • Rueidis
      • S3
      • ScyllaDb
      • SQLite3
    • 📃Template
      • 👋Welcome
      • Ace
      • Amber
      • Django
      • Handlebars
      • HTML
        • Golang Templates Cheatsheet
      • Jet
      • Mustache
      • Pug
      • Slim
Powered by GitBook
On this page
  • Installation
  • Signatures
  • Examples
  • Config
  • LoadCriteria
  • 기본 구성
  1. Extra
  2. Contrip

LoadShed

PreviousJWTNextOpafiber

Last updated 1 year ago


LoadShed 미들웨어는 를 위해 설계되었으며, 특정 로드 기준에 따라 요청을 차단하여 서버 로드를 관리하는데 도움을 줍니다.

참고: 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 미들웨어는 애플리케이션의 요구사항에 따라 로드 제한 동작을 조정할 수 있는 다양한 구성 옵션을 제공합니다.

Property
Type
Description
Default

Next

func(*fiber.Ctx) bool

true를 반환할 때 이 미들웨어를 건너뛰는 함수.

nil

Criteria

LoadCriteria

로드 제한 기준을 정의하기 위한 인터페이스.

&CPULoadCriteria{...}

LoadCriteria

LoadCriteria는 LoadShed 미들웨어의 인터페이스로, 시스템에서 로드를 제한할 시기를 결정하는 기준을 정의합니다. 이 인터페이스의 다른 구현은 다양한 메트릭과 알고리즘을 사용하여 시스템 성능을 유지하기 위해 들어오는 요청을 언제 그리고 어떻게 제한할지 결정할 수 있습니다.

CPULoadCriteria

CPULoadCriteria는 CPU 로드를 메트릭으로 사용하여 요청을 제한할지 여부를 결정하는 LoadCriteria 인터페이스의 구현입니다.

Properties

Property
Type
Description

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 사용률을 가져오는 기본 방법
  },
}
🧩
🧬
Fiber