feat: 添加过载保护、背压和熔断机制
This commit is contained in:
+48
-17
@@ -22,15 +22,18 @@ import (
|
||||
|
||||
// Server is the main HTTP server for the AI gateway.
|
||||
type Server struct {
|
||||
cfg *config.Config
|
||||
logger *observability.Logger
|
||||
metrics *observability.Metrics
|
||||
HTTPSrv *http.Server
|
||||
auth *auth.Authenticator
|
||||
registry *adapter.Registry
|
||||
modelMap *router.LogicalModelMapping
|
||||
scheduler *scheduler.Scheduler
|
||||
sessions *session.Store
|
||||
cfg *config.Config
|
||||
logger *observability.Logger
|
||||
metrics *observability.Metrics
|
||||
HTTPSrv *http.Server
|
||||
auth *auth.Authenticator
|
||||
registry *adapter.Registry
|
||||
modelMap *router.LogicalModelMapping
|
||||
scheduler *scheduler.Scheduler
|
||||
sessions *session.Store
|
||||
breaker *scheduler.CircuitBreaker
|
||||
backpressure *scheduler.BackpressureManager
|
||||
overload *router.OverloadResolver
|
||||
}
|
||||
|
||||
// New creates a new Server instance with all components wired.
|
||||
@@ -60,6 +63,9 @@ func New(cfg *config.Config, logger *observability.Logger) (*Server, error) {
|
||||
// Initialize logical model mapping
|
||||
modelMap := router.NewLogicalModelMapping(cfg)
|
||||
|
||||
// Initialize overload resolver
|
||||
overloadResolver := router.NewOverloadResolver(&cfg.Routing, modelMap)
|
||||
|
||||
// Register adapters for each unique endpoint
|
||||
registered := make(map[string]bool)
|
||||
for _, mc := range cfg.Models {
|
||||
@@ -78,18 +84,39 @@ func New(cfg *config.Config, logger *observability.Logger) (*Server, error) {
|
||||
// Initialize scheduler
|
||||
sched := scheduler.NewScheduler(&cfg.Scheduler, logger)
|
||||
|
||||
// Initialize circuit breaker
|
||||
breaker := scheduler.NewCircuitBreaker(
|
||||
cfg.CircuitBreaker.ErrorRateThreshold,
|
||||
cfg.CircuitBreaker.MinRequests,
|
||||
cfg.CircuitBreaker.WindowSeconds,
|
||||
cfg.CircuitBreaker.OpenDurationSeconds,
|
||||
cfg.CircuitBreaker.HalfOpenMaxRequests,
|
||||
)
|
||||
|
||||
// Initialize backpressure manager
|
||||
bp := scheduler.NewBackpressureManager(
|
||||
cfg.Scheduler.MaxRunningTasks,
|
||||
cfg.Scheduler.MaxQueuedTasks,
|
||||
cfg.Backpressure.Level1Threshold,
|
||||
cfg.Backpressure.Level2Threshold,
|
||||
cfg.Backpressure.Level3Threshold,
|
||||
)
|
||||
|
||||
// Initialize metrics
|
||||
metrics := observability.NewMetrics()
|
||||
|
||||
s := &Server{
|
||||
cfg: cfg,
|
||||
logger: logger,
|
||||
metrics: metrics,
|
||||
auth: authenticator,
|
||||
registry: registry,
|
||||
modelMap: modelMap,
|
||||
scheduler: sched,
|
||||
sessions: sessionStore,
|
||||
cfg: cfg,
|
||||
logger: logger,
|
||||
metrics: metrics,
|
||||
auth: authenticator,
|
||||
registry: registry,
|
||||
modelMap: modelMap,
|
||||
scheduler: sched,
|
||||
sessions: sessionStore,
|
||||
breaker: breaker,
|
||||
backpressure: bp,
|
||||
overload: overloadResolver,
|
||||
}
|
||||
|
||||
mux := http.NewServeMux()
|
||||
@@ -128,6 +155,10 @@ func (s *Server) registerRoutes(mux *http.ServeMux) {
|
||||
// Session management
|
||||
mux.HandleFunc("/v1/sessions", s.handleSessions)
|
||||
mux.HandleFunc("/v1/sessions/", s.handleSessionByID)
|
||||
|
||||
// Task management
|
||||
mux.HandleFunc("/v1/tasks", s.handleTasks)
|
||||
mux.HandleFunc("/v1/tasks/", s.handleTaskByID)
|
||||
}
|
||||
|
||||
// Authenticator returns the authenticator instance (for testing/management).
|
||||
|
||||
Reference in New Issue
Block a user